私の意見では、自動テストで最も重要な課題の1つは、その高い信頼性を確保することです。テストの信頼性指標を改善するという問題を解決する上で、UIの代わりにAPIインターフェースを使用するアプローチはそれ自体が十分に証明されています。この記事では、UI認証をAPIに置き換えるための簡単なメカニズムを詳細に分析します。
認証には、基本、ダイジェスト、フォーム、OAuth 1、OAuth 2など、さまざまな種類があります。例として、最も単純なものの1つであるフォームを検討することを提案します。この記事の主な目的は、UIテスト用の認証APIを実装するためのアプローチを示すことです。テストと実装をJavaで記述します。ツールから、ChromeDevToolsを使用します。
テストオブジェクトとしてKanboardとDVWAを使用します。これらはオープンライセンスのオープンソース製品であり、ローカルに展開するのはかなり簡単です。リンクをたどってこれらの製品の詳細を読み、必要に応じてスイープの説明を読んでください。
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.
, .