如果数据提供者向测试方法提供了一些异常数据,我想创建@Test(enable=false)
。例如。
我的测试方法签名是这样的。
@Test(dataProvider = "dataProvider" , enabled='true')
public void test(ITestContext itc, String record) throws Throwable
所以如果record.contains("Upload")
那么enabled='false'
。
我不想在测试方法中嵌入那个逻辑。我想使用注释转换。这是变换方法的签名
public void transform(ITest annotation, Class testClass,
Constructor testConstructor, Method testMethod)
我无法访问transform method中的记录对象[data provider]。我将这些数据注入到transform方法中?
答案 0 :(得分:0)
无法在IAnnotationTransformer
中获取参数值。
相反,我们可以扩展TestListenerAdapter
并覆盖onTestStart()
方法以获取用于调用测试的参数。在比较参数后,我们可以发出SkipException
以跳过运行测试。
import org.testng.ITestResult;
import org.testng.SkipException;
import org.testng.TestListenerAdapter;
public class CustomListen4 extends TestListenerAdapter {
@Override
public void onTestStart(ITestResult result) {
// Get the parameter 2nd parameter used to invoke the test method
String record = (String) result.getParameters()[1];
// If record contains upload skip the test
if (record.contains("upload")) {
throw new SkipException("Test skipped because of bad parameter - " + record);
}
super.onTestStart(result);
}
}
使用 TestNG 6.14.3
进行测试import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestClass1 {
@DataProvider
public Object[] myDataprovider() {
return new Object[] { "upload", "download" };
}
@Test(dataProvider = "myDataprovider")
public void test(ITestContext itc, String record) {
System.out.println("test execution with parameter - " + record);
}
}
<强>输出强>
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
test execution with parameter - download
Tests run: 2, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 1.321 sec - in TestSuite
正如您所看到的那样,使用参数&#34;上传&#34;未执行且跳过计数为1。