Выполнение теста в testNG на основе условия

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

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

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

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

Ниже представлен 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", тогда каждый testNG xml должен запускать TestCase дважды. один раз с User = USER1 и в следующий раз с User = USER2.

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

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


person kannan    schedule 05.06.2019    source источник


Ответы (1)


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

  • Создайте реализацию интерфейса прослушивателя 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/

person Krishnan Mahadevan    schedule 09.06.2019
comment
спасибо за Ваш ответ. это не полностью решило мой ответ, но помогло мне найти другой подход. - person kannan; 24.06.2019