我正在组装一个导航测试套件,以使用 Java/Selenium/TestNG 在我公司内部应用程序的每个页面上练习一些功能。
假设我的 NavigationTests 目录中有一个名为 ApplicationsIT 的测试类。在这个类中,我有 10 个 @Tests 注释,所以每次我运行完整的 NavigationTests 套件时,都会运行 10 个测试。
但是,为了时间,有没有办法让我只在每个测试类中运行第一个测试?
我尝试弄乱“(alwaysRun = false)”标签,但它似乎没有按我的预期工作。
我知道这是一个结构不佳的问题/帖子,所以我很乐意澄清我能做的任何事情。
至少有两种动态执行此操作的方法。
org.testng.IAnnotationTransformer
. 在这里,您基本上实现了接口,org.testng.IAnnotationTransformer
并在其transform()
方法中检查传入testMethod
java.lang.reflect.Method
对象以检查其名称是否与您要运行或不运行的内容匹配。您可以通过 JVM 参数指定运行/不运行一堆方法的意图。如果有匹配项,那么您基本上可以通过annotation.setEnabled(false)
这里annotation
is of type禁用测试方法org.testng.annotations.ITestAnnotation
。您需要使用<listeners>
套件 xml 文件中的标记通过服务加载器(或)连接到此侦听器。有关一般听众的更多信息,您可以在此处查看我的博客文章<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="47230879_Suite" parallel="false" verbose="2">
<test name="47230879_test" verbose="2">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[
try {
input = System.getProperty("methods","");
if (input.trim().isEmpty()) {
return true;
}
methods= input.split(",");
for (int i =0; i< methods.length; i++) {
if (method.getName().equals(methods[i])) {
return true;
}
}
return false;
} catch( e ) {
print(e);
}
]]>
</script>
</method-selector>
</method-selectors>
<classes>
<class name="com.rationaleemotions.stackoverflow.qn47230879.TestclassSample"/>
</classes>
</test>
</suite>
测试类如下所示
package com.rationaleemotions.stackoverflow.qn47230879;
import org.testng.annotations.Test;
public class TestclassSample {
@Test
public void a() {
System.err.println("a()");
}
@Test
public void b() {
System.err.println("b()");
}
@Test
public void c() {
System.err.println("c()");
}
@Test
public void d() {
System.err.println("d()");
}
@Test
public void e() {
System.err.println("e()");
}
}
如果您在没有通过 JVM 参数指定任何方法的情况下运行该套件,则所有方法都会运行,但是如果您通过 JVM 参数-Dmethods=a,b,c
(例如)指定一堆方法名称,则只会执行那些方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句