无法读取aws设备场中的属性文件

时间:2018-03-22 11:51:40

标签: amazon-web-services junit appium aws-device-farm


我的Appium + JUnit测试在本地工作得非常好,但在aws上它无法找到属性文件。我的测试放在src/test/resources/locale下,├── app-0.1-tests.jar ├── app-0.1.jar └── dependency-jars ├── ... 下的测试中使用的属性文件。 Zip依赖内容:

app-0.1-tests.jar

├── META-INF │ ├── MANIFEST.MF │ ├── maven │ ├── .... ├── com │ ├── .... └── locale ├── en_EN.properties 内容:

file:/tmp/scratchcC4yMz.scratch/test-packagefQ2euI/app-0.1-tests.jar!/locale/en_EN.properties

不幸的是,当我尝试加载属性文件时,我有一个IOException - 在位置找不到文件: File file = new File(ClassName.class.getResource("/locale/en_EN.properties").getPath()); try (InputStream inputStream = new FileInputStream(file.getPath()); InputStreamReader streamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"))) { Properties properties = new Properties(); properties.load(streamReader); return properties; } catch (IOException e) { System.err.println("Properties file not found: " + file.getPath()); }

我尝试以两种方式加载它们,每次我遇到同样的问题。在当地,一切都像一个魅力。代码示例:

ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("/locale/en_EN.properties");

或使用类加载器:

select
    s.Id as studentId,
    s.Name as studentName,
    c.Id as certId,
    c.name as certName
from 
    #student s
cross join #cert c
left join #studentCert sc on s.Id = sc.studentId and c.Id = sc.certId
where
    sc.studentId is null

有人可以建议解决方案如何读取位于资源中的属性文件吗?

1 个答案:

答案 0 :(得分:1)

这是我做的,似乎有效:

/**
 * Rigourous Test :-)
 */
public void testApp()
{
    //taken from https://www.mkyong.com/java/java-properties-file-examples/
    //create properties object
    Properties prop = new Properties();
    InputStream input = null;
    //load in the properties file from src/test/resources 
    try {

        input = Thread.currentThread().getContextClassLoader().getResourceAsStream("myproperties.properties");

        // load a properties file
        prop.load(input);

        // get the property value and print it out
        System.out.println(prop.getProperty("devicefarm"));

    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

以下是设备场的java输出:

[TestNG] Running:
  Command line suite

helloWorld

以下是我的属性文件的内容:

devicefarm=helloWorld

在我当地的测试中似乎也有效:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.devicefarm.www.AppTest
helloWorld
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

在属性文件是包之后,我们似乎无法像在本地通过maven一样在java中引用它。如果我们尝试使test-jar可执行并运行jar,我认为会发生同样的事情。

编辑:请参阅此SO帖子,了解类加载器和线程加载器之间的区别。

https://stackoverflow.com/a/22653795/4358385

关于导出tmp目录,在此页面上我们可以告诉设备场导出我们想要的任何目录

exporting the tmp directory

然后,当测试完成后,我们可以点击客户工件链接并获取该导出的zip。

enter image description here