Mengganti UI otorisasi dengan API untuk tes otomatis

Salah satu tantangan terpenting dalam pengujian otomatis, menurut saya, adalah memastikan keandalannya yang tinggi. Dalam memecahkan masalah meningkatkan indikator reliabilitas tes, pendekatan menggunakan antarmuka API sebagai ganti UI telah terbukti dengan baik. Pada artikel ini, kami akan menganalisis secara detail mekanisme sederhana untuk mengganti otorisasi UI dengan API.



Ada banyak jenis otentikasi - Basic, Digest, Form, OAuth 1 dan OAuth 2. Sebagai contoh, saya mengusulkan untuk mempertimbangkan salah satu yang paling sederhana, yaitu Form. Tujuan utama artikel ini adalah menunjukkan pendekatan untuk mengimplementasikan API otorisasi untuk pengujian UI. Kami akan menulis tes dan implementasi di Java. Dari alat kami akan menggunakan Chrome DevTools.



Kami menggunakan Kanboard dan DVWA sebagai objek uji . Ini adalah produk open source dengan lisensi terbuka dan cukup mudah digunakan secara lokal. Ikuti tautan untuk membaca lebih lanjut tentang produk ini dan, jika perlu, baca instruksi dari sapuan.



Mari buat proyek menggunakan maven dan tambahkan testng, selenide, yakinlah, json-path, jsoup, maven-compiler-plugin dan maven-surefire-plugin.



Masuk ke Kanboard dengan tab Network Chrome DevTools terbuka.



gambar



gambar



Dengan menganalisis DevTools, kita dapat mengetahui algoritme otorisasi. Dalam kasus ini, dua permintaan dibuat untuk otorisasi: GET dengan dua parameter kueri dan POST dengan pasangan login / kata sandi dan token csrf. Permintaan pertama diperlukan untuk mendapatkan cookie KB_SID. Yang kedua adalah untuk cookie KB_RM. Dengan menyetel kedua nilai ini di WebDriver, kami mendapatkan akses ke halaman utama.



Permintaan pertama di RestAssured akan terlihat seperti ini



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


Dari situ kita mendapatkan cookie KB_SID



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


Token CSRF ada di beranda halaman HTML yang dapat kita lihat di isi respons.



gambar



Pustaka jsoup akan membantu kita mendapatkannya, yang memungkinkan kita membagi dokumen menjadi beberapa elemen. Pencarian dilakukan dengan cara yang sama seperti item Web.



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


Permintaan kedua ke RestAssured akan terlihat seperti ini:



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