將 Appium 測試與 Device Farm 整合 - AWS Device Farm

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Appium 測試與 Device Farm 整合

使用下列指示將 Appium 測試與 AWS Device Farm 整合。如需在 Device Farm 中使用 Appium 測試的詳細資訊,請參閱 Appium 測試和 AWS Device Farm

設定 Appium 測試套件

使用以下指示來設定您的測試套件。

Java (JUnit)
  1. 修改pom.xml以將封裝設定為JAR檔案:

    <groupId>com.acme</groupId> <artifactId>acme-myApp-appium</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
  2. 修改 pom.xml 以使用 maven-jar-plugin 將測試建置至 JAR 檔案。

    下列外掛程式會將測試來源程式碼 (src/test目錄中的任何項目) 建置為 JAR 檔案:

    <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>
  3. 修改 maven-dependency-pluginpom.xml使用 建置相依性作為JAR檔案。

    下列外掛程式會將您的相依性複製到 dependency-jars 目錄中:

    <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>
  4. 將下列XML組件儲存至 src/main/assembly/zip.xml

    以下是XML組件定義,設定後,會指示 Maven 建置 .zip 檔案,其中包含建置輸出目錄根目錄和dependency-jars目錄中的所有內容:

    <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> </fileSets> </assembly>
  5. 修改pom.xml為使用 maven-assembly-plugin 將測試和所有相依性封裝到單一 .zip 檔案。

    下列外掛程式每次執行時,都會使用上述組件在建置輸出目錄中建立名為 zip-with-dependenciesmvn package .zip 檔案:

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

如果您收到錯誤,指明 1.3 中不支援註釋,請將以下內容新增至 pom.xml

<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>
Java (TestNG)
  1. 修改pom.xml以將封裝設定為JAR檔案:

    <groupId>com.acme</groupId> <artifactId>acme-myApp-appium</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
  2. 修改 pom.xml 以使用 maven-jar-plugin 將測試建置至 JAR 檔案。

    下列外掛程式會將測試來源程式碼 (src/test目錄中的任何項目) 建置為 JAR 檔案:

    <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>
  3. 修改 maven-dependency-pluginpom.xml使用 建置相依性作為JAR檔案。

    下列外掛程式會將您的相依性複製到 dependency-jars 目錄中:

    <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>
  4. 將下列XML組件儲存至 src/main/assembly/zip.xml

    以下是XML組件定義,設定後,會指示 Maven 建置 .zip 檔案,其中包含建置輸出目錄根目錄和dependency-jars目錄中的所有內容:

    <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> </fileSets> </assembly>
  5. 修改pom.xml為使用 maven-assembly-plugin 將測試和所有相依性封裝到單一 .zip 檔案。

    下列外掛程式每次執行時,都會使用上述組件在建置輸出目錄中建立名為 zip-with-dependenciesmvn package .zip 檔案:

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

如果您收到錯誤,指明 1.3 中不支援註釋,請將以下內容新增至 pom.xml

<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>
Node.JS

若要封裝 Appium Node.js 測試並將其上傳至 Device Farm您必須在本機機器上安裝下列項目:

  • Node Version Manager (nvm)

    請使用此工具開發和封裝測試,以便在測試套件中排除不必要的相依性。

  • Node.js

  • npm-bundle (全域安裝)

  1. 確認 nvm 已存在

    command -v nvm

    您應該會在輸出中看到 nvm

    如需詳細資訊,請參閱 上的 nvm GitHub。

  2. 執行此命令以安裝 Node.js:

    nvm install node

    您可以指定特定版本的 Node.js:

    nvm install 11.4.0
  3. 確認使用的是正確版本的節點:

    node -v
  4. 全域安裝 npm-bundle

    npm install -g npm-bundle
Python
  1. 強烈建議您設定 Python virtualenv 來進行開發和封裝測試,這樣您的應用程式套件就不會包含不必要的相依性。

    $ virtualenv workspace $ cd workspace $ source bin/activate
    提示
    • 請不要使用 --system-site-packages 選項建立 Python virtualenv,因為它會從全域 site-packages 目錄繼承套件。這可能會導致您的虛擬環境包含測試不需要的相依性。

    • 您還必須驗證您的測試未使用相依於原生程式庫的相依性,因為這些原生程式庫可能不會出現在執行測試的執行個體上。

  2. py.test 安裝到虛擬環境中。

    $ pip install pytest
  3. 在您的虛擬環境中安裝 Appium Python 用戶端。

    $ pip install Appium-Python-Client
  4. 除非您在自訂模式下指定不同的路徑,否則 Device Farm 預期您的測試會儲存在 中tests/。您可以使用 find 來顯示資料夾內的所有檔案:

    $ find tests/

    確認這些檔案包含您想要在 Device Farm 上執行的測試套件

    tests/ tests/my-first-tests.py tests/my-second-tests/py
  5. 從虛擬環境工作區資料夾中執行此命令,以顯示測試的清單而不予以執行。

    $ py.test --collect-only tests/

    確認輸出顯示您想要在 Device Farm 上執行的測試。

  6. 清理您的測試資料夾下的所有快取檔案:

    $ find . -name '__pycache__' -type d -exec rm -r {} + $ find . -name '*.pyc' -exec rm -f {} + $ find . -name '*.pyo' -exec rm -f {} + $ find . -name '*~' -exec rm -f {} +
  7. 在工作區中執行下列命令,以產生 requirements.txt 檔案:

    $ pip freeze > requirements.txt
Ruby

若要封裝 Appium Ruby 測試並將其上傳至 Device Farm,您必須在本機機器上安裝下列項目:

  • Ruby 版本管理器 (RVM)

    請使用此命令列工具開發和封裝測試,以便在測試套件中排除不必要的相依性。

  • Ruby

  • Bundler (此 gem 套件通常會隨 Ruby 安裝)。

  1. 安裝所需的金鑰、 RVM和 Ruby。如需指示,請參閱在 RVM網站上安裝 RVM

    在安裝完成時,藉由登出再重新登入,來重新載入終端機。

    注意

    RVM 僅載入為 bash Shell 的函數。

  2. 確認已正確安裝 rvm

    command -v rvm

    您應該會在輸出中看到 rvm

  3. 如果您想要安裝 Ruby 的特定版本,例如 2.5.3,請執行下列命令:

    rvm install ruby 2.5.3 --autolibs=0

    確認使用的是要求的 Ruby 版本:

    ruby -v
  4. 設定 套件來編譯所需測試平台的套件:

    bundle config specific_platform true
  5. 更新您的 .lock 檔案,以新增執行測試所需的平台。

    • 如果您要編譯測試以在 Android 裝置上執行,請執行此命令,將 Gemfile 設定為使用 Android 測試主機的相依性:

      bundle lock --add-platform x86_64-linux
    • 如果您要編譯要在 iOS 裝置上執行的測試,請執行此命令,將 Gemfile 設定為使用 iOS 測試主機的相依性:

      bundle lock --add-platform x86_64-darwin
  6. 通常預設為安裝 bundler gem。如果不是,請安裝它:

    gem install bundler -v 2.3.26

建立壓縮測試套件檔案

警告

在 Device Farm 中,壓縮測試套件中檔案的資料夾結構很重要,而且某些封存工具會隱含變更ZIP檔案的結構。建議您遵循下列指定的命令列公用程式,而不是使用內建於本機桌面檔案管理員 (例如 Finder 或 Windows Explorer) 中的封存公用程式。

現在,針對 Device Farm 將您的測試綁定在一起。

Java (JUnit)

建置並封裝您的測試:

$ mvn clean package -DskipTests=true

結果會建立檔案 zip-with-dependencies.zip。這是您的測試套件。

Java (TestNG)

建置並封裝您的測試:

$ mvn clean package -DskipTests=true

結果會建立檔案 zip-with-dependencies.zip。這是您的測試套件。

Node.JS
  1. 檢查您的專案。

    確定您位於專案的根目錄。您可以在根目錄看到 package.json

  2. 執行此命令來安裝本機相依性。

    npm install

    此命令也會在目前的目錄中建立 node_modules 資料夾。

    注意

    此時,您應該能夠在本機執行測試。

  3. 執行此命令將目前資料夾中的檔案封裝成 *.tgz 檔案。檔案會使用 package.json 檔案中的 name 屬性來命名。

    npm-bundle

    這個 tarball (.tgz) 檔案包含所有程式碼和相依性。

  4. 執行此命令將前一步驟所產生的 tarball (*.tgz 檔案) 套裝成單一壓縮的存檔:

    zip -r MyTests.zip *.tgz

    這是您在下列程序中上傳至 Device Farm MyTests.zip的檔案。

Python
Python 2

使用 pip 產生所需 Python 套件的存檔 (稱為「wheelhouse」):

$ pip wheel --wheel-dir wheelhouse -r requirements.txt

針對 Device Farm 將您的 wheelhouse、測試和 pip 要求封裝到 zip 存檔中:

$ zip -r test_bundle.zip tests/ wheelhouse/ requirements.txt
Python 3

將您的測試和 pip 要求封裝到一個 zip 檔案中:

$ zip -r test_bundle.zip tests/ requirements.txt
Ruby
  1. 執行此命令來建立虛擬 Ruby 環境:

    # myGemset is the name of your virtual Ruby environment rvm gemset create myGemset
  2. 執行此命令來使用您剛建立的環境:

    rvm gemset use myGemset
  3. 檢查您的原始程式碼。

    確定您位於專案的根目錄。您可以在根目錄看到 Gemfile

  4. 執行此命令從 Gemfile 安裝本機相依性和所有 gem 套件:

    bundle install
    注意

    此時,您應該能夠在本機執行測試。使用此命令從本機執行測試:

    bundle exec $test_command
  5. 將您的 gem 套件封裝在 vendor/cache 資料夾中。

    # This will copy all the .gem files needed to run your tests into the vendor/cache directory bundle package --all-platforms
  6. 執行以下命令將您的原始程式碼及所有相依性套裝到單一壓縮的存檔:

    zip -r MyTests.zip Gemfile vendor/ $(any other source code directory files)

    這是您在下列程序中上傳至 Device Farm MyTests.zip的檔案。

將測試套件上傳至 Device Farm

您可以使用 Device Farm 主控台上傳測試。

  1. https://console.aws.amazon.com/devicefarm 登入 Device Farm 主控台。

  2. 在 Device Farm 導覽面板上,選擇行動裝置測試 ,然後選擇專案

  3. 如果您是新使用者,請選擇新專案 ,輸入專案的名稱,然後選擇提交

    如果您已經有專案,您可以選擇它來上傳測試到該專案。

  4. 開啟您的專案,然後選擇 Create a new run (建立新執行)

  5. 若是原生 Android 和 iOS 測試

    選擇應用程式頁面上,選擇行動應用程式 ,然後選擇選擇檔案以上傳應用程式的可分發套件。

    注意

    檔案必須是 Android .apk 或 iOS .ipa。iOS 應用程式必須是專為真實裝置建置,而不是專為模擬器建置。

    若是行動 Web 應用程式測試

    選擇應用程式頁面上,選擇 Web App

  6. 為測試指定適當的名稱。這可包含空格或標點符號的任何組合。

  7. 選擇 Next (下一步)

  8. 設定頁面上的設定測試架構區段中,選擇 Appium language,然後選擇檔案

  9. 瀏覽並選擇包含測試的 .zip 檔案。.zip 檔案必須遵循設定 Appium 測試套件中所述的格式。

  10. 選擇在自訂環境中執行測試。此執行環境允許完全控制測試設定、撕裂和調用,以及選擇特定版本的執行期和 Appium 伺服器。您可以透過測試規格檔案設定自訂環境。如需詳細資訊,請參閱使用 AWS Device Farm 中的自訂測試環境

  11. 選擇下一個 ,然後按照指示選取裝置並開始執行。如需詳細資訊,請參閱在 Device Farm 中建立測試執行

注意

Device Farm 不會修改 Appium 測試。

擷取測試的螢幕擷取畫面 (選用)

您可以在測試時取得螢幕擷取畫面。

Device Farm 會將 DEVICEFARM_SCREENSHOT_PATH 屬性設為本機檔案系統上的完整路徑,這是 Device Farm 預期的 Appium 螢幕擷取畫面儲存位置。用於存放螢幕擷取畫面的測試專用目錄是在執行時間定義。系統會自動將螢幕擷取畫面提取到您的 Device Farm 報告。若要檢視螢幕擷取畫面,在 Device Farm 主控台中選擇 Screenshots (螢幕擷取畫面) 區段。

如需在 Appium 測試中擷取螢幕擷取畫面的詳細資訊,請參閱 Appium API 文件中的擷取螢幕畫面