Как создать динамический TestNG.xml с различными значениями параметров для каждого тестового тега - PullRequest
0 голосов
/ 07 ноября 2019

Код ниже предназначен для создания динамического testng.xml. Есть три компании A, B, C, которые являются параметрами для каждого тестового тега, но параметр A добавляется для всех трех тестовых тегов. Как решить это? Мне нужно сгенерировать XML, чтобы один тестовый тег имел значение параметра A, второй - как B, а третий тестовый тег - значение параметра C.

public class TestRunner {
    public static void main(String[] args) {
        List < String > companyNamesParameters = new ArrayList < >();
        BufferedReader br = null;

        try {
            br = new BufferedReader(new FileReader("C:\\CompanyNames\\CompanyNames.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                companyNamesParameters.add(line);
            }
        } catch(IOException e) {
            e.printStackTrace();
        }

        XmlSuite xmlSuite = new XmlSuite();
        xmlSuite.setName("ParallelSuite");
        xmlSuite.setVerbose(1);
        xmlSuite.setParallel(XmlSuite.ParallelMode.TESTS);
        xmlSuite.setThreadCount(companyNamesParameters.size());

        //for class tag 
        XmlClass newClaimClass = new XmlClass(SampleTests.class);
        List < XmlClass > xmlClassList = new ArrayList < XmlClass > ();
        xmlClassList.add(newClaimClass);

        Map < String,
        String > companyName = new HashMap < String,
        String > ();
        List < XmlTest > testList = new ArrayList < XmlTest > ();

        //for loop to generate the xml 
        for (int i = 0; i < companyNamesParameters.size(); i++) {
            testList.add(i, new XmlTest(xmlSuite));
            testList.get(i).setName("TestCase" + i);
            testList.get(i).setParallel(XmlSuite.ParallelMode.NONE);
            testList.get(i).setThreadCount(1);
            testList.get(i).setXmlClasses(xmlClassList);
            System.out.println("Company name  is " + companyNamesParameters.get(i));
            companyName.put("CompanyName", companyNamesParameters.get(i));
            testList.get(i).setParameters(companyName);
        }

        //to generate the xml suite
        TestNG testng = new TestNG();
        List < XmlSuite > xmlSuiteList = new ArrayList < XmlSuite > ();
        xmlSuiteList.add(xmlSuite);
        testng.setXmlSuites(xmlSuiteList);

        // write the generated code in .xml file 
        FileWriter writer;
        try {
            writer = new FileWriter(new File("TestRunner.xml"));
            writer.write(((XmlSuite) xmlSuite).toXml());
            writer.flush();
            writer.close();
            System.out.println(new File("TestRunner.xml").getAbsolutePath());
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

сгенерированный TestNG.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="3" name="ParallelSuite" parallel="tests">
    <test thread-count="1" name="TestCase0">
        <parameter name="CompanyName" value="A"/>
        <classes>
            <class name="SampleTests"/>
        </classes>
    </test>
    <!-- TestCase0 -->
    <test thread-count="1" name="TestCase1">
        <parameter name="CompanyName" value="A"/>
        <classes>
            <class name="SampleTests"/>
        </classes>
    </test>
    <!-- TestCase1 -->
    <test thread-count="1" name="TestCase2">
        <parameter name="CompanyName" value="A"/>
        <classes>
            <class name="SampleTests"/>
        </classes>
    </test>
</suite> 

В приведенном выше XML-файле значение во всех тестовых тегах равно A, а не A, B, C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...