Substituição da autorização da IU com API para autotestes

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.



imagem



imagem



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.



imagem



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.



, .




All Articles