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

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

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

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

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

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

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


person martin    schedule 16.05.2018    source источник
comment
Привет @martin, даже я столкнулся с той же проблемой, но я нашел решение. вы можете получить решение по этой ссылке: stackoverflow.com/questions/48385176/ Я надеюсь, что это поможет вам.   -  person Suraj Jogdand    schedule 16.05.2018


Ответы (1)


Я знаю два способа доступа к дополнительным файлам на хосте устройства.

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

    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, используя копию плагин ресурсов.

ПОМ:

<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 распакует тестовый пакет на хост-компьютер устройства в каталог / tmp. Если вы экспортируете каталог / tmp на странице specify device state, вы можете экспортировать тот же тестовый пакет, который вы загрузили, используя пользовательские артефакты.

введите здесь описание изображения

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

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

-Джеймс

person jmp    schedule 16.05.2018
comment
Спасибо! В конце концов, я остановился на подходе JAR. github.com/martinschneider/cucumber2junit - person martin; 21.05.2018