TestNG + Selenium - пример нагрузочного тестирования
В этом руководстве мы покажем вам, как использовать атрибуты @TestinvocationCount
иthreadPoolSize
для выполнения нагрузочного или стресс-теста на веб-сайте.
Используемые инструменты:
-
TestNG 6.8.7
-
Селен 2.39.0
-
Maven 3
P.S We are using the Selenium library to automate browsers to access a website.
1. Зависимость проекта
Получить библиотеки TestNG и Selenium.
pom.xml
6.8.7 2.39.0 org.testng testng ${testng.version} test org.seleniumhq.selenium selenium-java ${selenium.version}
2. @Test (invocationCount =?)
ЭтотinvocationCount
определяет, сколько раз TestNG должен запускать этот метод тестирования.
Пример 2.1
@Test(invocationCount = 10) public void repeatThis() { //... }
Вывод - методrepeatThis()
будет выполнен 10 раз.
PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis
Example 2.2 - использует Selenium для открытия браузера Firefox и загрузки «Google.com». Этот тест должен убедиться, что заголовок страницы всегда «Google».
package com.example.testng.examples.loadtest; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class TestMultipleThreads { @Test(invocationCount = 5) public void loadTestThisWebsite() { WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); System.out.println("Page Title is " + driver.getTitle()); Assert.assertEquals("Google", driver.getTitle()); driver.quit(); } }
Вывод. Вы заметите, что браузер Firefox выдает подсказки и закрывается 5 раз.
Page Title is Google Page Title is Google Page Title is Google Page Title is Google Page Title is Google PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite
3. @Test (invocationCount =?, ThreadPoolSize =?)
АтрибутthreadPoolSize
сообщает TestNG о необходимости создания пула потоков для запуска метода тестирования через несколько потоков. С пулом потоков это значительно сократит время выполнения метода тестирования.
Example 3.1 - запустить пул потоков, который содержит 3 потока, и запустить метод тестирования 3 раза.
@Test(invocationCount = 3, threadPoolSize = 3) public void testThreadPools() { System.out.printf("Thread Id : %s%n", Thread.currentThread().getId()); }
Выходные данные - метод теста запускается 3 раза, и каждый получает свой собственный поток.
[ThreadUtil] Starting executor timeOut:0ms workers:3 threadPoolSize:3 Thread Id : 10 Thread Id : 12 Thread Id : 11 PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools
Example 3.2 - запустить пул потоков, который содержит 3 потока, и запустить тестовый метод 10 раз.
@Test(invocationCount = 10, threadPoolSize = 3) public void testThreadPools() { System.out.printf("Thread Id : %s%n", Thread.currentThread().getId()); }
Выходные данные - метод теста запускается 10 раз, и потоки используются повторно.
[ThreadUtil] Starting executor timeOut:0ms workers:10 threadPoolSize:3 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools
4. Пример нагрузочного теста
Благодаря сочетанию нескольких потоков TestNG и мощной автоматизации браузера Selenium. Вы можете создать простой, но мощный нагрузочный тест, например:
TestMultipleThreads.java
package com.example.testng.examples.loadtest; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class TestMultipleThreads { @Test(invocationCount = 100, threadPoolSize = 5) public void loadTest() { System.out.printf("%n[START] Thread Id : %s is started!", Thread.currentThread().getId()); WebDriver driver = new FirefoxDriver(); driver.get("http://yourwebsite.com"); //perform whatever actions, like login, submit form or navigation System.out.printf("%n[END] Thread Id : %s", Thread.currentThread().getId()); driver.quit(); } }
Вывод - Приведенный выше тест запустит пул потоков из 5 и отправит 100 запросов URL на указанный веб-сайт.
[ThreadUtil] Starting executor timeOut:0ms workers:100 threadPoolSize:5 [START] Thread Id : 11 is started! [START] Thread Id : 14 is started! [START] Thread Id : 10 is started! [START] Thread Id : 12 is started! [START] Thread Id : 13 is started! [END] Thread Id : 11 [START] Thread Id : 11 is started! [END] Thread Id : 10 [START] Thread Id : 10 is started! [END] Thread Id : 13 [START] Thread Id : 13 is started! [END] Thread Id : 14 [START] Thread Id : 14 is started! [END] Thread Id : 12 [START] Thread Id : 12 is started! [END] Thread Id : 13 ......
FAQs
Q: Почему для нагрузочного тестирования с Selenium и TestNG одновременно выводится только один браузер?
A: Ваш метод тестирования выполняется слишком быстро, попробуйте поставитьThread.sleep(5000)
, чтобы отложить выполнение, теперь вы должны заметить одновременное отображение нескольких браузеров. (Только для демонстрационных целей).
Скачать исходный код
Скачать -TestNG-LoadTest-Example.zip (15 кб)