TestNG测试用例中有多个方法,如何从命令行参数使用IMethodSelector运行

时间:2018-01-09 07:17:05

标签: maven testng

@Test(groups = { "all", "smoke" })
class task {
    public void sendTask() {
    }

    public void captureTasks() {
    }

    public void captureTaskEvents() {
    }
}

如果我设置了-Dtest_mode=send,请捕获,我们将使用System.getProperty("test_mode")值来确定自定义内容。

现在发送test_mode仅运行sendTasks()方法。

1 个答案:

答案 0 :(得分:0)

您可以通过TestNG中的Beanshell方法选择器轻松完成此操作。这是一个样本。

我的测试类如下所示

package com.rationaleemotions.stackoverflow.qn48163083;

import org.testng.annotations.Test;

public class SampleA {
    @Test
    public void testForAndroid() {
        System.err.println(getClass().getName() + ".testForAndroid() ran");
    }

    @Test
    public void testForWindows() {
        System.err.println(getClass().getName() + ".testForWindows() ran");
    }
}
package com.rationaleemotions.stackoverflow.qn48163083;

import org.testng.annotations.Test;

public class SampleB {
    @Test
    public void testForAndroid() {
        System.err.println(getClass().getName() + ".testForAndroid() ran");
    }

    @Test
    public void testForWindows() {
        System.err.println(getClass().getName() + ".testForWindows() ran");
    }

}

这是我的套件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="4">
    <test name="92" parallel="false">
        <method-selectors>
            <method-selector>
                <script language="beanshell">
                    <![CDATA[
                    methodPattern = System.getProperty("methodPattern");
                    (methodPattern == null || methodPattern.trim().isEmpty()) || testngMethod.getMethodName().contains(methodPattern);
                ]]>
                </script>
            </method-selector>

        </method-selectors>
        <packages>
            <package name="com.rationaleemotions.stackoverflow.qn48163083"/>
        </packages>
    </test>
</suite>

这里我通过JVM参数-DmethodPattern获取要执行的方法名称。如果没有提供任何内容,我们默认运行所有内容。

有关如何在TestNG中使用beanshells的更多信息,请查看我的博文here

以下是使用-DmethodPattern=testForAndroid

执行示例的输出
...
... TestNG 6.13.1 by Cédric Beust (cedric@beust.com)
...
com.rationaleemotions.stackoverflow.qn48163083.SampleA.testForAndroid() ran
com.rationaleemotions.stackoverflow.qn48163083.SampleB.testForAndroid() ran
===== Invoked methods
    SampleA.testForAndroid()[pri:0, instance:com.rationaleemotions.stackoverflow.qn48163083.SampleA@df27fae] 233996206
    SampleB.testForAndroid()[pri:0, instance:com.rationaleemotions.stackoverflow.qn48163083.SampleB@2f0a87b3] 789219251
=====
PASSED: testForAndroid
PASSED: testForAndroid

===============================================
    92
    Tests run: 2, Failures: 0, Skips: 0
===============================================

===============================================
1265_Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================