猿问

有没有办法使用 TestNG XML 文件使用某些选定的方法多次运行 1 个测试组?

我有一个名为“基础应用程序组”的组,其中包含 3 种测试方法:


Test a(groups = "base application group"), 

Test b(groups = "base application group") AND 

Test c(groups = "base application group").

现在,假设我只想运行 Test a() 并想从组中排除其余方法。我知道如何在 XML 文件中执行此操作。现在真正的问题是,如果我在 XML 文件中有 10 个类并且该组应该执行 10 次,我如何才能对 XML 文件中的每个类运行该组?


到目前为止,我已经尝试在类级别使用 include 和 exclude 标记来执行此操作,但我不想在我的 XML 文件中执行 10 次。我也尝试过 tag 和 Meta Group,但这并没有给我想要的输出。


这是我的 xml 代码 atm:


<suite name ="Footer Suite" >

<test name ="Footer Tests" verbose ="2" >

    <classes>

        <class name ="it.org.techtime.jira.easysso.seleniumtests.footertests.MainAdminScreenTests">

            <methods>

                <exclude name ="Test b"/>

                <exclude name ="Test c"/>

            </methods>

        </class>

        <class name ="it.org.techtime.jira.easysso.seleniumtests.footertests.MainAdminScreenTests">

            <methods>

                <exclude name ="Test b"/>

                <exclude name ="Test c"/>

            </methods>

        </class>

    </classes>

</test>

我希望“基础应用程序组”运行 10 次,并且只希望 Test a() 从该组运行。不要忘记我想从 XML 文件实现这一点。


桃花长相依
浏览 96回答 1
1回答

心有法竹

你不能用 TestNG 开箱即用。基本上没有一种机制可以多次迭代属于一个组的一堆测试n。做到这一点的唯一方法是手动复制标签<test>,正如您指出的那样,这是一个手动过程,每次都需要更改和签入套件 xml。总而言之,TestNG 仍然允许您通过执行以下操作来做到这一点。确保你依赖于 TestNG&nbsp;7.0.0-beta7(截至今天最新)构建一个实现,org.testng.IAlterSuiteListener您可以使用它以编程方式更改您的套件文件并添加/删除/更新其中的任何内容。这是一个执行您所要求的侦听器的示例。import java.util.List;import org.testng.IAlterSuiteListener;import org.testng.ITestContext;import org.testng.TestListenerAdapter;import org.testng.xml.XmlClass;import org.testng.xml.XmlGroups;import org.testng.xml.XmlSuite;import org.testng.xml.XmlTest;public class MultiRunner extends TestListenerAdapter implements IAlterSuiteListener {&nbsp; @Override&nbsp; public void alter(List<XmlSuite> suites) {&nbsp; &nbsp; XmlSuite xmlsuite = suites.get(0);&nbsp; &nbsp; XmlTest xmltest = xmlsuite.getTests().get(0);&nbsp; &nbsp; XmlGroups xmlgroups = xmltest.getXmlGroups();&nbsp; &nbsp; List<XmlClass> xmlclasses = xmltest.getClasses();&nbsp; &nbsp; int iteration = Integer.parseInt(System.getProperty("iterations", "2"));&nbsp; &nbsp; String name = xmltest.getName();&nbsp; &nbsp; for (int i=1; i<= iteration; i++) {&nbsp; &nbsp; &nbsp; XmlTest test = new XmlTest(xmlsuite);&nbsp; &nbsp; &nbsp; test.setName(name + "_" + i);&nbsp; &nbsp; &nbsp; test.setGroups(xmlgroups);&nbsp; &nbsp; &nbsp; test.setXmlClasses(xmlclasses);&nbsp; &nbsp; }&nbsp; }&nbsp; @Override&nbsp; public void onStart(ITestContext testContext) {&nbsp; &nbsp; System.err.println("Commencing execution of [" + testContext.getName() + "]");&nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答