2017-06-26 112 views
0

我试图去使用TestNG为并发跨浏览器测试框架工作一个存根。但似乎我无法摆脱父类@参数并不断得到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> 

BaseTest

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; 
    } 
} 

ChildTest

public class ChildTest extends BaseTest { 

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

我没有找到足够的信息关于如何使这个工作,所以如果你有任何想法,我想听听他们。

已经检查,但没有足够的信息: TestNG Annotations in a Superclass

回答

0

<parameter>节点再次尝试<test>节点上(和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> 
+0

的主要思想是使用继承(BaseTest)为所有测试套件。如果我从这里删除BaseTest,它将是无意义的。 –

+0

所有测试类都将扩展BaseTest,对吧?所以,TestNG会通过自检来检测它。这就是为什么让它进入套件文件不会起作用的原因。 – juherr

+0

顺便说一下,我的解决方案是修复你的参数问题吗? – juherr