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.
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.
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.
, .