Data providers in java

Параметризация в TestNG – DataProvider и TestNG XML (с примерами)

Автоматизация тестирования, или тестирование автоматизации, как его называют в народе, не так проста, как кажется. Все перестановки и комбинации всех возможных взаимодействий с пользователем должны быть рассмотрены и основаны на том, что вам нужно будет создать тестовый сценарий для проверки вашего веб-приложения в многочисленных браузерах + комбинациях ОС. Именно здесь Параметризация играет ключевую роль в автоматизации тестирования Selenium. В этом руководстве по TestNG я покажу вам, как выполнить параметризацию в TestNG для автоматизации тестирования Selenium.

Почему мы параметризуем?

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

Теперь вы не можете жестко кодировать тестовые значения каждый раз в своих скриптах автоматизации тестирования, иначе внесение одного изменения потребует от вас редактирования многих скриптов автоматизации тестирования. Именно здесь в дело вступает параметризация в TestNG или любой другой, и причина, по которой мы параметризируем наши сценарии тестирования автоматизации Selenium, заключается в предоставлении различных наборов данных нашему веб-приложению во время выполнения.

Читайте также:  Количество уникальных значений массива php

Как мы выполняем параметризацию? И зачем использовать TestNG?

Если ваше приложение предполагает ввод различных типов пользовательских взаимодействий, то параметризация – это путь. Мы можем параметризовать наши сценарии автоматизации согласно используемой среде, например, Параметризация в среде TestNG для автоматизации тестирования Selenium. Мы можем рассмотреть возможность использования файлов Excel для извлечения наборов данных и последующего использования их в наших сценариях автоматизации, но по мере того, как мы совершенствуем наш пакет автоматизации, возникает необходимость в использовании более надежных сред автоматизации тестирования, таких как TestNG, для более широкого охвата широкой категории тестов. , В этом посте мы сконцентрируемся в основном на параметризации в TestNG, на каких путях это можно сделать в TestNG и как нам написать эти параметры в наших сценариях тестирования автоматизации Selenium. Давайте сначала начнем с понимания различных типов параметризации в TestNG и того, как мы можем достичь того же.

Типы параметризации в TestNG

Поэтому в первую очередь мы можем добиться параметризации в TestNG двумя способами.

  1. Использование «Аннотации параметров» и XML-файла TestNG.
  2. Использование «аннотации DataProvider».

Параметризация в TestNG с использованием аннотации @Parameters и файла XML

Давайте сначала посмотрим на простой синтаксис написания аннотации параметров в нашем классе:
@Parameter()

Обратите внимание, что мы также можем использовать более одного параметра в нашей аннотации, которую можно записать так: @Parameters()

На данный момент параметры доступны только для тега Suite или Test в файле testng.xml . Если в Suite и Test передается одно и то же значение параметра, приоритет отдается значению параметра, переданному в теге Test.

Прежде чем мы продолжим с примерами параметризации, мы должны понять, что было бы полезно, если бы использование параметризации в TestNG помогло нашей деятельности по автоматизации тестирования Selenium. Рассмотрим сценарий поиска определенных ключевых слов в поисковой системе, такой как Google. Мы должны были бы написать одинаковые строки кода для каждого ключевого слова, чтобы получить разные результаты, и это неосуществимый подход. Именно здесь в дело вступает параметризация в TestNG или любой другой среде автоматизации тестирования для Selenium. Используя параметризацию в TestNG, вы можете передать эти ключевые слова как различные параметры в testng.xml и добавить аннотацию @parameters в наборе средств автоматизации Selenium. Давайте посмотрим на это на примере.

Сценарий: откройте google.com в своем браузере и выполните поиск по 3 ключевым словам отдельно

Чтобы завершить этот сценарий, вот подробные шаги, которые должен выполнить наш скрипт:

  1. Запустите браузер и откройте www.google.com.
  2. Добавьте первое ключевое слово в качестве ввода в поле поиска и нажмите «Поиск».
  3. Убедитесь, что входное значение в пользовательском интерфейсе совпадает с данными теста.
  4. Повторите два вышеупомянутых шага для двух других ключевых слов.

Шаг 2. Выберите «Запуск от имени TestNG Suite», и вы сможете просмотреть отчет или сводку по электронной почте, чтобы просмотреть результаты.

Поэтому в следующий раз, когда нам нужно будет выполнить один и тот же тест для другого тестового значения, вместо того, чтобы копировать и вставлять один и тот же фрагмент кода в несколько файлов, нам просто нужно отредактировать XML-файл, включить дополнительные значения и запустить пакет. Вот и все. Именно таким образом можно эффективно и с минимальными затратами сэкономить время на тестировании Selenium, используя параметризацию в TestNG.

Поможет ли нам параметризация в TestNG с автоматическим тестированием браузера?

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

Сценарий: печать определенного значения браузера путем передачи имени браузера в качестве параметра.

Источник

TestNG — тестовые параметры через @DataProvider

Очень важной функцией в TestNG является DataProvider. Она позволяет вам писать data-driven тесты, что означает возможность запуска одних и тех же тестовых методов множество раз с разными наборами данных. Надо отметить, что DataProvider — это всего лишь один из способов передачи параметров в тестовые методы (другой способ мы уже рассмотрели в статье про @Parameters). Но именно этот способ позволяет передавать тестовым методам составные параметры, что нельзя сделать с помощью XML.

Для того чтобы использовать функцию DataProvider в ваших тестах, необходимо объявить метод с аннотацией @DataProvider и затем и использовать этот метод в тестовом методе с помощью атрибута «dataProvider« в аннотации Test.

1) Использование @DataProvider и Test в одном классе

Следующий тестовый класс содержит тестовый метод, принимающий на вход один аргумент и выводящий его на консоль во время выполнения. DataProvider-метод доступен в этом классе с помощью аннотации @DataProvider. Данные передаются через значение атрибута name аннотации @DataProvider. DataProvider возвращает двумерный массив типов Object (Object[][]), в котором содержится 2 набора данных — «data one» и «data two«.

publuc class SameClassDataProvider

public Object[][] dataProviderMethod()

public void testMethod(String data)

System.out.println(«data is: » + data);

Теперь запустим этот тест. Вывод на консоль следующий:

Data is: data one
Data is: data two
PASSED: testMethod(«data one»)
PASSED: testMethod(«data two»)

Как можно увидеть, тестовый метод выполнился 2 раза. Количество запусков тестового метода зависит от числа наборов данных, предоставленных DataProvider-методом. В нашем случае такой метод вернул 2 набора данных, соответственно тестовый метод выполнился дважды.

ВАЖНО! DataProvider-метод должен возвращать данные в форме двумерного массива классов Object (Object[][]). Первый массив представляет собой набор данных, где второй массив содержит значения параметров.

2) Использование @DataProvider и Test в разных классах.

Теперь давайте добавим 2 класса с именами DataProviderClass и TestClass:

DataProvider.java

public class DataProviderClass

public static Object[][] dataProviderMethod()

Источник

TestNG @DataProvider for Repeated Tests

An important feature provided by TestNG is the @DataProvider annotation that helps us to write repeated tests or data-driven tests. This essentially means that the same test method can be run multiple times with different data sets.

Please note that @DataProvider is the second way of passing parameters to test methods except passing parameters from testng.xml. @DataProvider helps in passing the complex parameters to the test methods as it is not possible to do with @Parameters.

1. @DataProvider Annotation

To use the @DataProvider feature in the tests, we have to declare a method annotated by @DataProvider and then use this method in the tests using the ‘dataProvider‘ attribute in the @Test annotation.

The name of the data provider ( ‘data-provider’ in this case ) must be used by the test method if it wants to use the datasets provided by the provider method.

public class TestDataProvider < @DataProvider(name = "data-provider") public Object[][] dataProviderMethod() < return new Object[][], >; > @Test(dataProvider = "data-provider") public void testMethod(String data) < System.out.println("Data is: " + data); >>

The execution of the test method is dependent upon the number of data sets defined by the @DataProvider annotated method. In the above example, testMethod() will be executed twice. The first time the values of parameter data will be ‘data one’ and the second time it will be ‘data two’.

Data is: data one Data is: data two PASSED: testMethod("data one") PASSED: testMethod("data two") =============================================== Default Suite Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================

Data providers can run in parallel with the attribute parallel:

@DataProvider(parallel = true) 

2. Eager vs Lazy Parameters

The Data Provider method can return one of the following types:

2.1. Eager Initialization with Object[][]

The first dimension’s size is the number of times the test method will be invoked and the second dimension size contains an array of objects that must be compatible with the parameter types of the test method. Using this method we eagerly initialize the parameters.

@DataProvider(name = "create") public static Object[][] createData() < return new Object[][]< new Object[], new Object[], new Object[], new Object[] >; > @Test(dataProvider = "create") public void test(Integer num, String display)

2.2. Lazy Initialization with Iterator

Lazy alternative of Object[][]. Causes the test method to be invoked once for each element of the iterator. TestNG will invoke the iterator and then the test method with the parameters returned by this iterator one by one.

@DataProvider(name = "createWithIterator") public Iterator createDataWithIterator() < return Arrays.asList( new Object[], new Object[], new Object[], new Object[] ).iterator(); > @Test(dataProvider = "create") public void test(Integer num, String display)

3. Using @DataProvider and @Test in Separate Classes

If we have declared a separate class as the data provider, we need to create an static method in that class with the same syntax as in the previous example.

Next, we must use the dataProviderClass attribute of the @Test annotation.

To understand this, add two classes with the names DataProviderClass and TestClass as below.

Note that If we want to put the data provider in a different class, it needs to be a static method or a class with a non-arg constructor.

import org.testng.annotations.DataProvider; public class DataProviderClass < @DataProvider(name = "data-provider") public static Object[][] dataProviderMethod() < return new Object[][] < < "data one" >, < "data two" >>; > >
import org.testng.annotations.Test; public class TestClass < @Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class) public void testMethod(String data) < System.out.println("Data is: " + data); >>
Data is: data one Data is: data two PASSED: testMethod("data one") PASSED: testMethod("data two")

As we can see from the above test results the test method was executed two times depending upon the data passed to it by DataProvider method.

In this scenario, the DataProvider method was in a different class. In such a case the dataProviderMethod() has to be declared static so that it can be used by a test method in a different class for providing data.

Источник

Оцените статью