2017-10-11 151 views
0

我爲我的自動化框架使用maven和testng。在它的實現方式,現在我必須使用的testng.xml文件:將變量傳遞到testng.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite thread-count="40" name="Suite" parallel="tests"> 

    <test name="Test"> 
    <parameter name="browser" value="chrome"/> 
    <parameter name="version" value="latest"/> 
    <parameter name="os" value="windows 10"/> 
    <classes> 
    <class name="com.package.tests.TestApp"/> 
    </classes> 
    </test> 

    <test name="Test"> 
    <parameter name="browser" value="chrome"/> 
    <parameter name="version" value="latest"/> 
    <parameter name="os" value="windows 10"/> 
    <classes> 
     <class name="com.package.tests.TestApp"/> 
    </classes> 
    </test> 

</suite> 

我使用上述@BeforeMethod這些參數,以指定瀏覽器測試應該運行。

有什麼辦法可以通過類名低谷命令行? 我試過$ {var}和BeanShell,至今沒有運氣。 謝謝。

回答

2

您可以通過利用IAlterSuiteListener來做到這一點。

您需要確保您使用的是TestNG的最新發布版本(當前爲6.12)。

然後,你建立一個監聽器,它實現了org.testng.IAlterSuiteListener,在它內部,你基本上可以做任何你想做的事情。有些你可以做的事情是:

  1. 動態添加/ A <suite>標籤內刪除<test>標籤
  2. 動態添加/刪除您<test>標籤內<class>標籤(這我猜是你在找什麼)
  3. 您的套房,如threadCountparallel模式等的變化屬性,

下面是一個簡化的樣品

public static class Listener implements IAlterSuiteListener { 

    @Override 
    public void alter(List<XmlSuite> suites) { 
     XmlSuite suite = suites.get(0); 
     //Pass the value as comma separated via JVM argument -Dclasses=com.foo.bar,com.bar.foo 
     String classNames = System.getProperty("classes", ""); 
     String[] classes = classNames.split(","); 
     if (classes.length != 0) { 
      XmlTest test = new XmlTest(suite); 
      test.setName("another_test"); 
      List<XmlClass> xmlClasses = new ArrayList<>(); 
      for (String className : classNames.split(",")) { 
       XmlClass xmlClass = new XmlClass(className.trim()); 
       xmlClasses.add(xmlClass); 
      } 
      test.setClasses(xmlClasses); 
      suite.setTests(Collections.singletonList(test)); 
     } 
    } 
} 

有關更多細節,你可以參考我的博客文章here