TestNG Selenium - пример нагрузочного тестирования

TestNG + Selenium - пример нагрузочного тестирования

testng-selenium-load-test

В этом руководстве мы покажем вам, как использовать атрибуты @TestinvocationCount иthreadPoolSize для выполнения нагрузочного или стресс-теста на веб-сайте.

Используемые инструменты:

  1. TestNG 6.8.7

  2. Селен 2.39.0

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