承認UIを自動テスト用のAPIに置き換える

私の意見では、自動テストで最も重要な課題の1つは、その高い信頼性を確保することです。テストの信頼性指標を改善するという問題を解決する上で、UIの代わりにAPIインターフェースを使用するアプローチはそれ自体が十分に証明されています。この記事では、UI認証をAPIに置き換えるための簡単なメカニズムを詳細に分析します。



認証には、基本、ダイジェスト、フォーム、OAuth 1、OAuth 2など、さまざまな種類があります。例として、最も単純なものの1つであるフォームを検討することを提案します。この記事の主な目的は、UIテスト用の認証APIを実装するためのアプローチを示すことです。テストと実装をJavaで記述します。ツールから、ChromeDevToolsを使用します。



テストオブジェクトとしてKanboardDVWAを使用しますこれらはオープンライセンスのオープンソース製品であり、ローカルに展開するのはかなり簡単です。リンクをたどってこれらの製品の詳細を読み、必要に応じてスイープの説明を読んでください。



mavenを使用してプロジェクトを作成し、testng、selenide、rest-assured、json-path、jsoup、maven-compiler-plugin、およびmaven-surefire-pluginを追加します。



[ネットワークChromeDevTools]タブを開いた状態でKanboardにログインします。



画像



画像



DevToolsを分析することにより、認証アルゴリズムを見つけることができます。この場合、2つの認証要求が行われます。2つのクエリパラメータを使用したGETと、ログイン/パスワードのペアとcsrfトークンを使用したPOSTです。KB_SID cookieを取得するには、最初の要求が必要です。2つ目は、KB_RMCookie用です。WebDriverでこれらの値の両方を設定することにより、メインページにアクセスできます。



RestAssuredの最初のリクエストは次のようになります



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


それからKB_SIDcookieを取得します



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


CSRFトークンは、応答本文に表示されるHTMLページのホームにあります。



画像



jsoupライブラリは、ドキュメントを要素に分割できるようにするために役立ちます。検索はWebアイテムと同じ方法で行われます。



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


RestAssuredへの2番目のリクエストは次のようになります。



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