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 кб)