簡體   English   中英

以編程方式使用TestNG運行特定的測試

[英]Running specific tests with TestNG programmatically

在執行測試時,我會填充一個failTests列表。 我想在套件完成時以編程方式重新運行這些測試。 根據TestNG文檔,我實現了以下邏輯:

public void retrySuiteVirtXml(){
    TestListenerAdapter tla = new TestListenerAdapter();
    TestNG tng = new TestNG();
    tng.addListener(tla);

    XmlSuite suite = new XmlSuite();
    suite.setName("Retry Suite");

    for (ITestResult testResult : failedTests){
        XmlTest xmlTest = new XmlTest();
        xmlTest.setSuite(suite);

        String newTestName = testResult.getName();
        xmlTest.setName(newTestName);

        List<XmlClass> xmlClasses = new ArrayList<>();
        xmlClasses.add(new XmlClass(testResult.getTestClass().getName()));
        xmlTest.setXmlClasses(xmlClasses);

        xmlTest.getClasses().addAll(xmlClasses);
        suite.addTest(xmlTest);
    }

    List<XmlSuite> suites = new ArrayList<>();
    suites.add(suite);
    tng.setXmlSuites(suites);
    //tng.run();
    tng.runSuitesLocally();

}

但是,此塊將運行出現在失敗測試類中的每個測試。 我無法弄清楚如何使TestNG僅運行失敗的測試(列出failedTests)。

任何幫助都感激不盡。 謝謝。

我認為您將測試與方法混淆了。 您應該基於失敗的測試來構建包含的方法。 您可以先嘗試將類映射到其方法,然后將這些類添加到單個Test中。 下面的核心算法:

 Map<String, List<XmlInclude>> classToMethodsMap = new HashMap<String, List<XmlInclude>>();
        for (ITestResult testResult : failedTests){

            //Create map of failed classes to methods
            if(classToMethodsMap.get(testResult.getTestClass().getName()) == null){
                List<XmlInclude> methods = new ArrayList<XmlInclude>();
                methods.add(new XmlInclude(testResult.getMethod().getMethodName()));
                classToMethodsMap.put(testResult.getTestClass().getName(),methods);
            }else{
                classToMethodsMap.get(testResult.getTestClass().getName()).add(new XmlInclude(testResult.getTestClass().getName()));
            }
        }

        List<XmlClass> xmlClasses = new ArrayList<XmlClass>();
        for(String className : classToMethodsMap.keySet()){
            XmlClass  xmlClassToAdd =new XmlClass(className);
            xmlClassToAdd.setIncludedMethods(classToMethodsMap.get(className));
            xmlClasses.add(xmlClassToAdd);

        }
        xmlTest.setXmlClasses(xmlClasses);
        suite.addTest(xmlTest);

您可以在XmlClass上使用setExcludedMethods來過濾方法。

在沒有特殊需要的情況下,只需一個XmlTest就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM