我的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
有人可以建议解决方案如何读取位于资源中的属性文件吗?
答案 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目录,在此页面上我们可以告诉设备场导出我们想要的任何目录
然后,当测试完成后,我们可以点击客户工件链接并获取该导出的zip。