使用用于自动测试的API替换授权UI

我认为,自动化测试中最重要的挑战之一就是确保其高可靠性。在解决改善测试可靠性指标的问题时,使用API​​接口代替UI的方法已被证明是很好的。在本文中,我们将详细分析一种用API替换UI授权的简单机制。



身份验证有很多类型-基本,摘要,表单,OAuth 1和OAuth2。作为示例,我建议考虑一种最简单的表单,即表单。本文的主要目的是展示实现UI测试授权API的方法。我们将用Java编写测试和实现。在这些工具中,我们将使用Chrome DevTools。



我们使用KanboardDVWA作为测试对象这些是具有开放许可证的开源产品,并且在本地部署相当容易。请通过链接阅读有关这些产品的更多信息,如有必要,请阅读扫视说明。



使用maven创建项目,然后添加testng,selenide,确保安全,json路径,jsoup,maven-compiler-plugin和maven-surefire-plugin。



在“网络Chrome浏览器开发工具”标签打开的情况下登录到Kanboard。



图片



图片



通过分析DevTools,我们可以找到授权算法。在这种情况下,将发出两个授权请求:具有两个查询参数的GET和具有登录名/密码对和一个csrf令牌的POST。需要第一个请求才能获取KB_SID cookie。第二个用于KB_RM cookie。通过在WebDriver中设置这两个值,我们可以访问主页。



RestAssured中的第一个请求将如下所示



Response response01 = given()
                .queryParam("controller", "AuthController")
                .queryParam("action", "login")
                .when()
                .get(BASE_URL);


从中我们得到KB_SID cookie



String cookieKBSID = response01.getCookie("KB_SID");


CSRF令牌位于我们可以在响应正文中看到的HTML页面的主页中。



图片



jsoup库将帮助我们获取它,这使我们可以将文档拆分为元素。搜索与Web项相同。



String cSRFToken = Jsoup.parseBodyFragment(response01.body().asString())
       .getElementsByAttributeValue("name", "csrf_token").attr("value");


对RestAssured的第二个请求将如下所示:



Response response02 = RestAssured
       .given()
       .config(RestAssured.config()
       .encoderConfig(EncoderConfig.encoderConfig()
       .encodeContentTypeAs("x-www-form-urlencoded", ContentType.URLENC)))
       .contentType("application/x-www-form-urlencoded; charset=UTF-8")
       .formParam("remember_me", "1")
       .formParam("username", "admin")
       .formParam("password", "admin")
       .formParam("csrf_token", cSRFToken)
       .queryParam("controller", "AuthController")
       .queryParam("action", "check")
       .cookie("KB_SID", cookieKBSID)
       .when()
       .post(BASE_URL);


, (encoderConfig, encodeContentTypeAs).



KB_RM cookie.



String setCookieHeaderValue = response02.header("Set-Cookie");


, , cookie.



WebDriverRunner.getWebDriver()
       .manage().addCookie(new Cookie("KB_SID", cookieKBSID));
WebDriverRunner.getWebDriver()
       .manage().addCookie(new Cookie("KB_RM", cookieKBRM));
Selenide.open(url);


DVWA , .



, . , – RestAssured.



, .




All Articles