Как Группировать Тестовые Случаи В Тестировании [с Примерами]
Тестирование – это платформа автоматизации тестирования с открытым исходным кодом, вдохновленная JUnit и NUnit. Структура supp… С тегами testng, java, учебник, автоматизация.
Тестирование – это платформа автоматизации тестирования с открытым исходным кодом, вдохновленная JUnit и NUnit. Платформа поддерживает тестирование на основе данных, параллельное выполнение тестов, тестирование интегрированных классов, предоставляет доступ к отчетам HTML, среди прочего. Тестирование может быть легко интегрировано с Jenkins, Eclipse, IntelliJ IDEA, Maven и т.д.
Аннотации в тестировании полезны для управления потоком выполнения методов тестирования и параллельного выполнения нескольких тестов. Параметризованные тесты TestNG с Selenium WebDriver удобны для запуска тестов(тестов) в различных комбинациях браузеров и платформ. В рамках нашей серии Учебник по тестированию мы рассмотрим, как группировать тестовые случаи в тестировании. Использование групп в тестировании демонстрируется на соответствующих примерах групп тестирования.
Что Такое Группы Тестирования?
Как следует из названия, группировка в тестировании позволяет группировать несколько методов тестирования в именованные группы. С помощью групп в тестировании у вас есть возможность выполнить определенный набор тестов, принадлежащих группе или нескольким группам.
Рассмотрим сценарий, в котором набор тестов включает различные типы тестов, например, модульный тест, интеграционный тест, тест на курение и т.д. Вместо добавления всех тестовых сценариев в один набор тестов (или несколько наборов тестов), вы можете выполнить “группировку” методов тестирования. Это помогает разделить тестовые сценарии на различные категории тестов – тип теста (например, дымовой, функциональный и т. Д.), Тестируемая функциональность (вход, проверка и т. Д.) И комбинации тестов (например, браузер, установленный в Chrome, Firefox в Windows 10 и т. Д.).
Сложные группировки методов тестирования с помощью групп тестирования используются для:
Объявление методов, принадлежащих группам.
Указание групп, содержащих другие группы.
Выполнение тестов в одной или нескольких группах.
Включая (или исключая) тесты в группе.
Включая определенный набор групп (или регулярных выражений) исключая при этом другую группу
Выполнение тестов, зависящих от других тестов, и предотвращение ненужного выполнения тестов в случае сбоя зависимого теста.
Преимущества групп тестирования
Вот некоторые из основных преимуществ групп при тестировании:
Гибкость в разделении тестов, тем самым сокращая усилия, связанные с обслуживанием тестов.
Позволяет избежать необходимости перекомпиляции кода, если два разных набора тестов выполняются один за другим.
Группы тестирования также могут использоваться для параллельного выполнения тестов на уровне “Тест” или “Метод”. В дальнейших разделах этого руководства “Как группировать тестовые случаи в тестировании” мы продемонстрируем параллельное тестирование в TestNG и Selenium с использованием тестовых групп.
Как группировать тестовые случаи в тестировании?
Группы в тестировании указаны в testng.xml под тегом или . Группы под тегом <набор> применяются ко всем тестам, включенным под тегом <тест> в этом конкретном <наборе>.
Чтобы сгруппировать тесты в исходном коде, необходимо использовать атрибут @groups аннотации @test. Тестирование предоставляет возможность структурировать тест таким образом, чтобы весь тестовый класс принадлежал определенной группе тестирования или несколько методов принадлежали группе TestNG. Кроме того, методы тестирования могут принадлежать к одной или нескольким группам тестирования.
Давайте рассмотрим простой пример, в котором тестовый код содержит три метода тестирования (test_method 1, test_method 2 и test_method 3). Мы создаем две тестовые группы – group1 и group2.
Вот как группировать тестовые случаи в тестировании. Как показано ниже, test_method 1() является частью обеих групп, а test_method 2() и test_method 3() являются частью группы 2 и группы 1 соответственно.
public class Test1
{
@Test(groups = { "group1", "group2" })
public void test_method1()
{
//Test implementation
}
@Test(groups = {"group2"} )
public void test_method2()
{
//Test implementation
}
@Test(groups = {"group1"})
public void test_method3()
{
//Test implementation
}
}
Группы тестирования вызываются в testng.xml:
Как видно из testng.xml, группы включены в тег . Поскольку мы хотим выполнить тесты, включенные в обе группы (группа 1 и группа 2), мы включаем необходимые имена групп в тег .
Демонстрация: Как использовать группы тестирования
Для демонстрации выполнения тестов в одних и тех же группах, в нескольких группах, включая (и исключая) методы тестирования и т.д., Мы используем сценарии кроссбраузерного тестирования, которые будут выполняться в облачной сетке Selenium/| с помощью LambdaTest.
Тестовая группа – 1 (Имя группы – Поиск)
Сценарий тестирования – 1 [ОС – Windows 10, Браузер – Chrome, Последняя версия]
Зайдите в Google.
Введите строку поиска как “Лямбда-тест”.
Подтвердите, если заголовок страницы не соответствует ожидаемому заголовку.
Вот общая структура проекта, которую мы создали в IDE IntelliJ IDEA:
В проекте TestNG Groups мы создаем пакет с именем org.testng group, в котором мы создаем следующие файлы классов (которые содержат реализацию соответствующих сценариев тестирования):
(Реализация тестовых сценариев в “Тестовой группе 1”)
package org.testnggroup;
import org.openqa.selenium.*;
import org.testng.Assert;
import org.testng.IExecutionListener;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
public class TestNG_SearchGroup extends Helper implements IExecutionListener
{
public static String status = "passed";
@Override
public void onExecutionStart()
{
System.out.println("onExecutionStart");
}
@Test (priority = 1, groups = { "Search" })
public void test_GoogleSearch() throws InterruptedException, MalformedURLException
{
String search_string =" LambdaTest";
String exp_title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest";
setupThread("test_GoogleSearch", "test_GoogleSearch",
"Windows 10", "Chrome", "latest");
WebDriver webdriver = getDriver();
webdriver.navigate().to("https://www.google.com");
webdriver.manage().window().maximize();
System.out.println("Started session");
try {
/* Enter the search term in the Google Search Box */
WebElement search_box = webdriver.findElement(By.xpath("//input[@name='q']"));
search_box.sendKeys(search_string);
search_box.submit();
Thread.sleep(3000);
/* Click on the first result which will open up the LambdaTest homepage */
WebElement lt_link = webdriver.findElement(By.xpath("//span[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']"));
lt_link.click();
Thread.sleep(5000);
String curr_window_title = webdriver.getTitle();
Assert.assertEquals(curr_window_title, exp_title);
status = "passed";
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (webdriver != null)
{
((JavascriptExecutor) webdriver).executeScript(+status+"");
webdriver.quit();
}
}
@Test (priority = 2, groups = { "Search" })
public void test_BingSearch() throws InterruptedException, MalformedURLException {
String search_string ="LambdaTest Blog";
String exp_title = "LambdaTest | A Cross Browser Testing Blog";
setupThread("test_BingSearch", "test_BingSearch", "MacOS Catalina",
"Safari", "13.0");
WebDriver webdriver = getDriver();
webdriver.navigate().to("https://www.bing.com");
webdriver.manage().window().maximize();
System.out.println("Started session");
try {
/* Enter the search term in the Google Search Box */
WebElement search_box = webdriver.findElement(By.xpath("//input[@id='sb_form_q']"));
search_box.sendKeys(search_string + Keys.ENTER);
Thread.sleep(3000);
/* Click on the first result which will open up the LambdaTest homepage */
WebElement lt_link = webdriver.findElement(By.xpath("//a[.='LambdaTest | A Cross Browser Testing Blog']"));
lt_link.click();
Thread.sleep(5000);
String curr_window_title = webdriver.getTitle();
Assert.assertEquals(curr_window_title, exp_title);
status = "passed";
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (webdriver != null)
{
((JavascriptExecutor) webdriver).executeScript(+status+"");
webdriver.quit();
}
}
@Override
public void onExecutionFinish()
{
System.out.println("onExecutionFinish");
}
}
(Реализация тестовых сценариев в “Тестовой группе 2”)
package org.testnggroup;
import org.openqa.selenium.*;
import org.testng.IExecutionListener;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
public class TestNG_ToDoGroup extends Helper implements IExecutionListener {
/* WebDriver driver; */
/* private ThreadLocal driver = new ThreadLocal<>(); */
public static String status = "passed";
@Override
public void onExecutionStart()
{
System.out.println("onExecutionStart");
}
@Test (priority = 1, groups = { "ToDo" })
public void test_Selenium4_ToDoApp_Test1() throws InterruptedException, MalformedURLException
{
setupThread("test_Selenium4_ToDoApp_Test1", "test_Selenium4_ToDoApp_Test1",
"Windows 10", "Firefox", "68.0");
WebDriver webdriver = getDriver();
webdriver.navigate().to("https://lambdatest.github.io/sample-todo-app/");
webdriver.manage().window().maximize();
System.out.println("Started session");
Thread.sleep(5000);
try
{
/* Let's mark done first two items in the list. */
webdriver.findElement(By.name("li1")).click();
webdriver.findElement(By.name("li2")).click();
/* Let's add an item in the list. */
webdriver.findElement(By.id("sampletodotext")).sendKeys("Happy Testing at LambdaTest");
webdriver.findElement(By.id("addbutton")).click();
/* Let's check that the item we added is added in the list. */
String enteredText = webdriver.findElement(By.xpath("/html/body/div/div/div/ul/li[6]/span")).getText();
if (enteredText.equals("Happy Testing at LambdaTest")) {
System.out.println("Demonstration is complete");
status = "passed";
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
if (webdriver != null)
{
((JavascriptExecutor) webdriver).executeScript(+status+"");
webdriver.quit();
}
}
@Test (priority = 2, groups = { "ToDo" })
public void test_Selenium4_ToDoApp_Test2() throws InterruptedException, MalformedURLException {
setupThread("test_Selenium4_ToDoApp_Test2", "test_Selenium4_ToDoApp_Test2",
"MacOS Catalina", "MicrosoftEdge", "87.0");
WebDriver webdriver = getDriver();
webdriver.navigate().to("https://lambdatest.github.io/sample-todo-app/");
webdriver.manage().window().maximize();
System.out.println("Started session");
Thread.sleep(5000);
try
{
/* Let's mark done first three items in the list. */
webdriver.findElement(By.name("li1")).click();
webdriver.findElement(By.name("li2")).click();
webdriver.findElement(By.name("li3")).click();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
status = "passed";
if (webdriver != null)
{
((JavascriptExecutor) webdriver).executeScript(+status+"");
webdriver.quit();
}
}
@Override
public void onExecutionFinish()
{
System.out.println("onExecutionFinish");
}
}
( Реализация вспомогательных функций для создания экземпляра RemoteWebDriver)
поток настройки: Этот метод принимает пять аргументов (Сборка, Имя, название платформы, имя браузера и версия браузера), которые соответствуют требованиям Генератора возможностей LambdaTest . Кроссбраузерные тесты будут выполняться в сетке Selenium 4.
Он создает экземпляр нового ThreadLocal для каждого тестового класса, поскольку тесты (в файлах двух классов) выполняются параллельно на уровне “Метода”.
getDriver: Этот метод возвращает объект WebDriver в качестве локального потока для параллельных тестов.
Разрывная нить: Этот метод освобождает ресурсы, удерживаемые текущим объектом WebDriver.
В рамках примеров групп тестирования мы рассмотрим наиболее простое использование групп в тестировании. В проекте у вас может быть несколько групп, но вам может быть интересно запускать тесты, принадлежащие определенной группе TestNG. В таких случаях вы можете сгруппировать тесты, чтобы выборочно запускать “все тесты” в определенной группе.
В нашем примере у нас есть две группы тестирования – Поиск и Задание. Давайте рассмотрим, как параллельно запускать тестовые случаи в одной и той же группе (например, Поиск). Параллельное тестирование в Selenium предпочтительнее, чтобы тесты выполнялись быстрее, а также вы могли максимально использовать возможности, предлагаемые облачной сеткой Selenium.
В testng.xml, мы устанавливаем атрибут количества потоков равным 2, а атрибут parallel – “методы”. Поскольку мы хотим запустить тестовые случаи, реализованные в группе “Поиск”, группа включена в тег <выполнить> в разделе <группы>.
В группе тестирования “Поиск” есть два метода тестирования:
test_GoogleSearch – Приоритет установлен на “1”.
test_BingSearch – Приоритет установлен на “2”.
Указанные групповые тесты будут выполняться параллельно в соответствии с приоритетом, указанным в аннотации @test.
Как видно на снимке выполнения, два метода тестирования под тегом тестирования – “Поиск” выполняются параллельно:
Ниже показаны снимки выполнения из ИДЕИ и панели мониторинга автоматизации из Лямбда-теста. Это указывает на то, что их тесты были успешно выполнены:
Как Запускать Тестовые Случаи В Нескольких Группах?
Тестирование позволяет запускать методы тестирования, принадлежащие нескольким группам. Имена групп представлены в виде массива в атрибуте groups аннотации @test . В нашем случае у нас есть четыре метода тестирования, которые сгруппированы в две группы тестирования. Поскольку методы тестирования являются частью двух разных классов, эти две группы включены в два отдельных тега .
Методы тестирования двух разных классов выполняются в разных потоках. Поскольку мы установили для атрибута parallel значение “методы”, методы (в соответствии с установленным приоритетом) в соответствующих классах выполняются параллельно.
Сначала методы тестирования в группе “Поиск” выполняются параллельно. После успешного выполнения этих методов методы тестирования в группе тестирования “Что делать” выполняются параллельно.
Вот скриншоты выполнения, которые показывают, что все четыре метода тестирования в группах “Поиск” и “Задача” были выполнены успешно:
Группы Внутри Групп В Тестировании
В этом разделе руководства по тестированию мы рассмотрим, как использовать “Мета-группы” в тестировании. Группы могут включать в себя другие группы. Объединенная группа называется “Мета-группой”. Группы внутри групп при тестировании могут быть полезны в тех случаях, когда “коллекция” тестовых сценариев из разных групп должна выполняться как часть тестового случая.
Для демонстрации того, как группировать тестовые случаи в TestNG, когда группы находятся внутри групп, мы создаем четыре группы тестов – Search1 и Search2 (для включения методов тестирования, демонстрирующих функциональность поиска) и ToDo1 и ToDo2 (для включения методов тестирования, демонстрирующих функциональность приложения Todo).
Ниже показаны модификации кода для создания четырех групп тестирования:
public class TestNG_ToDoGroup extends Helper implements IExecutionListener
{
[..]
@Test (priority = 1, groups = {"ToDo1"})
public void test_Selenium4_ToDoApp_Test1() throws InterruptedException, MalformedURLException
{
setupThread("test_Selenium4_ToDoApp_Test1", "test_Selenium4_ToDoApp_Test1", "Windows 10", "Firefox", "68.0");
...................................
...................................
...................................
}
@Test (priority = 2, groups = {"ToDo2"})
public void test_Selenium4_ToDoApp_Test2() throws InterruptedException, MalformedURLException
{
setupThread("test_Selenium4_ToDoApp_Test2", "test_Selenium4_ToDoApp_Test2", "MacOS Catalina", "MicrosoftEdge", "87.0");
...................................
...................................
...................................
}
[..]
}
Новая группа под названием “Группа1” включает методы тестирования, реализованные в группах “Поиск 1” и “Поиск2”. Другая группа, “Группа 2”, включает методы тестирования, реализованные в группах “Dota1” и “Dota2”. Группы Group1 и Group2 включены в состав новой группы под названием “сУпергРуппа”.
Четыре теста, которые являются частью “сУпергРуппы”, выполняются путем включения супергруппы под тегом .
Четыре метода тестирования, входящие в состав вложенной группы с именем Супергруппа, выполняются параллельно:
Все четыре тестовых сценария в разделе “сУпергРуппа” успешно выполнены:
Как Исключить/Включить Тестовые Случаи С Группами?
Группы тестирования также предоставляют возможность игнорировать сценарии тестирования/методы тестирования с помощью тега <исключить> в разделе <методы>. В аналогичных строках тег в разделе <методы> testng.xml используется для включения методов тестирования в процесс выполнения теста.
Класс группы Testing_Search: Для запуска методов тестирования, имя которых включает “.*Бытие. * “и исключить метод(ы) тестирования, название которого содержит”.*Google. *”, мы используем группы методов следующим образом:
Методом сопоставления в классе является test_Bing Поиск() .
Тестирование для группового занятия: Для запуска методов тестирования, имя которых включает “.*TodoApp. * “и исключить метод(ы) тестирования, название которого содержит”.*Тест1. *”, мы используем группы методов следующим образом:
Метод сопоставления в классе – test_selenium 4_ToDoApp_Test2() .
Вот снимок выполнения, который указывает, что два соответствующих метода тестирования успешно запущены в облачной сетке Selenium:
Как исключить Группу тестирования?
Платформа тестирования также позволяет как включать, так и исключать их. Исключение групп в тестировании полезно в тех случаях, когда в тестах происходит временная поломка (из-за некоторых недавних изменений), и у вас нет времени их исправить.
Тесты в этих группах могут быть временно деактивированы для последующей повторной активации после устранения неполадок. Группы также могут быть исключены с помощью регулярных выражений.
Для демонстрации исключения групп тестирования мы используем тег в , чтобы включить группы тестирования, соответствующие регулярному выражению “.*Задача. *”. Тег <исключить> в <группах> используется для исключения группы тестирования с именем “Поиск”.
Группа тестирования с именем “Todo” соответствует набору критериев (т. е. “.*Сделать. *”) в теге <включить>. С другой стороны, методы тестирования, реализованные в группе Testing_Search, исключаются, поскольку они соответствуют требованиям тега .
Как показано ниже, методы тестирования из соответствующих групп тестирования были успешно выполнены на сетке селена лямбда-теста:
Регулярные выражения и группы тестирования
Тестирование использует регулярные выражения (т. Е. Все, что соответствует”. *” – Точечная звезда), а не подстановочные знаки (т. е. “*”) для выполнения методов тестирования, соответствующих указанному шаблону. Для демонстрации использования регулярных выражений с группами тестирования мы запускаем методы тестирования, которые включают термин “Поиск”.
testng.xml для выполнения тестовых случаев путем сопоставления имен групп с помощью регулярных выражений
Как видно из testng.xml, будут выполнены тесты по группам – “Поиск”. Следовательно, методы тестирования test_Google Search() и Поиск test_Bing() выполняются в соответствии с назначенным приоритетом.
Как показано ниже, методы тестирования, соответствующие имени соответствующей группы тестирования, успешно выполняются:
Как Сгруппировать Ваши Тесты По Лямбда-Тесту?
Лямбда-тест позволяет группировать тесты автоматизации с помощью пользовательских тегов. Преимущество использования пользовательских тегов заключается в том, что это облегчает поиск ваших тестовых случаев на панели автоматизации лямбда-тестирования.
Чтобы сгруппировать тесты по лямбда-тесту с использованием пользовательских тегов, создайте массив строк, содержащий имена пользовательских тегов, разделенных запятой.
/* In case of just 1 tag, add 1 element in the array */
String[] customTags = {"Custom Tag"};
/* In case of multiple tags, add them in the array separated by comma */
String[] customTags = {"Tag 1", "Tag 2", "Tag 3", ...};
Теперь добавьте этот пользовательский тег в нужный экземпляр возможностей, как показано ниже:
DesiredCapabilities capabilities = new DesiredCapabilities();
[..]
// To create custom tags
capabilities.setCapability("tags", customTags);
В нашем случае мы устанавливаем возможности в методе setup Thread() , определенном в вспомогательном классе. Мы создаем Пользовательский тег, состоящий из комбинации Названия платформы и Имени браузера и версии браузера, используемой при кроссбраузерном тестировании.
У вас также есть возможность фильтровать тесты, выбирая несколько тегов одновременно на панели инструментов фильтра.
Здесь мы фильтруем теги, соответствующие “Mac OS”, чтобы найти тесты, выполняемые на платформе macOS:
Пользовательские теги следует эффективно использовать для группировки тестовых случаев в лямбда-тесте, чтобы было легко фильтровать “необходимые” тесты из многочисленных тестов, выполняемых в сетке.
Завершение
В этом руководстве по тестированию мы подробно рассмотрели, как группировать тестовые случаи в тестировании. Группы в тестировании полезны в проектах, где требуется выполнить тестовые сценарии, соответствующие определенным критериям. Например, все кроссбраузерные тесты можно поместить в группу под названием “кроссбраузерные”, чтобы тесты можно было легко идентифицировать. Группировка тестов также помогает временно отключить тесты, которые могут вызывать сбои в других тестах.
Как видно из примеров групп тестирования, вы можете запускать тесты в одной группе, в нескольких группах, во вложенных группах и т. Д. Регулярные выражения с группами и методами тестирования удобны, когда вы хотите включить/исключить тестовые случаи (или группы), соответствующие определенному условию.