Remplacement de l'interface utilisateur d'autorisation par une API pour les tests automatiques

L'un des défis les plus importants des tests automatisés, à mon avis, est d'assurer sa haute fiabilité. En résolvant le problème de l'amélioration des indicateurs de fiabilité des tests, l'approche consistant à utiliser l'interface API au lieu de l'interface utilisateur a fait ses preuves. Dans cet article, nous analyserons en détail un mécanisme simple pour remplacer l'autorisation d'interface utilisateur par une API.



Il existe de nombreux types d'authentification - Basic, Digest, Form, OAuth 1 et OAuth 2. A titre d'exemple, je propose d'envisager l'un des plus simples, à savoir Form. L'objectif principal de l'article est de montrer l'approche de mise en œuvre de l'API d'autorisation pour les tests d'interface utilisateur. Nous écrirons les tests et l'implémentation en Java. À partir des outils, nous utiliserons Chrome DevTools.



Nous utilisons Kanboard et DVWA comme objets de test . Ce sont des produits open source avec une licence ouverte et sont assez faciles à déployer localement. Suivez les liens pour en savoir plus sur ces produits et, si nécessaire, lisez les instructions du balayage.



Créez le projet à l' aide de maven et ajoutez testng, selenide, repos-assuré, json-path, jsoup, maven-compiler-plugin et maven-surefire-plugin.



Connectez-vous à Kanboard avec l'onglet Network Chrome DevTools ouvert.



image



image



En analysant DevTools, nous pouvons découvrir l'algorithme d'autorisation. Dans ce cas, deux demandes d'autorisation sont faites: GET avec deux paramètres de requête et POST avec une paire login / mot de passe et un jeton csrf. La première requête est requise pour obtenir le cookie KB_SID. Le second est pour le cookie KB_RM. En définissant ces deux valeurs dans WebDriver, nous avons accès à la page principale.



La première requête dans RestAssured ressemblera à ceci



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


De là, nous obtenons le cookie KB_SID



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


Le jeton CSRF se trouve dans la page d'accueil de la page HTML que nous pouvons voir dans le corps de la réponse.



image



La bibliothèque jsoup nous aidera à l'obtenir, ce qui nous permet de diviser un document en éléments. La recherche s'effectue de la même manière que les éléments Web.



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


La deuxième demande à RestAssured ressemblera à ceci:



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