Доступ к дополнительным тестовым файлам для тестов Appium на ферме устройств AWS - PullRequest
0 голосов
/ 16 мая 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 16 мая 2018

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

  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 с помощью плагина copy resources .

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-файл, загруженный на устройствоФерма, используя путь ./dependency-resources/somefilename

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

enter image description here

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

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

-James

...