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

Поставщик данных TestNG

Поставщик данных TestNG, аннотация @поставщика данных TestNG, пример @поставщика данных TestNG, поставщик данных TestNG с заводской аннотацией, класс тестовых данных TestNG, имя метода поставщика данных TestNG, индексы поставщика данных TestNG и параллельное выполнение.

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

Поставщик данных – одна из лучших функций платформы TestNG. Мы можем использовать TestNG dataProvider для ввода аргументов в наши методы тестирования.

Поставщик данных TestNG

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

Давайте посмотрим, как мы можем создать простого поставщика данных для класса тестирования с помощью плагина Eclipse. В Eclipse перейдите в Новый | Другой | Класс тестирования и на экране мастера выберите @dataProvider аннотацию.

Когда вы нажимаете на кнопку Готово, мы получаем реализацию по умолчанию тестового класса тестирования с помощью метода dataProvider.

package com.journaldev.dataprovider;

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

public class Test4 {
  @Test(dataProvider = "dp")
  public void f(Integer n, String s) {
	  
  }

  @DataProvider
  public Object[][] dp() {
    return new Object[][] {
      new Object[] { 1, "a" },
      new Object[] { 2, "b" },
    };
  }
}

Обратите внимание, что нет необходимости использовать плагин Eclipse TestNG, но он помогает нам легко создавать базовый класс, а затем изменять его в соответствии с нашим вариантом использования проекта.

Обратите внимание, что dp() метод аннотирован @dataProvider аннотацией, и мы использовали его в @Test конфигурации.

Метод dataProvider должен возвращать массив объектов, а его размер должен соответствовать методу тестирования. Поскольку наш метод тестирования имеет два аргумента, наш метод поставщика данных должен возвращать Объект [] [] , чтобы он был сопоставлен с аргументами метода.

Просто запустите приведенный выше класс как тест TestNG, и мы получим следующий вывод в консоли.

[RemoteTestNG] detected TestNG version 6.14.3
PASSED: f(1, "a")
PASSED: f(2, "b")

Свойства TestNG @dataProvider

Аннотация @dataProvider имеет три свойства:

  1. имя : Используется для указания имени метода поставщика данных, значение по умолчанию-имя функции. Мы можем использовать его, чтобы дать правильное имя нашему методу поставщика данных.
  2. индексы : Это очень важное свойство, оно позволяет нам указывать индексы, которые мы хотим использовать для наших целей тестирования. Это полезно, когда наш метод поставщика данных может иметь большое количество значений, и мы хотим запустить наши тестовые примеры только для нескольких из них. Его значение по умолчанию – “все”, поэтому тесты будут выполняться для всех входных данных, сгенерированных методом поставщика данных.
  3. parallel : Этот параметр указывает TestNG на параллельное выполнение тестов. Таким образом, входные данные для методов тестирования могут вводиться в случайном порядке. По умолчанию входные данные вводятся в порядке, и тесты выполняются последовательно.

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

package com.journaldev.dataprovider;

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

public class Test4 {
  @Test(dataProvider = "fooDP")
  public void foo(Integer n) {
	  System.out.println("Inside foo, input = "+n);
  }

  @DataProvider(name="fooDP", indices= {1,3,5,7,9})
  public Object[] dp() {
	  Object[] ints = new Object[100];
	  for(int i =0 ; i<100; i++) {
		  ints[i] = 100+i;
	  }
    return ints;
  }
}

Теперь, когда мы запускаем наш тестовый класс, он генерирует следующий вывод.

[RemoteTestNG] detected TestNG version 6.14.3
Inside foo, input = 101
Inside foo, input = 103
Inside foo, input = 105
Inside foo, input = 107
Inside foo, input = 109
PASSED: foo(101)
PASSED: foo(103)
PASSED: foo(105)
PASSED: foo(107)
PASSED: foo(109)

Теперь измените метод dataProvider на параллельный.

@DataProvider(parallel=true, name="fooDP", indices= {1,3,5,7,9})
public Object[] dp() {
  //method logic
}

Выходные данные, генерируемые при выполнении тестового класса:

[RemoteTestNG] detected TestNG version 6.14.3
Inside foo, input = 105
Inside foo, input = 107
Inside foo, input = 109
Inside foo, input = 103
Inside foo, input = 101
PASSED: foo(103)
PASSED: foo(105)
PASSED: foo(107)
PASSED: foo(109)
PASSED: foo(101)

Обратите внимание, что индексы значения не вызывают никаких исключений, если поставщик данных возвращает меньшее количество объектов, чем указано. Таким образом, реализация поставщика данных ниже тоже будет работать нормально.

@DataProvider(parallel = true, name = "fooDP", indices = { 1, 3, 5, 7, 9 })
public static Object[] dp() {
	Object[] ints = new Object[3];
	ints[0] = 0;ints[1] = 1;ints[2] = 2;
	return ints;
}

Класс поставщика данных TestNG

Тестирование разработано таким образом, чтобы быть слабо связанным, поэтому неудивительно, что у нас есть возможность разделить наш тестовый класс с классом поставщика данных. Мы можем использовать @Test свойство Класс поставщика данных , чтобы указать имя класса для поиска метода поставщика данных.

Если этот атрибут указан, метод поставщика данных должен быть статическим в указанном классе. Если не указано, поставщик данных будет отображаться в тестовом классе или его суперклассах.

Вот пример отдельного класса TestNG dataProvider.

package com.journaldev.dataprovider;

import org.testng.annotations.DataProvider;

public class Test4DataProvider {

	@DataProvider(parallel = true, name = "fooDP", indices = { 1, 3, 5, 7, 9 })
	public static Object[] dp() {
		Object[] ints = new Object[100];
		for (int i = 0; i < 100; i++) {
			ints[i] = 100 + i;
		}
		return ints;
	}
}

Наш обновленный тестовый класс:

package com.journaldev.dataprovider;

import org.testng.annotations.Test;

public class Test4 {
	@Test(dataProvider = "fooDP", dataProviderClass = Test4DataProvider.class)
	public void foo(Integer n) {
		System.out.println("Inside foo, input = " + n);
	}
}

Поставщик данных TestNG с заводом

Мы также можем использовать Поставщик данных с Заводскими методами. Ниже фрагмент кода показывает простой пример использования dataProvider с заводской аннотацией.

@Factory(dataProvider = "dp")
public Object[] getTestClasses(String s) {
	Object[] tests = new Object[2];
	tests[0] = new Test1(s);
	tests[1] = new Test2();
	return tests;
}

@DataProvider
public Object[] dp() {
	return new Object[] {"A", "B"};
}

Я подробно объяснил вариант использования и преимущества использования dataProvider с фабрикой в учебнике по тестированию аннотаций фабрики.

Резюме

Тестирование-это потрясающая платформа для тестирования. Поставщик данных-одна из лучших его функций, которую я очень люблю и часто использую в своих тестовых случаях.