【问题标题】:TESTNG | call testng.xml file from main method from inside a runnable jar测试 |从可运行 jar 内部的 main 方法调用 testng.xml 文件
【发布时间】:2020-02-25 09:39:20
【问题描述】:

我是 testng + maven 的新手,我需要使用可运行的 jar 来运行脚本。该套件需要为多个区域执行。区域名称在执行 jar 时作为参数传递。 现在我的要求是根据提供的区域名称在多个 testng.xml 文件之间切换。 所有的 testng.xml 文件都放在资源文件夹 --> "resources/testngA.xml" 和 "resources/testngB.xml" 中。 当我从 eclipse 运行脚本时,它工作正常,但是当我尝试通过 runnable.jar 执行相同的脚本时,它显示 java.io.FileNotFoundException 异常。谁能帮我解决这个问题。

public class TestRunner {

    static TestNG testng;
    static List<String> suites;
    public static void main(String[] args) {
        String xmlFileName = "";
        List<XmlSuite> suite;
        String region = arg[0];
        try
        {
            if(region.equals("A")){
                xmlFileName = "resources/A_TestNG.xml";
            }else if(region.equals("B")){
                xmlFileName = "resources/B_TestNG.xml";
            }else{
                System.out.println("No matching region found")
            }
            suite = (List <XmlSuite>)(new Parser(xmlFileName).parse());
            testng.setXmlSuites(suite);
            testng.run();
        }
        catch (ParserConfigurationException e)
        {
            e.printStackTrace();
        }
        catch (SAXException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java maven testng


    【解决方案1】:

    当您处理资源时,您应该使用以下方法:

    1) 获取资源 URI

    URI aTestNgURI = TestRunner.class.getClassLoader().getResource("A_TestNG.xml").toURI();
    

    2) 获取文件路径

    String aTestNgFilePath = new File(aTestNgURI).getAbsolutePath();
    

    【讨论】:

    • 我尝试了同样的方法,但在 com.XXX.testcases.TestRunner.main(TestRunner.java:30) 的线程“main”java.lang.NullPointerException 中出现异常代码片段如下 URI aTestNgURI = TestRunner.class.getClassLoader().getResource("resources/A_TestNG.xml").toURI();字符串 aTestNgFilePath = new File(aTestNgURI).getAbsolutePath(); suite = (List )(new Parser(aTestNgFilePath).parse()); testng.setXmlSuites(套件); testng.run();
    • @Aswathi 在您的代码中我看不到您在哪里实例化您的 testng 字段。试试static TestNG testng = new TestNG() 而不是 ``static TestNG testng;`
    • Iam 为下面的行“TestRunner.class.getClassLoader().getResource("resources/A_TestNG.xml").toURI();"获取 Nullpointer 异常并且 testng 变量仅声明为静态
    • 关于你不应该使用resources/的异常。仅使用文件名。关于静态字段:您必须为该字段分配一个实例,无论它是静态的还是非静态的。
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 2014-06-09
    • 2015-08-21
    • 2021-01-06
    • 2013-05-04
    • 1970-01-01
    • 2017-08-19
    • 2021-05-24
    相关资源
    最近更新 更多