使用以下XML文件,我可以在some.package.login
Java包中运行所有测试。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Login">
<test name="Login">
<packages>
<package name="some.package.login"/>
</packages>
</test>
</suite>
我想从命令行运行TestNG,它与上面的XML文件相同但没有XML文件。 (这个question询问如何运行XML文件。)我知道-suitename
参数。我只是不知道如何限制特定包的执行。
我尝试了-testclass some.package.login.*
,但TestNG将此视为一个类的名称而不处理外卡。
我可以使用-groups
,然后在所有测试中使用@Test(groups = "Login")
,但我宁愿不必这样做。
我正在寻找一种解决方案,它比为我想要运行的每个测试子集创建XML文件更容易。为每个子集编写一个类并不比编写XML文件容易。
如果无法做到这一点,我已经提交了TestNG enhancement request。
答案 0 :(得分:1)
您将能够使用a method interceptor过滤测试。
fun x => let y = x in y
我让你完成匹配的逻辑。 然后,只需在命令行中添加一个环境变量,如:
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
List<IMethodInstance> result = new ArrayList<IMethodInstance>();
for (IMethodInstance m : methods) {
String expectedPackage = System.getProperty("package");
Package p = m.getInstance().getClass().getPackage();
if (p matches expectedPackage) {
result.add(m);
}
}
return result;
}
答案 1 :(得分:0)
可以通过工厂(在CLI中使用-testrunfactory
)完成,但需要一些额外的重构。或者只需在包中指定xml并使用-xmlpathinjar
。您还可以在项目构建阶段动态创建xml。