التنفيذ الموازي في Selenium
⚡ ملخص ذكي
الجلسات، والتشغيل المتوازي، والتبعية في Selenium قم بدمج معرف جلسة فريد لكل مثيل من WebDriver مع TestNG تتيح عناصر التحكم في المجموعة تشغيل العديد من نوافذ المتصفح بشكل مستقل أو مرتب في وقت واحد وإنهاء دورة الانحدار بشكل أسرع.

لفهم كيفية تشغيل البرامج النصية بالتوازي، عليك أولاً أن تعرف كيف Selenium يعزل كل متصفح من خلال الجلسات.
لماذا نحتاج إلى التعامل مع الجلسة؟
أثناء تنفيذ الاختبار، Selenium يتطلب برنامج WebDriver التفاعل مع المتصفح في كل خطوة لتنفيذ الأوامر المحددة. أثناء تشغيل هذا الاختبار، قد يقوم مستخدم آخر بتشغيل برنامج نصي ثانٍ على نفس الجهاز وباستخدام نفس نوع المتصفح.
في مثل هذه الحالة، نحتاج إلى آلية تمنع تداخل التنفيذين. Selenium يتم حل هذه المشكلة من خلال إدارة الجلسات.
كيفية تحقيق التعامل مع الجلسة في Selenium برنامج تشغيل الويب؟
إذا قمت بفحص Selenium ستجد في مصدر WebDriver متغيرًا يسمى sessionIdفي كل مرة تقوم فيها بإنشاء مثيل جديد لـ WebDriver، يتم إنشاء مثيل جديد. sessionId يتم توليدها وإلحاقها بذلك Firefoxبرنامج تشغيل Chrome أو IE.
يتم تنفيذ كل أمر لاحق فقط داخل جلسة المتصفح المحددة هذه.
لأن هذا مدمج في WebDriver، فلا حاجة لتعيين sessionId يدويًا.
Code على سبيل المثال: يتم إنشاء جلستين مختلفتين لنسختين من WebDriver.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String... strings) { // First session of WebDriver WebDriver driver = new FirefoxDriver(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
كيفية إجراء الاختبارات المتوازية مع Selenium
توجد حالات ترغب فيها بتشغيل عدة اختبارات في نفس الوقت، مثل: التحقق من التوافق مع مختلف المتصفحات أو أجنحة كبيرة مخصصة للتدخين.
في مثل هذه الحالات ، فإن parallel السمة على TestNG يقوم وسم المجموعة بالعمل.
تقبل السمة المتوازية لعلامة المجموعة أربع قيم:
| قيمة السمة | معنى |
|---|---|
| اختبارات | الكل حالات تجريبية داخل علامة من تجريب تشغيل ملف XML بالتوازي. |
| فصول | جميع حالات الاختبار داخل Java تشغيل الفصل بالتوازي. |
| طرق | جميع الطرق التي تحمل التعليق التوضيحي @Test يتم تنفيذها بالتوازي. |
| حالات | يتم تشغيل الاختبارات في نفس الحالة بالتوازي، بينما يتم تشغيل طريقتين من حالتين مختلفتين في خيوط مختلفة. |
استخدم thread-count تحدد السمة عدد الخيوط المخصصة لهذا التنفيذ. قم بإقرانها مع TestNG الإطار و تثبيت TestNG in Eclipse قبل التشغيل. وللتوسع لأكثر من جهاز واحد، قم بتوجيه نفس المجموعة من خلال Selenium شبكة 4 للتنفيذ المتوازي الموزع.
مثال كامل: ثلاث حالات اختبار تعمل بالتوازي وتملأ بيانات تسجيل الدخول https://demo.guru99.com/.
يبدو المشروع الكامل كما يلي:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo() { // Second session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"/> </classes> </test> </suite>
ترتيب حالة الاختبار والتبعية
يمكنك تحديد ترتيب وتبعية حالة اختبار التنفيذ. لنفترض أن لديك حالتي اختبار، testGuru99TC1 و testGuru99TC2، و انت تريد testGuru99TC2 للتشغيل قبل testGuru99TC1. استخدم ال dependsOnMethods السمة (أو dependsOnGroups (للتسلسل على مستوى المجموعة) لإصلاح هذا الترتيب. لنطاق أوسع إطار الأتمتة التصميم، المقارنة JUnit vs TestNG، ومراجعة البحث عن عنصر يرجى الرجوع إلى ما إذا كانت الاختبارات التابعة لديك تشترك في محددات المواقع.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
استخدم TestNG وقت التشغيل، مستضاف في testng.org، يقوم بتقييم هذه التصريحات قبل إطلاق الخيوط، لذلك تبدأ الطرق التابعة دائمًا بعد انتهاء متطلباتها المسبقة.





