【问题标题】:TestNG inherit @Parameters from parent classTestNG 从父类继承@Parameters
【发布时间】:2017-06-27 04:56:31
【问题描述】:

我正在尝试使用 TestNG 为并发跨浏览器测试框架工作。但似乎我无法从父类获取@Parameters 并继续获取

Parameter 'browsername' is required by @Configuration on method setup but has not been marked @Optional or defined
    at org.testng.internal.Parameters.createParameters(Parameters.java:155)
    at org.testng.internal.Parameters.createParameters(Parameters.java:358)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:86)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:199)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305)
    at org.testng.SuiteRunner.run(SuiteRunner.java:254)

TestNG.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="tests" verbose="2" thread-count="2" preserve-order="true">
    <test name="92" parallel="false" preserve-order="true">
        <classes>
            <class name="com.javacodegeeks.testng.maven.BaseTest"/>
            <class name="com.javacodegeeks.testng.maven.ChildTest"/>
            <parameter name="browsername" value="chrome"/>
        </classes>
    </test>
    <test name="93" parallel="false" preserve-order="true">
        <classes>
            <class name="com.javacodegeeks.testng.maven.BaseTest"/>
            <class name="com.javacodegeeks.testng.maven.ChildTest"/>
            <parameter name="browsername" value="firefox"/>
        </classes>
    </test>
</suite>

基础测试

public class BaseTest extends Assert {

    protected String browser;

    @BeforeClass
    @Parameters({"browsername"})
    public void setup(String browsername) {
        System.err.println("Browser name in @BeforeClass is " + browsername);
        this.browser = browsername;
    }
}

儿童测试

public class ChildTest extends BaseTest {

    @Test
    public void test() {
        System.out.println(browser);
    }
}

我没有找到有关如何使其工作的足够信息,所以如果您有任何想法,我想听听。

已检查但信息不足: TestNG Annotations in a Superclass

【问题讨论】:

    标签: java parameters testng parallel-testing


    【解决方案1】:

    &lt;test&gt; 节点上使用&lt;parameter&gt; 节点重试(BaseTest 应该没用):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="1265_Suite" parallel="tests" verbose="2" thread-count="2" preserve-order="true">
        <test name="92" parallel="false" preserve-order="true">
            <parameter name="browsername" value="chrome"/>
            <classes>
                <!--class name="com.javacodegeeks.testng.maven.BaseTest"/-->
                <class name="com.javacodegeeks.testng.maven.ChildTest"/>
            </classes>
        </test>
        <test name="93" parallel="false" preserve-order="true">
            <parameter name="browsername" value="firefox"/>
            <classes>
                <!--class name="com.javacodegeeks.testng.maven.BaseTest"/-->
                <class name="com.javacodegeeks.testng.maven.ChildTest"/>
            </classes>
        </test>
    </suite>
    

    【讨论】:

    • 主要思想是对所有测试套件使用继承(BaseTest)。如果我要从这里删除 BaseTest,那将毫无意义。
    • 所有测试类都将扩展 BaseTest,对吧?因此,TestNG 将通过自省来检测它。这就是为什么将它放入套件文件中都没有效果的原因。
    • 顺便说一句,我的解决方案可以解决您的参数问题吗?
    • 是的,您的解决方案似乎有效,但我这边可能还有另一个问题导致此错误。
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2015-03-14
    相关资源
    最近更新 更多