Рубрики
Без рубрики

Тестирование Параллельного Выполнения

Мы можем параллельно запускать тесты TestNG. Эта функция доступна только в том случае, если мы используем TestNG XML suite для выполнения наших тестовых случаев. Тестирование Тестов по умолчанию

Автор оригинала: Pankaj Kumar.

Мы можем параллельно запускать тесты TestNG. Эта функция доступна только в том случае, если мы используем TestNG XML suite для выполнения наших тестовых случаев.

Тестирование Выполнение тестов по умолчанию

Когда мы запускаем класс TestNG, методы выполняются в порядке алфавитного отображения их названий. Давайте рассмотрим простой тестовый класс TestNG.

package com.journaldev.parallel;

import java.time.LocalDateTime;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class NewTest {
	@Test(dataProvider = "dp")
	public void foo(Integer n) {
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("Foo Executing Input = " + n);
	}
	
	@Test(dataProvider = "dp")
	public void bar(Integer n) {
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("Bar Executing Input = " + n);
	}

	@DataProvider
	public Object[] dp() {
		Object[] ints = new Object[100];
		for (int i = 0; i < 100; i++)
			ints[i] = i;
		return ints;
	}

	@AfterTest
	public void afterTest() {
		System.out.println("After Test Time = " + LocalDateTime.now());
	}

	@BeforeTest
	public void beforeTest() {
		System.out.println("Before Test Time = " + LocalDateTime.now());
	}

}

Когда мы запускаем выше класса, он будет генерировать результат, как показано ниже.

Before Test Time = 2018-06-01T15:03:21.406219
Bar Executing Input = 0
Bar Executing Input = 1
...
Bar Executing Input = 99
Foo Executing Input = 0
Foo Executing Input = 1
...
Foo Executing Input = 99
After Test Time = 2018-06-01T15:03:24.058081

Обратите внимание, что метод bar() выполняется первым, как только все тестовые выполнения завершены, затем выполняются методы foo ().

Мы получим аналогичный результат с нижеприведенным файлом XML suite.





	
		
			
		
	

Методы тестирования параллельно

Поскольку оба метода тестирования не связаны, мы можем запускать их параллельно и экономить время. Нам придется добавить параллель и количество потоков в наш тест для достижения этой цели.

Ниже приведен наш обновленный файл XML suite.





	
		
			
		
	

Когда мы запустим набор тестов, мы получим следующий результат.

Before Test Time = 2018-06-01T15:06:38.268674
Bar Executing Input = 0
Foo Executing Input = 0
...
Foo Executing Input = 99
After Test Time = 2018-06-01T15:06:39.572976

Обратите внимание, что мы почти вдвое сократили время выполнения теста, параллельно запустив методы тестирования.

Тестирование Параллельного Выполнения Важные моменты

  1. Мы можем использовать атрибут parallel как для элементов теста, так и для набора.
  2. Возможными значениями для атрибута parallel являются: методы, тесты, классы и экземпляры. Мы уже видели, как выполнять методы параллельно.
  3. В более старых версиях тестирования true и false также допускались для параллельных значений, теперь они устарели.

Тестирование параллельных запущенных классов

Допустим, мы хотим запустить наши тестовые классы параллельно. Мы также хотим, чтобы наши методы внутри тестовых классов выполнялись параллельно. Мы можем сделать это, используя parallel="классы" на уровне набора и parallel="методы" на уровне тестирования.





	
		
			
			
			
		
	

Набор Тестов, Выполняющий Параллельные Тесты

Давайте рассмотрим более сложный пример, где мы параллельно запускаем тесты набора тестов. Опять же, некоторые из этих тестов настроены на параллельное выполнение классов/методов.





	
		
			
		
	
	
		
			
			
		
	
	
		
			
		
	

Это все для параллельного запуска наборов тестов TestNG в разных режимах.