如何在 TestNg &java/ Kotlin 中为使用数据提供程序的测试方法设置执行期间的调用计数?

问题描述 投票:0回答:1

我确实参考了此链接并了解

IAnnotationTransformer
.

我有一个场景,我用数据提供者参数化了数据。需要使用调用 Count 对某些数据运行 N 次测试。

我如何利用转换?

@DataProvider(name = "loginData", parallel = false)
fun loginDataProvider(): MutableIterator<String> {
    val loginTestData: ArrayList<String> = ["abc", "def", "xyz"]
    return loginTestData.iterator()
}
    
@Test(dataProvider = "loginData")
fun funloginTest(loginDetails: String){
    print("The value of $loginDetails")
}

如何为参数“def”运行此测试 4 次?

理想情况下,我想在每次从外部源(如 json)运行测试用例之前获取

invocationCount
,并对特定数据运行 N 次测试

我试着看了很多

invocationCount
IAnnotationTransformer
,但找不到确切的答案。解决问题的任何想法或代码片段都可以在这里提供帮助

java selenium-webdriver testng testng-dataprovider invocation
1个回答
0
投票

IAnnotationTransformer
在这种情况下似乎不起作用。 我建议改为修改 DataProvider 方法的行为。

  1. 创建值映射需要覆盖调用计数。
    例如
    { "funloginTest" : { "def" : 4 } }
  2. loginDataProvider
    里面,我们可以通过测试方法名(参考DataProvider的文档)来查看哪些数据需要有不同的调用次数。
class RepeatedRunTest {
    // TODO read it from json
    private val testToCaseInvocationCount = mapOf("funloginTest" to mapOf("def" to 4))

    @DataProvider(name = "loginData", parallel = false)
    fun loginDataProvider(testMethod: Method): MutableIterator<String> {
        println(testMethod.name)
        val loginTestData: Array<String> = arrayOf("abc", "def", "xyz")
        return loginTestData.map { testData ->
            List(
                // repeat if needed
                testToCaseInvocationCount
                    .getOrDefault(testMethod.name, emptyMap())
                    .getOrDefault(testData, 1)
            ) { testData }
        }
            .flatten().toMutableList().listIterator()
    }

    @Test(dataProvider = "loginData")
    fun funloginTest(loginDetails: String) {
        print("The value of $loginDetails")
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.