【问题标题】:Maven jar not able to read the data from TestData sheets from src/test/resources folderMaven jar 无法从 src/test/resources 文件夹中的 TestData 表中读取数据
【发布时间】:2016-02-05 06:48:48
【问题描述】:

我有一个使用 selenium 和 testng 开发的 maven 测试自动化项目。 这就是我对我的框架所做的事情:

  1. 我在 src/main/java 中有主类,在主类中我触发方法来动态创建和运行 testng xml。
  2. 要运行的测试由 src/test/resources 中的 XMLFlag.xls 和 TestNG.xlsx 表确定。
  3. 我能够使用“mvn test”命令成功运行测试脚本。

现在我想通过创建一个 jar 来运行我的整个项目。 我可以使用“maven-assembly-plugin”创建一个包含所有依赖项的 jar,但我无法运行脚本,因为 src/test/resources 中的测试数据表未识别。

我收到如下错误消息:-

错误信息:.\src\test\resources\XMLFlag.xls(系统无法 找到指定的路径)

你们能帮帮我吗! Project Structure

我在我的代码中提到了 XMLFlag.xls 和 TestNG.xlsx 的路径,如下所示:

FileInputStream fis = new FileInputStream(".\\src\\test\\resources\\XMLFlag.xls");
FileInputStream fis = new FileInputStream(".\\src\\test\\resources\\TestNG.xlsx");

我希望 jar 从这些工作表中读取所需的测试数据并执行脚本。

谢谢。

【问题讨论】:

    标签: maven selenium excel-2010 testng


    【解决方案1】:

    首先,在创建 jar 时,只会出现来自src/main/resourcessrc/main/java 的文件。我建议您将资源从src/test/resources 移动到src/main/resources。您还可以配置 maven-jar-plugin 以包含文件,但它需要更多配置。在src/main 中有测试和测试源是可以的。

    其次,一旦装在罐子里,路径src/<whatever>/resources 就变得无关紧要了。您需要使用类加载器加载文件;否则您需要手动解压 jar 并从解压后的位置加载文件。
    由于来自src/main/resources 的文件出现在 jar 文件的根目录中,因此要加载文件,只需这样做

    InputStream stream = YourClassName.class.getResourceAsStream("XMLFlag.xls");
    

    请注意,YourClassName 应替换为您的班级名称。
    另请注意,您不能使用FileInputStream,因为您没有访问文件(只是打包在 jar 文件中的东西)。

    【讨论】:

    • 嗨@Stepan Vavra,非常感谢你。我一直在努力设置它......我按照你的建议进行了更改,我能够运行 jar..但是,我真的很想知道 src/main 中是否有测试数据文件/资源好吗?
    • 嗯,这取决于。 :-) 你也可以从你的测试类(和资源)创建一个test-jar(见maven.apache.org/plugins/maven-jar-plugin/test-jar-mojo.html);但是,这通常会导致问题。如果您不需要将测试放入 jar 中,您可以使用 src/test/java 文件夹存放测试类,使用 src/test/resources 存放测试资源。这仍然有效(例如,如果您通过 Maven 执行测试)。无论如何,在项目 jar 中包含测试类是错误的;应该避免。可以创建额外的 test-support jar 模块,其中测试可以在 src/main.
    • 嗨@stepan vavra,感谢您提供的信息..我还有一些与我的帖子相关的查询..正如你建议的那样,我可以创建一个包含我所有测试和测试数据的 jar它..但我认为这不是 100% 正确的,因为必须为不同的测试数据集运行测试脚本..如果我的测试数据表打包在 jar 中,我将无法运行脚本其他数据集..有解决方法吗?
    • 说实话,我不明白你目前的问题。也许,您可以提出另一个问题或扩展当前问题。您也可以尝试更详细地描述您目前的情况。不过我可以试一试并尝试回答 - 从测试 jar 中排除测试数据怎么样?
    • 嗨@Stepan,我已经在一个新问题“Maven 测试自动化项目”中清楚地解释了我的问题。你能帮帮我吗?谢谢。
    【解决方案2】:

    Maven对src/main/resources和src/test/resources的资源编译和测试做了区别,你有resources scoped test并交到class scope编译:

    1. 解决方法是移动 src/main/resources 中的 2 个文件并调用:

      String file = "src/main/resources/XMLFlag.xls";
      FileInputStream stream1 = new FileInputStream (file1);
      
    2. 第二种更合适的解决方案是不要手动在 src/test/java 和资源中创建一个测试类作为您的类,并使用相同的测试范围,即目标/测试类

      李>

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2015-02-26
      相关资源
      最近更新 更多