استبدال ترخيص واجهة المستخدم بواجهة برمجة التطبيقات للاختبارات التلقائية

أحد أهم التحديات في الاختبار الآلي ، في رأيي ، هو ضمان موثوقيته العالية. في حل مشكلة تحسين مؤشرات موثوقية الاختبار ، أثبت نهج استخدام واجهة 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.



, .




All Articles