我们可以动态创建testng.xml文件吗?

时间:2016-01-14 07:43:24

标签: java selenium-webdriver testng

我正在尝试创建一个UI,它将显示项目中具有@Test注释的所有方法。这将为用户提供选择在运行时期间要执行的方法的选项。

我的意图是当用户从UI中选择让我们说出Method1和Method3时,代码应该使用Method1和Method3创建一个testng.xml文件并传递该xml文件以供执行。

有没有办法做到这一点?任何帮助深表感谢。感谢。

2 个答案:

答案 0 :(得分:1)

是的,您可以在运行时创建TestNG。

我已经编写了实用程序来读取所有测试用例和Y和N指定的值,描述了如果必须运行该测试用例。并且可以相应地创建testng。您可以读取从UI中选择的值。

以下代码对您有所帮助:

public static void createTestNg() {
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            Document doc = dbBuilder.newDocument();
            Element rootElement = doc.createElement("suite");
            doc.appendChild(rootElement);

            Attr rootNameAttribute = doc.createAttribute("name");
            rootNameAttribute.setValue("Suite");

            Attr rootParallelAttribute = doc.createAttribute("parallel");
            rootParallelAttribute.setValue("none");

            rootElement.setAttributeNode(rootNameAttribute);
            rootElement.setAttributeNode(rootParallelAttribute);

            Element testElement = doc.createElement("test");
            rootElement.appendChild(testElement);

            Attr testNameAttribute = doc.createAttribute("name");
            testNameAttribute.setValue("Test1");
            testElement.setAttributeNode(testNameAttribute);

            Element classesElement = doc.createElement("classes");
            testElement.appendChild(classesElement);

            Fillo fillo = new Fillo();
            Connection con = fillo.getConnection("./testCaseStatus.xls");

            String query = "Select * from Sheet1";
            Recordset recordSet = con.executeQuery(query);

            while (recordSet.next()) {
                if (recordSet.getField("Execute").equals("Y")) {
                    Element classElement = doc.createElement("class");  
                    Attr classNameAttribute = doc.createAttribute("name");
                    classNameAttribute.setValue(recordSet.getField("TestCase"));
                    classElement.setAttributeNode(classNameAttribute);
                    classesElement.appendChild(classElement);
                }
            }
            recordSet.close();
            con.close();
            TransformerFactory transformerFactory = TransformerFactory
                    .newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("./testNg.xml"));
            transformer.transform(source, result);
            // Output to console for testing
            StreamResult consoleResult = new StreamResult(System.out);
            transformer.transform(source, consoleResult);
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FilloException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我使用fillo.jar从excel中读取。您可以根据需要使用任何其他实用程序。

答案 1 :(得分:0)

testng.xml不是强制性的。

您可以拥有自己的IMethodInterceptor实现,然后启动GUI,然后过滤所需的方法。

相关问题