2017-06-26 113 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