Um dos desafios mais importantes em testes automatizados, na minha opinião, é garantir sua alta confiabilidade. Ao resolver o problema de melhorar os indicadores de confiabilidade de teste, a abordagem de usar a interface da API em vez da IU se provou bem. Neste artigo, analisaremos em detalhes um mecanismo simples para substituir a autorização da IU pela API.
Existem muitos tipos de autenticação - Basic, Digest, Form, OAuth 1 e OAuth 2. Como exemplo, proponho considerar um dos mais simples, nomeadamente o Form. O principal objetivo do artigo é mostrar a abordagem para implementar a API de autorização para testes de IU. Vamos escrever testes e implementação em Java. A partir das ferramentas, usaremos o Chrome DevTools.
Usamos Kanboard e DVWA como objetos de teste . Esses são produtos de código aberto com uma licença aberta e são bastante fáceis de implantar localmente. Siga os links para ler mais sobre esses produtos e, se necessário, leia as instruções da varredura.
Vamos criar o projeto usando maven e adicionar testng, selenide, rest-sure, json-path, jsoup, maven-compiler-plugin e maven-surefire-plugin.
Faça login no Kanboard com a guia Network Chrome DevTools aberta.
Ao analisar DevTools, podemos descobrir o algoritmo de autorização. Nesse caso, duas solicitações de autorização são feitas: GET com dois parâmetros de consulta e POST com um par login / senha e um token csrf. A primeira solicitação é necessária para obter o cookie KB_SID. O segundo é para o cookie KB_RM. Definindo ambos os valores no WebDriver, obtemos acesso à página principal.
A primeira solicitação no RestAssured será semelhante a esta
Response response01 = given()
.queryParam("controller", "AuthController")
.queryParam("action", "login")
.when()
.get(BASE_URL);
A partir dele, obtemos o cookie KB_SID
String cookieKBSID = response01.getCookie("KB_SID");
O token CSRF está na página inicial da página HTML que podemos ver no corpo da resposta.
A biblioteca jsoup nos ajudará a obtê-lo, o que nos permite dividir o documento em elementos. A pesquisa é feita da mesma forma que os itens da web.
String cSRFToken = Jsoup.parseBodyFragment(response01.body().asString())
.getElementsByAttributeValue("name", "csrf_token").attr("value");
A segunda solicitação para RestAssured será semelhante a esta:
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.
, .