访问 AWS 设备场上 Appium 测试的附加测试文件

Access additional test files for Appium tests on AWS device farm

我正在 运行在 AWS 设备场上使用 JUnit 进行 Appium 测试。有没有办法上传额外的测试文件并从我的代码中访问它们?所以基本上,我可以访问 运行Appium 测试的容器的文件系统吗?

我的 JAR 文件中有必要的文件(根据 AWS 的要求,它位于一个 zip 文件中),但我不确定在测试期间 AWS 是否以及在哪里从这个 JAR 中提取文件 运行(可能不会)。

有一个名为 Add extra data 的选项可用于上传文件,但我不确定如何从我的代码中访问它们。文档指出:

For iOS, the extra data is actually inside the app installation directory [...] On Android, we unarchive it in a root directory of the sdcard.

这是否意味着我需要从 phone 中提取文件(Appium 可以做到这一点)并将它们放在某个临时文件夹中?我也可以尝试从 git 存储库或网络共享中提取文件,但我希望有一种更简单的方法来访问文件系统。另一个问题是是否有一些限制根本不允许我写入文件系统。

有人有这方面的经验吗?

我知道有两种方法可以访问设备主机上的其他文件。

  1. 将其包含在 jar 中(正如您已经在做的那样),然后使用当前线程访问文件。

    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();
    }
    
  2. 使用 copy resources plugin.

  3. 将其包含在上传到 Device Farm 的 zip 文件中

POM:

<build>
  <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/dependency-resources</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/test/resources</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <finalName>zip-with-dependencies</finalName>
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptors>
                                <descriptor>src/main/assembly/zip.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
</plugins>
</build>

ZIP.xml:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 " 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0    http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>zip</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>./</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>./</outputDirectory>
            <includes>
                <include>/dependency-jars/</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>./</outputDirectory>
            <includes>
                <include>/dependency-resources/</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

然后我们可以使用路径 ./dependency-resources/somefilename

访问打包在上传到 Device Farm 的 zip 中的其他文件

Device Farm的SDK会将测试包解压到Device宿主机的/tmp目录下。如果您导出 specify device state 页面上的 /tmp 目录,您可以导出使用 custom artifacts 上传的相同测试包。

您提到的 extra data 功能只会将附加文件放入设备中,而不是设备主机 运行 测试。还使用 appium 来拉和推文件,我相信目前只适用于模拟器而不适用于真实设备。

https://discuss.appium.io/t/pull-file-from-ios-device/1541/3

-詹姆斯