أحد أهم التحديات في الاختبار الآلي ، في رأيي ، هو ضمان موثوقيته العالية. في حل مشكلة تحسين مؤشرات موثوقية الاختبار ، أثبت نهج استخدام واجهة API بدلاً من واجهة المستخدم نفسه جيدًا. في هذه المقالة ، سنحلل بالتفصيل آلية بسيطة لاستبدال ترخيص واجهة المستخدم بواجهة برمجة التطبيقات.
هناك العديد من أنواع المصادقة - Basic و Digest و Form و OAuth 1 و OAuth 2. على سبيل المثال ، أقترح اعتبار واحدة من أبسطها ، وهي النموذج. الهدف الرئيسي من هذه المقالة هو إظهار طريقة تنفيذ واجهة برمجة تطبيقات الترخيص لاختبارات واجهة المستخدم. سنكتب الاختبارات والتنفيذ في Java. من الأدوات سنستخدم Chrome DevTools.
نستخدم Kanboard و DVWA ككائنات اختبار . هذه منتجات مفتوحة المصدر بترخيص مفتوح ويسهل نشرها محليًا. اتبع الروابط لقراءة المزيد عن هذه المنتجات ، وإذا لزم الأمر ، اقرأ التعليمات من عملية المسح.
لنقم بإنشاء المشروع باستخدام maven وإضافة testng و selenide و rest -ured و json-path و jsoup و maven-compiler-plugin و maven-surefire-plugin.
سجّل الدخول إلى Kanboard مع فتح علامة التبويب Network Chrome DevTools.


من خلال تحليل DevTools ، يمكننا معرفة خوارزمية التفويض. في هذه الحالة ، يتم إجراء طلبين للحصول على إذن: الحصول على معاملين للاستعلام و POST مع زوج تسجيل الدخول / كلمة المرور ورمز csrf. الطلب الأول مطلوب للحصول على ملف تعريف الارتباط KB_SID. والثاني لملف تعريف الارتباط KB_RM. من خلال تعيين هاتين القيمتين في WebDriver ، يمكننا الوصول إلى الصفحة الرئيسية.
سيبدو الطلب الأول في RestAssured بهذا الشكل
Response response01 = given()
.queryParam("controller", "AuthController")
.queryParam("action", "login")
.when()
.get(BASE_URL);
منه نحصل على ملف تعريف الارتباط KB_SID
String cookieKBSID = response01.getCookie("KB_SID");
يوجد رمز CSRF في الصفحة الرئيسية لصفحة HTML التي يمكننا رؤيتها في نص الاستجابة.

ستساعدنا مكتبة jsoup في الحصول عليها ، مما يسمح لنا بتقسيم مستند إلى عناصر. يتم البحث بنفس طريقة عناصر الويب.
String cSRFToken = Jsoup.parseBodyFragment(response01.body().asString())
.getElementsByAttributeValue("name", "csrf_token").attr("value");
سيبدو الطلب الثاني لـ RestAssured كما يلي:
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.
, .