你或許應該開始探索方法選擇的是TestNG的提供給您用於此目的的BeanShell的方式。
有時候,我寫了一篇博文,談論如何在TestNG中使用Beanshell表達式。您可以閱讀更多關於它的文章here並參考官方的TestNG文檔here。
引述TestNG的文檔,
TestNG的定義以下變量爲了您的方便:
- java.lang.reflect.Method中的方法:目前的測試方法。
- org.testng.ITestNGMethod testng方法:當前的測試方法。
- java.util.Map組:當前測試方法所屬組的映射。
所以只用你的榜樣,我繼續創建一套XML文件看起來像下面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="false" verbose="2">
<test name="92" parallel="false" preserve-order="true">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[whatGroup = System.getProperty("groupToRun");
(groups.containsKey(whatGroup) || testngMethod.getGroups().length ==0);
]]>
</script>
</method-selector>
</method-selectors>
<classes>
<class name="com.rationaleemotions.stackoverflow.MyTest1"/>
<class name="com.rationaleemotions.stackoverflow.MyTest2"/>
</classes>
</test>
</suite>
我用如下的Maven通過命令提示符下運行:(測試類基本上是你在你的問題分享)
mvn clean test -DsuiteXmlFile=dynamic_groups.xml -DgroupToRun=group2
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
...
... TestNG 6.11 by Cédric Beust ([email protected])
...
test1 called
test3 called
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.377 sec - in TestSuite
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
我在這裏有一個問題。如果我提供-DgroupToRun = group1,group2,它會起作用嗎? –
你是什麼意思,它不適合你?你能幫忙詳細說明什麼不適合你嗎? –
而且,如果您嘗試指定多個組,因爲我在我的答案中共享的beanshell只處理1組,所以它不會工作。您需要增強它以支持多個組。 –