Доступ к дополнительным тестовым файлам для тестов Appium на ферме устройств AWS

Я запускаю тесты Appium с JUnit на ферме устройств AWS. Есть ли способ загрузить дополнительные тестовые файлы и получить к ним доступ из моего кода? В общем, могу ли я получить доступ к файловой системе контейнера, в котором выполняются тесты Appium?

У меня есть необходимые файлы в моем файле JAR (который находится внутри zip согласно требованиям AWS), но я не уверен, извлекает ли и где AWS файлы из этого JAR во время тестового прогона (вероятно, нет).

Есть опция под названием Add extra data который может быть использован для загрузки файлов, но я не уверен, как получить к ним доступ из моего кода. В документации говорится:

Для iOS дополнительные данные на самом деле находятся в каталоге установки приложения [...] На Android мы разархивируем их в корневой каталог SDCard.

Значит ли это, что мне нужно будет извлечь файлы из телефона (Appium может сделать это) и поместить их в какую-нибудь временную папку? Я также мог бы попытаться извлечь файлы из репозитория git или из общего ресурса, но я надеялся, что будет более простой способ доступа к файловой системе. Другая проблема заключается в том, есть ли какое-то ограничение, которое вообще не позволило бы мне писать в файловую систему.

У кого-нибудь есть опыт с этим?

1 ответ

Решение

Есть два способа получения доступа к дополнительным файлам на хосте устройства.

  1. Включите его в банку (как вы уже делаете), а затем получите доступ к файлам, используя текущий поток. ТАК Пост, где я это сделал

    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. Включите его в zip-файл, загруженный в Device Farm с помощью плагина копирования ресурсов.

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>

Затем мы можем получить доступ к дополнительным файлам, упакованным в zip-архив, загруженный в Device Farm, используя путь ./dependency-resources/somefilename

SDK Device Farm разархивирует тестовый пакет на хост-компьютер Device в каталог /tmp. Если вы экспортируете каталог /tmp в specify device state На странице вы можете экспортировать тот же тестовый пакет, который вы загрузили, используя пользовательские артефакты.

extra data Функция, о которой вы упомянули, будет помещать в устройство только дополнительные файлы, а не хост, на котором выполняются тесты. Также я полагаю, что использование appium для загрузки и отправки файлов работает только на симуляторах, а не на реальных устройствах.

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

-Джеймс

Другие вопросы по тегам