UI測試

UI測試是封裝在Docker影像中的基於硒的測試,以允許在語言和框架(如Java和Maven、Node和WebDriver.io,或基於Selenium構建的任何其他框架和技術)中進行廣泛選擇。 Docker映像可以使用標準工具建立,但在執行時必須遵守某些慣例。 運行Docker映像時,會自動布建Selenium伺服器。 下述的執行階段慣例可讓您的測試程式碼存取所測試的Selenium伺服器和AEM例項。

注意

2021年2月10日之前建立的預備和生產管道必須更新,才能使用本頁面所述的UI測試。
有關管道配置的資訊,請參閱配置CI-CD管道

建立UI測試

UI測試是以Maven專案產生的Docker建置內容建置而成。 Cloud Manager會使用Docker建置內容來產生包含實際UI測試的Docker影像。 總之,Maven專案會產生Docker建置內容,而Docker建置內容則說明如何建立包含UI測試的Docker影像。

本節將說明將UI測試專案新增至存放庫所需的步驟。 如果您匆忙或對程式設計語言沒有特殊需求,AEM專案原型可為您產生UI測試專案。

生成Docker生成上下文

若要產生Docker建置內容,您需要Maven模組,該模組應:

  • 生成包含Dockerfile的歸檔檔案,以及使用測試構建Docker映像所需的所有其他檔案。
  • 使用ui-test-docker-context分類器標籤封存。

要達到此目的,最簡單的方法是配置Maven程式集插件以建立Docker構建上下文歸檔檔案並為其分配正確的分類器。

您可以使用不同的技術和架構來建立UI測試,但本節假設您的專案是以類似下列的方式規劃。

├── Dockerfile
├── assembly-ui-test-docker-context.xml
├── pom.xml
├── test-module
│   ├── package.json
│   ├── index.js
│   └── wdio.conf.js
└── wait-for-grid.sh

pom.xml檔案會處理Maven組建。 將執行新增至Maven程式集外掛程式,如下所示。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptors>
            <descriptor>${project.basedir}/assembly-ui-test-docker-context.xml</descriptor>
        </descriptors>
        <tarLongFileMode>gnu</tarLongFileMode>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

此執行會指示Maven程式集插件根據assembly-ui-test-docker-context.xml中包含的指令(在插件的行話中稱為「程式集描述符」)建立歸檔檔案。 程式集描述符列出必須是歸檔檔案一部分的所有檔案。

<assembly>
    <id>ui-test-docker-context</id>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${basedir}</directory>
            <includes>
                <include>Dockerfile</include>
                <include>wait-for-grid.sh</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${basedir}/test-module</directory>
            <excludes>
                <exclude>node/**</exclude>
                <exclude>node_modules/**</exclude>
                <exclude>reports/**</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</assembly>

程式集描述符指示插件建立.tar.gz類型的歸檔檔案,並將ui-test-docker-context分類器分配給它。 此外,它還列出了必須包含在存檔中的檔案:

  • Dockerfile,是建置Docker映像的必備項。
  • wait-for-grid.sh指令碼,其用途如下所述。
  • 實際UI測試,由test-module資料夾中的Node.js專案實作。

程式集描述符還排除了在本地運行UI測試時可能生成的一些檔案。 這可保證檔案的規模更小,組建更快。

包含Docker建置上下文的封存會由Cloud Manager自動擷取,Cloud Manager會在其部署管道期間建立包含您測試的Docker影像。 最終,Cloud Manager會執行Docker影像,對您的應用程式執行UI測試。

編寫UI測試

本節說明包含您UI測試的Docker影像必須遵循的慣例。 Docker映像是使用前一節中描述的Docker生成上下文構建的。

環境變數

下列環境變數將在執行時傳遞至您的Docker影像。

變數 範例 說明
SELENIUM_BASE_URL http://my-ip:4444 Selenium伺服器的URL
SELENIUM_BROWSER chrome, firefox Selenium Server使用的瀏覽器實施
AEM_AUTHOR_URL http://my-ip:4502/context-path AEM製作例項的URL
AEM_AUTHOR_USERNAME admin 登入AEM製作例項的使用者名稱
AEM_AUTHOR_PASSWORD admin 登入AEM製作例項的密碼
AEM_PUBLISH_URL http://my-ip:4503/context-path AEM發佈例項的URL
AEM_PUBLISH_USERNAME admin 登入AEM發佈例項的使用者名稱
AEM_PUBLISH_PASSWORD admin 登入AEM發佈執行個體的密碼
REPORTS_PATH /usr/src/app/reports 必須保存測試結果的XML報告的路徑
UPLOAD_URL http://upload-host:9090/upload 必須上傳檔案的URL,以便供Selenium存取

等待硒準備好

在測試開始之前,Docker映像有責任確保Selenium伺服器已啟動並運行。 等待Selenium服務是兩個步驟的過程:

  1. SELENIUM_BASE_URL環境變數中閱讀Selenium服務的URL。
  2. 以定期間隔輪詢Selenium API公開的狀態端點

一旦Selenium的狀態端點以正面回應回應,測試就可以最終開始。

生成測試報告

Docker映像必須以JUnit XML格式生成測試報告,並將其保存在環境變數REPORTS_PATH指定的路徑中。 JUnit XML格式是報告測試結果的廣泛格式。 如果Docker映像使用Java和Maven,則Maven Surefire PluginMaven Failsafe Plugin。 如果Docker映像是使用其他寫程式語言或測試運行程式實現的,請查看所選工具的文檔,以了解如何生成JUnit XML報告。

上傳檔案(#upload-files)

測試有時必須將檔案上傳至要測試的應用程式。 為了維持相對於測試的Selenium部署具有彈性,無法直接將資產上傳至Selenium。 請改為上傳檔案,以執行一些中間步驟:

  1. UPLOAD_URL環境變數指定的URL上傳檔案。 上傳必須以一個包含多部分表單的POST請求執行。 多部分表單必須有單一檔案欄位。 這等於curl -X POST ${UPLOAD_URL} -F "data=@file.txt"。 請參閱Docker影像中使用之程式設計語言的檔案和程式庫,了解如何執行此類HTTP要求。
  2. 如果上傳成功,要求會傳回text/plain類型的200 OK回應。 回應的內容是不透明的檔案控點。 您可以使用此句柄來取代<input>元素中的檔案路徑,以測試應用程式中的檔案上傳。

本頁內容