Запустите весь тестовый класс с первым рядом провайдера данных - PullRequest
0 голосов
/ 25 апреля 2018

Установка:

  1. У меня есть тестовый класс.
  2. В этом тестовом классе есть несколько методов с аннотацией @Test(dataProvider = "getData").
  3. В данных 7 записей (строк).
  4. Все тесты последовательные.

Проблема:

Мне нужно запустить все методы (тесты) с одной строкой данных, но на данный момент он продолжает повторять одни и те же тесты для всех строк, т. Е. Если имеется 7 строк данных, то тест 1 будет выполняться 7 раз, а затем второй тест начнется и то же самое произойдет для второго теста и т. д.

Я хочу, чтобы все тесты выполнялись для строки 1, а затем все тесты выполняются снова для строки 2.

Я использую API Apache poi для чтения данных из таблицы ms-excel. Java, testng и Selenium для автоматизации браузера в Windows.

Я посетил следующую ссылку, но не получил реализацию: https://dzone.com/articles/testng-run-tests-sequentially

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Factory позволяет динамически создавать тесты.

Предположим, что это текущая настройка ...

SequentialTest.java - Пример части

@Test(dataProvider="dp")
public void firstTest(int id, String account) {
    System.out.println("Test #1 with data: "+id+". "+account);
}

Data.java - Часть образца

@DataProvider(name="dp")
public static Object[][] dataProvider() {
    Object[][] dataArray = { {1, "user1"}, {2, "user2"} };
    return dataArray;
}

Возможно, у вас есть поставщик данных в том же классе.

testng.xml - соответствующая часть

< test name = "checks">
   < classes >
      < class name="....Sequential" />
   < /classes >
< /test>

Согласно статье изменения, которые требуются в классах и xml.

SequentialTest.java -Создайте переменные экземпляра для каждого параметра, который был ранее передан в метод теста.Создайте конструктор с переменными экземпляра.Удалите часть поставщика данных из аннотации теста.Удалите параметры из методов тестирования.

private int id;
private String account;

public SequentialTest(int id, String account) {
    this.id = id;
    this.account = account;
}

@Test
public void firstTest() {
    System.out.println("Test #1 with data: "+id+". "+account);
    assertTrue(true);
}

Data.java - Необходимо разделить метод поставщика данных на отдельный класс (если его еще нет) и добавить к нему метод factory.Поставщик данных остается прежним.

@Factory(dataProvider="dp")
    public Object[] createInstances(int id, String account) {
        return new Object[] {new SequentialTest(id, account)};
}

testng.xml - Удалите существующую часть.Нужно упомянуть только имя класса, содержащего метод Factory.Самое главное добавьте параметр group-by-instances="true", который даст вам желаемое поведение.

  < test name="fact" group-by-instances="true">
      < classes>
          < class name="....Data"/>
      < classes/>
  < /test>
0 голосов
/ 25 апреля 2018

Во время написания вашего провайдера данных вы можете добавить атрибут «индексы» к провайдеру данных.Например,

//Define the index you want to return it to. Here it will return first row
@DataProvider(name = "dataProviderSample", indices = {0})
public Object[][] getSelectedData() {
    return getInputData();
}

// Write your logic to generate data form excel/csv/json/xml inside the below method
private static Object[][] getInputData() {
    return new Object[][]{{"Sample1", "Sample1", "Sample1"},
            {"Sample2", "Sample2", "Sample2"},
            {"Sample3", "Sample3", "Sample3"},
            {"Sample4", "Sample5", "Sample5"}
    };
}

С помощью вышеуказанного подхода вы можете передать ожидаемый индекс в свой метод тестирования.

@Test(dataProvider = "dataProviderSample")
void testDataProvider(String fname, String lName, String num) {
    System.out.println(fname);
    System.out.println(lName);
    System.out.println(num);
}

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

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