2017-10-11 6 views
0

J'utilise maven et testng pour mon framework d'automatisation. Dans la façon dont il est mis en œuvre en ce moment, je dois utiliser testng.xml fichier:Passer des variables dans 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> 

J'utilise ces paramètres ci-dessus @BeforeMethod de préciser dans quels navigateurs tests doivent fonctionner.

Y a-t-il un moyen de passer les noms de classe à travers la ligne de commande? J'ai essayé $ {var} et BeanShell, pas de chance jusqu'à maintenant. Merci.

Répondre

2

Vous pouvez le faire en utilisant IAlterSuiteListener.

Vous devez vous assurer que vous utilisez la dernière version de TestNG (6.12 actuellement).

Vous construisez ensuite un écouteur qui implémente org.testng.IAlterSuiteListener et dans lequel vous pouvez fondamentalement faire tout ce que vous souhaitez. Certaines des choses que vous pouvez faire:

  1. Dynamiquement ajouter/supprimer <test> balises dans une balise <suite>
  2. Dynamiquement ajouter/supprimer <class> balises dans vos <test> tags (qui je devine est ce que vous cherchez)
  3. attributs de changement de votre suite, comme threadCount ou le mode parallel etc.,

Voici un échantillon simplifié

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

Pour plus de détails à ce sujet, vous pouvez consulter mon blog here