首页 > 解决方案 > 在 AWS 设备场上访问 Appium 测试的其他测试文件

问题描述

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

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

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

对于 iOS,额外的数据实际上在应用程序安装目录中 [...] 在 Android 上,我们将其解压缩到 sdcard 的根目录中。

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

有人对这个有经验么?

标签: appiumaws-device-farm

解决方案


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

  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. 将其包含在使用复制资源插件上传到 Device Farm 的 zip 中。

聚甲醛:

<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>

邮编.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>

然后,我们可以使用该路径访问打包在上传到 Device Farm 的 zip 中的其他文件./dependency-resources/somefilename

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

在此处输入图像描述

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

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

-詹姆士


推荐阅读