目前我正在使用这样的数据提供程序
static Object[][] dataProvider() {
return new Object[][]{
[a],
[b],
[c],
}
}
在 build.gradle 中有这样的 testNG 选项,
useTestNG() {
options ->
options.parallel = 'tests'
options.threadCount = 3
}
并进行这样的测试,
@Test(dataProvider = "dataProvider", dataProviderClass = RunIdProvider.class)
void testFunction(String variable) {
// do something
}
这样做可以让我并行启动 3 个测试,每个测试使用数据 a 或 b 或 c。
我想在 jenkins 中传入一个字符串参数,比如 -
a,b,c
并且应该从 testNG 并行启动 3 个测试,每个测试使用值 a 或 b 或 c 之一。
更具体地说,启动的并行测试数量应基于字符串中逗号分隔值的数量 - 这意味着如果我传入 a、b、c、d - 它应该并行启动 4 个测试。
这可能吗?以前有人这样做过吗?非常感谢任何例子。谢谢!
您可能正在寻找这样的东西:
注:
csv_values
的参数,并仅在找到时尝试将其解析为 csv。如果未找到,则默认为某些默认值。String
以下是包含能够将 csv 转换为数据集的动态数据提供程序的测试类:
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class SampleTestCase {
@DataProvider(name = "dp", parallel = true)
public static Object[][] dataProvider(ITestContext context) {
Map<String, String> parameters = context.getCurrentXmlTest().getAllParameters();
String value = Optional.ofNullable(parameters.get("csv_values")).orElse("");
if (value.isEmpty()) {
return new Object[][]{
{"z"}
};
}
List<String> csv = Arrays.stream(value.split(",")).collect(Collectors.toList());
Object[][] result = new Object[csv.size()][1];
AtomicInteger index = new AtomicInteger(0);
csv.forEach(it -> result[index.getAndIncrement()][0] = it);
return result;
}
@Test(dataProvider = "dp")
public void testMethod(String value) {
System.err.println("Thread Id: " + Thread.currentThread().getId() + ", Value = " + value);
}
}
套件文件如下所示:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="78111465_suite" verbose="2">
<parameter name="csv_values" value="a,b,c,d,e,f"/>
<test name="78111465_test">
<classes>
<class name="com.rationaleemotions.so.qn78111465.SampleTestCase"/>
</classes>
</test>
</suite>
这是执行输出
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
...
... TestNG 7.9.0 by Cédric Beust ([email protected])
...
Thread Id: 20, Value = f
Thread Id: 19, Value = e
Thread Id: 15, Value = a
Thread Id: 17, Value = c
Thread Id: 16, Value = b
Thread Id: 18, Value = d
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("f")
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("e")
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("b")
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("d")
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("c")
PASSED: com.rationaleemotions.so.qn78111465.SampleTestCase.testMethod("a")
===============================================
78111465_test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
78111465_suite
Total tests run: 6, Passes: 6, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0