我认为,自动化测试中最重要的挑战之一就是确保其高可靠性。在解决改善测试可靠性指标的问题时,使用API接口代替UI的方法已被证明是很好的。在本文中,我们将详细分析一种用API替换UI授权的简单机制。
身份验证有很多类型-基本,摘要,表单,OAuth 1和OAuth2。作为示例,我建议考虑一种最简单的表单,即表单。本文的主要目的是展示实现UI测试授权API的方法。我们将用Java编写测试和实现。在这些工具中,我们将使用Chrome DevTools。
我们使用Kanboard和DVWA作为测试对象。这些是具有开放许可证的开源产品,并且在本地部署相当容易。请通过链接阅读有关这些产品的更多信息,如有必要,请阅读扫视说明。
使用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.
, .