如果提供给测试的数据包含某些值,请不要运行testng测试方法

时间:2018-04-18 06:39:47

标签: testng

如果数据提供者向测试方法提供了一些异常数据,我想创建@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方法中?

1 个答案:

答案 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。