为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2023-04-13 10:58:09
我有一个名为“基础应用程序组”的组,其中包含 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 文件实现这一点。
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

你不能用 TestNG 开箱即用。基本上没有一种机制可以多次迭代属于一个组的一堆测试n

做到这一点的唯一方法是手动复制标签<test>,正如您指出的那样,这是一个手动过程,每次都需要更改和签入套件 xml。

总而言之,TestNG 仍然允许您通过执行以下操作来做到这一点。

  1. 确保你依赖于 TestNG 7.0.0-beta7(截至今天最新)

  2. 构建一个实现,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 {


  @Override

  public void alter(List<XmlSuite> suites) {

    XmlSuite xmlsuite = suites.get(0);

    XmlTest xmltest = xmlsuite.getTests().get(0);

    XmlGroups xmlgroups = xmltest.getXmlGroups();

    List<XmlClass> xmlclasses = xmltest.getClasses();

    int iteration = Integer.parseInt(System.getProperty("iterations", "2"));

    String name = xmltest.getName();

    for (int i=1; i<= iteration; i++) {

      XmlTest test = new XmlTest(xmlsuite);

      test.setName(name + "_" + i);

      test.setGroups(xmlgroups);

      test.setXmlClasses(xmlclasses);

    }

  }


  @Override

  public void onStart(ITestContext testContext) {

    System.err.println("Commencing execution of [" + testContext.getName() + "]");

  }

}


查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信