Автор оригинала: Pankaj Kumar.
Иногда мы хотим, чтобы наши тестовые примеры выполнялись в определенном порядке. Один из очень распространенных примеров-это когда мы хотим запустить тестовые случаи для операций CRUD. Поэтому мы хотим убедиться, что тестовые данные сначала вставляются, затем извлекаются, обновляются и, наконец, удаляются.
Пример зависимости TestNG – Методы зависимостей
Допустим, у нас есть тестовый класс для операций CRUD.
package com.journaldev.dependency; import org.testng.annotations.Test; public class TestNGDependencyExample { @Test public void insert() { System.out.println("inserting demo data"); } @Test public void select() { System.out.println("selecting demo data"); } @Test public void update() { System.out.println("updating demo data"); } @Test public void delete() { System.out.println("deleting demo data"); } }
Поскольку мы не определяем порядок, тестирование будет выполнять их в естественном порядке их имен. Поэтому, когда мы запустим тестовый класс, мы получим следующий результат.
deleting demo data inserting demo data selecting demo data updating demo data
Это не то, что мы хотим, чтобы наши тестовые случаи были упорядочены. Один из быстрых и грязных способов-изменить имена методов, чтобы они выполнялись в нужном нам порядке.
Лучший способ-использовать dependsOnMethods
, чтобы указать Тестированию, от каких методов зависит этот тест, поэтому эти методы должны выполняться до этого метода.
Ниже приведен наш обновленный тестовый класс, в котором мы создаем порядок выполнения – вставка, выбор, обновление и удаление.
package com.journaldev.dependency; import org.testng.annotations.Test; public class TestNGDependencyExample { @Test public void insert() { System.out.println("inserting demo data"); } @Test(dependsOnMethods="insert") public void select() { System.out.println("selecting demo data"); } @Test(dependsOnMethods="select") public void update() { System.out.println("updating demo data"); } @Test(dependsOnMethods="update") public void delete() { System.out.println("deleting demo data"); } }
Новым результатом тестового запуска является:
inserting demo data selecting demo data updating demo data deleting demo data
dependsOnMethods
принимает в качестве аргумента массив строк. Приведенная ниже аннотация метода delete() также хороша и дает тот же результат.
@Test(dependsOnMethods= {"insert","update"}) public void delete() { System.out.println("deleting demo data"); }
Тесты зависимостей TestNG – Группы зависимостей
Мы также можем указать, зависит ли наш тест от каких-либо других групп. Это полезно, когда у нас есть несколько методов, и они сгруппированы вместе. Таким образом, мы можем просто указать группу, от которой зависит этот тест, вместо того, чтобы указывать огромный список всех методов.
Давайте рассмотрим немного сложный пример, в котором наши тесты зависят как от методов, так и от групп. Все ранее определенные методы являются частью группы под названием “тесты”. Эти методы зависят от группы “предварительные тесты”. У нас также есть метод очистки, который зависит от группы “тесты”.
package com.journaldev.dependency; import org.testng.annotations.Test; public class TestNGDependencyExample { @Test(groups = "pre-tests") public void init() { System.out.println("init resources"); } @Test(groups = "tests", dependsOnGroups = "pre-tests") public void insert() { System.out.println("inserting demo data"); } @Test(dependsOnMethods = "insert", groups = "tests") public void select() { System.out.println("selecting demo data"); } @Test(dependsOnMethods = "select", groups = "tests") public void update() { System.out.println("updating demo data"); } @Test(dependsOnMethods = { "insert", "update" }, groups = "tests") public void delete() { System.out.println("deleting demo data"); } @Test(dependsOnGroups = "tests") public void cleanup() { System.out.println("closing resources"); } }
Результатом выполнения теста является:
init resources inserting demo data selecting demo data updating demo data deleting demo data closing resources
Зависимость TestNG в пакете XML
XML-пакет TestNG позволяет нам определять зависимости между группами. Если нам нужно определить порядок вызова методов, то мы можем использовать номера вызовов
для элемента методов.
Допустим, у нас есть новый класс с почти теми же методами, что и ранее, но между методами и группами не определена зависимость.
package com.journaldev.dependency; import org.testng.annotations.Test; public class TestNGDependencyXMLExample { @Test(groups = "pre-tests") public void init() { System.out.println("init resources"); } @Test(groups = "tests") public void insert() { System.out.println("inserting demo data"); } @Test(groups = "tests") public void select() { System.out.println("selecting demo data"); } @Test(groups = "tests") public void update() { System.out.println("updating demo data"); } @Test(groups = "tests") public void delete() { System.out.println("deleting demo data"); } @Test(groups = "post-tests") public void cleanup() { System.out.println("closing resources"); } }
Вот наш XML-пакет TestNG, который определит порядок выполнения групп и методов.
Резюме
Мы рассмотрели порядок выполнения методов и групп тестирования с использованием dependsOnMethods
и dependsOnGroups
свойств аннотации теста. Мы также узнали, как добиться того же самого в файле XML suite.