我有一个参数化的junit测试套件,我使用maven运行,在Jenkins中使用以下命令:
export SUITECONF=SuiteConfig*
for f in src/test/resources/$SUITECONF ; \
do export SUITECONF=$(basename "$f" | cut -d. -f1) && \
mvn test -Dtest=TestSuite#testCase -q 2>/dev/null; \
done
扩展了“src / test / resources / SuiteConfig *”中的SuiteConfig *文件名,并且确实如下:
export SUITE_CONF=suiteconf1
mvn test -Dtest=TestSuite#testCase -q 2>/dev/null
export SUITE_CONF=suiteconf2
mvn test -Dtest=TestSuite#testCase -q 2>/dev/null
export SUITE_CONF=suiteconfN
mvn test -Dtest=TestSuite#testCase -q 2>/dev/null
...
但是具有执行输出的输出文件“target / surefire-reports / com.package.suites.TestSuite.txt”会被每个mvn命令覆盖,所以我需要一种方法让输出像如果所有测试都在同一次运行中执行。
我找到的快速解决方法是使用try / catch并将测试传递/失败打印到System.out,并且正在考虑使用Jenkins“Log Parser Plugin”解析输出。
@Test
public void testCase() {
try {
// Test config
...
// Test data
...
// Test case
...
System.out.println(operator + "#" + testName + " <<< TEST PASS");
} catch (Exception e) {
System.out.println(operator + "#" + testName + " <<< TEST FAILED");
e.printStackTrace();
throw (e);
}
}
但想知道是否有更好的方法来做这一切。也许我可以有一个输出:
TestConfig1#testCase1 <<< TEST PASS
TestConfig1#testCase2 <<< TEST PASS
TestConfig1#testCaseN <<< TEST PASS
TestConfig2#testCase1 <<< TEST PASS
TestConfig2#testCase2 <<< TEST PASS
TestConfig2#testCaseN <<< TEST PASS
TestConfigN#testCase1 <<< TEST FAILED
TestConfigN#testCase2 <<< TEST FAILED
TestConfigN#testCaseN <<< TEST FAILED
提前致谢