3 回答
TA贡献1921条经验 获得超9个赞
我希望跳过当前测试而不是所有剩余测试的问题仍然存在。
结果发现问题出在 Testng 中的 configfailurepolicy 上。当我希望将其设置为继续(继续套件的其余部分)时,它默认为跳过(跳过所有剩余的测试)。
这是我在其他地方找到的答案,我设法以两种不同的方式应用它。链接在这里
1. 首先,创建一个 testng.xml 并从那里运行测试。在套件名称旁边,添加标签 configfailurepolicy="continue" 这是我的 testng.xml 下面
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" configfailurepolicy="continue">
<test name="MyTests" preserve-order="true">
<classes>
<class name="testclassLocation..." />
</classes>
</test>
</suite>
如果您这样做,请确保从 testng.xml 运行测试。
2. 找到 testng 的 .jar 所在位置。我使用的是maven,所以它是“${user.dir}.m2\repository\org\testng\testng\6.14.3”。
然后打开 .jar 存档,查看文件“testng-1.0.dtd”,找到该行
configfailurepolicy (skip | continue) "skip"
并将其更改为
configfailurepolicy (skip | continue) "continue"
之后应该可以正常工作。
编辑:正如评论中提到的,建议使用第一个解决方案,因为它允许这些更改/修复可以跨多个项目/设备移植。第二种解决方案只会将修复应用于您的计算机。
TA贡献1820条经验 获得超10个赞
SkipException就是您正在寻找的。
在 中beforeMethod
,检查您的数据,SkipException
如果不正确则抛出。这将跳过测试。在这个完整而简单的示例中,test2
跳过:
import org.testng.SkipException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
public class TestA {
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
boolean dataCorrect();
}
@BeforeMethod
public void beforeMethod(Method m) {
if (!m.getAnnotation(MyCustomAnnotation.class).dataCorrect()) {
throw new SkipException("Invalid data");
}
}
@Test
@MyCustomAnnotation(dataCorrect = true)
public void test1() {
System.out.println("test1");
}
@Test
@MyCustomAnnotation(dataCorrect = false)
public void test2() {
System.out.println("test2");
}
}
您还需要更改默认配置失败策略,以便即使跳过一个测试也可以运行其他测试。这是在套件级别完成的:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" configfailurepolicy="continue">
...
</suite>
感谢@Kyle OP指出这个属性。
TA贡献1893条经验 获得超10个赞
在BeforeMethod中创建一个静态Booleanflag,如果数据不正确,则只需将标志更改为true,然后在布尔为true的测试中首先将标志更改为false并失败测试
示例代码
public static Boolean myflag=false;
@BeforeMethod
public void beforeMethod(Method m){
//reads code
if (dataNotCorrect)
myflag=true;
}
@Test @MyCustomAnnotation(data = incorrect)
public void Test1(){
if(myflag){
myflag=false;
s_assert.fail();
}
添加回答
举报