«Выполнение теста в testNG на основе условия» - PullRequest
1 голос
/ 05 июня 2019

У меня есть testNG xml, который выполнит (один) контрольный пример 2 раза.Разница между каждым временем является параметром уровня теста.поэтому мне нужно выполнить контрольный пример с двумя разными параметрами (2 пользователя).

Теперь я буду создавать новый xml (набор xml), из которого я буду называть существующий xml.я определю новый параметр в suite xml для пользователя.

Ожидается, что если suite xml параметр = "user2", то дочерний xml должен выполнить тестовый пример только один раз, в котором параметр имеет значение user2.

Я попробовал сценарии бобов и нашел его полезным для выбора методов.но я хочу принять решение для уровня теста, а не уровня метода.

Ниже приведен файл testNG.xml, который 2 раза вызывает тестовый пример с другим значением пользователя.TestCase будет вызываться первый раз с User = "USER1" и второй раз с User = "USER2".

<?xml version="1.0"?>
<suite name="TestLoad">
    <test verbose="10" name="TestForUser1" preserve-order="true">
        <parameter name="User" value="USER1"/>
        <classes>
            <class name="com.dummy.test.TestCase"/>
        </classes>
    </test>
    <test verbose="10" name="TestForUser2" preserve-order="true">
        <parameter name="User" value="USER2"/>
        <classes>
            <class name="com.dummy.test.TestCase"/>
        </classes>
    </test>
</suite>

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

<?xml version="1.0"?>
<suite name="suiteOfXml">
    <parameter name="User" value="USER1"/>
    <suite-files>
        <suite-file path="TestLoad.xml"/>
        <suite-file path="TestStage.xml"/>
    </suite-files>
</suite>

Ожидается что-то вроде:

  • , если в suiteOfXml есть User = "USER1", то каждый testNG xml должен запускать TestCase только один раз с User = USER1.
  • если в suiteOfXml есть User = "USER2", то каждый testNG xml должен запускать TestCase только один раз с User = USER2.
  • , если в suiteOfXml есть User = "ALL", тогда каждый xml testNG должен запускать TestCaseдважды.один раз с User = USER1 и в следующий раз с User = USER2.

Я не могу внести какие-либо изменения в TestCase (уровень класса Java).условие должно быть сделано только в xml.

Пожалуйста, предоставьте возможное решение.Заранее спасибо

1 Ответ

1 голос
/ 09 июня 2019

Вот что вам нужно сделать, чтобы обойти эту проблему (вам не нужен набор люксов и т. Д.)

  • Создайте реализацию интерфейса прослушивателя TestNG org.testng.IAlterSuiteListener, в рамках которого вы в основном читаете значение параметра и затем на его основе вы решаете, какой <test> должен быть создан и как он будет выглядеть и т. Д.,
  • Вы создаете XML-файл комплекта, который содержит только параметр, который поможет вам решить, какой <test> должен быть там, а также ссылку на вновь созданного прослушивателя из предыдущего шага.

Это должно сделать. Используя этот подход, вы в основном можете делать все, что перечислили.

Вот как будет выглядеть пример прослушивателя (В этом примере мы получаем пакеты для выполнения через аргумент JVM, а затем на основе этого мы создаем наш тег <test>)

package com.rationaleemotions.wordpress;

import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlPackage;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;

import java.util.Collections;
import java.util.List;

public class SimpleSuiteAlterer implements IAlterSuiteListener {
    @Override
    public void alter(List suites) {
        XmlSuite suite = suites.get(0);
        XmlTest xmlTest = new XmlTest(suite);
        xmlTest.setName("CommandLine_Test");
        String packages = System.getProperty("package", suite.getParameter("package"));
        XmlPackage xmlPackage = new XmlPackage(packages);
        xmlTest.setXmlPackages(Collections.singletonList(xmlPackage));
    }
}

А вот как будет выглядеть набор xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Package-Suites" verbose="2">
    <parameter name="package" value="com.rationaleemotions"/>
    <listeners>
        <listener class-name="com.rationaleemotions.wordpress.SimpleSuiteAlterer"/>
    </listeners>
</suite>

Более подробное объяснение и некоторые примеры кода см. В моем блоге https://rationaleemotions.com/building_dynamic_testng_suites/

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