Reemplazo de la IU de autorización con una API para autotests

Uno de los desafíos más importantes en las pruebas automatizadas, en mi opinión, es garantizar su alta confiabilidad. Al resolver el problema de mejorar los indicadores de confiabilidad de las pruebas, el enfoque de usar la interfaz API en lugar de la UI ha demostrado su eficacia. En este artículo, analizaremos en detalle un mecanismo simple para reemplazar la autorización de IU por una API.



Hay muchos tipos de autenticación: básica, resumen, formulario, OAuth 1 y OAuth 2. Como ejemplo, propongo considerar uno de los más simples, a saber, formulario. El objetivo principal del artículo es mostrar el enfoque para implementar la API de autorización para pruebas de IU. Escribiremos pruebas e implementación en Java. Desde las herramientas usaremos Chrome DevTools.



Usamos Kanboard y DVWA como objetos de prueba . Estos son productos de código abierto con una licencia abierta y son bastante fáciles de implementar localmente. Siga los enlaces para leer más sobre estos productos y, si es necesario, lea las instrucciones del barrido.



Cree el proyecto usando maven y agregue testng, selenide, rest-sure, json-path, jsoup, maven-compiler-plugin y maven-surefire-plugin.



Inicie sesión en Kanboard con la pestaña Network Chrome DevTools abierta.



imagen



imagen



Al analizar DevTools, podemos descubrir el algoritmo de autorización. En este caso, se realizan dos solicitudes de autorización: GET con dos parámetros de consulta y POST con un par de inicio de sesión / contraseña y un token csrf. Se requiere la primera solicitud para obtener la cookie KB_SID. El segundo es para la cookie KB_RM. Al establecer ambos valores en WebDriver, obtenemos acceso a la página principal.



La primera solicitud en RestAssured se verá así



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


De ahí obtenemos la cookie KB_SID



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


El token CSRF está en el inicio de la página HTML que podemos ver en el cuerpo de la respuesta.



imagen



La biblioteca jsoup nos ayudará a conseguirlo, lo que nos permitirá dividir el documento en elementos. La búsqueda se realiza de la misma forma que los elementos web.



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


La segunda solicitud a RestAssured se verá así:



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