“根据条件在 testNG 中执行测试”

Posted

技术标签:

【中文标题】“根据条件在 testNG 中执行测试”【英文标题】:"Executing a test in testNG based on condition" 【发布时间】:2019-10-20 14:53:30 【问题描述】:

我有一个 testNG xml,它将执行(一个)测试用例 2 次。每次之间的差异是测试级别参数。所以我必须使用 2 个不同的参数(2 个用户)执行测试用例。

现在我将创建新的 xml(xml 套件),我将从中调用现有的 xml。我将在套件 xml 中为用户定义一个新参数。

如果套件 xml 参数 =“user2”,则子 xml 应该只执行一次测试用例,其参数为 user2。

我尝试了 beanshell 脚本,发现它对方法选择器很有用。但我想为测试级别而不是方法级别做出决定。

下面是 testNG.xml,它以不同的用户值调用测试用例 2 次。第一次使用 User="USER1" 调用 TestCase,第二次使用 User="USER2" 调用 TestCase。

<?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 中进行。

请提供可能的解决方案。提前致谢

【问题讨论】:

【参考方案1】:

这是解决此问题所需要做的事情(您不需要一套套件等,)

创建 TestNG 侦听器接口org.testng.IAlterSuiteListener 的实现,在其中您基本上读取参数的值,然后根据它,您决定应该创建哪个&lt;test&gt; 以及它的外观等,李> 您创建了一个套件 xml 文件,其中仅包含可帮助您决定应该在其中的 &lt;test&gt; 的参数以及对上一步中新创建的侦听器的引用。

应该可以。使用这种方法,您基本上可以完成您列出的所有事情。

这是示例监听器的外观(在此示例中,我们通过 JVM 参数获取要执行的包,然后基于此,我们正在构建 &lt;test&gt; 标记)

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/

【讨论】:

感谢您的回答。它并没有完全解决我的答案,但帮助我找到了不同的方法。

以上是关于“根据条件在 testNG 中执行测试”的主要内容,如果未能解决你的问题,请参考以下文章

测试2

测试asd

测试tinymce5

text

测试一下测试一下测试一下测试一下

测试使用