如何在本地編譯安裝部署自動化迴歸測試平台 AREX

語言: CN / TW / HK

AREX 官方 QQ 交流羣:656108079

本文將詳細為大家介紹一下如何在本地進行 AREX 的編譯和配置。

背景

AREX 是一款由攜程開源的自動化測試工具, 基於 Java Agent 技術,錄製生產環境真實用户的請求,並在測試環境回放,同時智能比對分析回放結果,從而實現快速有效的迴歸測試。除此以外,也提供了用例管理、接口測試(腳本驗證、雙環境比對)等豐富的自動化測試功能,是一個不需要編程技術,也可快速上手的自動化測試工具平台。

目前你可以通過 Docker-Compose 命令,一鍵缺省安裝 AREX 所有基礎服務組件,包括前端 UI,MongoDB 數據庫,Redis 緩存,數據存取服務(Storage Service), 調度服務(Schedule Service),分析服務(Report Service)等(如上圖所示)。這種方式不需要手動安裝和配置每個服務,大大簡化了安裝過程,提高部署效率。(詳見文檔

當然,你也可以通過在本機上構建 Docker 鏡像的方式在本地對各個服務組件進行編譯和安裝。這種方式適用於需要對單個服務進行開發和測試的場景,可以避免安裝不必要的依賴項,同時也適用於需要在離線環境下部署的場景。

本文將詳細為大家介紹一下如何在本地進行 AREX 的編譯和配置。(如果你有其他特殊的部署需求或建議,也可以在 GitHub Issue 中提出)

本地構建 Docker 鏡像

首先,創建 github-arex 目錄,用於存放 AREX 各個服務組件。建議將 AREX 各個項目放在同一個目錄下,Deployment 倉庫中 Shell 腳本都是以相對路徑來進行訪問的,如果目錄路徑發生變更,也需要同步修改 Shell 腳本中的相關配置。

下載 AREX Deployment 倉庫

Deployment 倉庫中包含編譯命令、Dockerfile(用於構建鏡像,包含了構建鏡像所需的指令和依賴項) 和 Docker-Compose file(用做容器編排進行環境部署)等文件,編譯時需要切換至 dev 分支。

cd github-arex
git clone http://github.com/arextest/deployments.git
cd deployments
git checkout dev # 切換到代碼倉庫的 dev 分支,並將當前工作目錄中的代碼更新為 dev 分支的最新版本

下載編譯 AREX 前端 UI

AREX 前端 UI,是交互組件,主要負責用户配置執行的交互界面。

cd github-arex
git clone http://github.com/arextest/arex.git
cd arex-front-end
git pull --rebase
cd ../deployments
./front.build.sh # 執行 front.build.sh 腳本,構建 AREX 前端 UI 組件 
cat front.build.sh # 查看腳本
cat dockerfile/front.Dockerfile # 查看 Dockerfile 配置

front.build.sh 腳本如下所示,執行時會複製 Dockerfile 並執行 docker build 命令來根據 Dockerfile 構建 Docker 鏡像,其中版本編號可以根據實際情況進行修改。

cd ../arex-front-end 

cp ../deployments/dockerfile/front.Dockerfile ./Dockerfile # 將 front.Dockerfile文件複製到當前目錄,並命名為 Dockerfile 
docker build -t arexadmin01/arex:0.2.6  .  --build-arg http_proxy=http://ntproxy.qa.nt.ctripcorp.com:8080 --build-arg https_proxy=http://ntproxy.qa.nt.ctripcorp.com:8080 # 使用 Dockerfile 構建名為 arexadmin01/arex:0.2.6 的 Docker 鏡像,並指定了 http_proxy 和 https_proxy 參數,以便能夠通過代理加速鏡像下載
rm -rf ./Dockerfile # 構建完成後刪除 Dockerfile 

cd ..

注: 如修改版本編號,還需要對 Docker-Compose file(docker-compose.yml)中的版本編號進行同步修改。

front.Dockerfile 文件如下所示,其中包含 Nodejs 中 npm 的安裝和端口暴露(8080)等。

FROM node:14.18.1 # 使用 node:14.18.1 作為基礎鏡像
# Create app directory 
WORKDIR /usr/src/app 

# Install app dependencies 
# A wildcard is used to ensure both package.json AND package-lock.json are copied 
# where available (npm@5+) 
# COPY package*.json ./ 
COPY . . 

RUN npm install  --loglevel verbose // 安裝依賴 
RUN npm run build // 構建項目 

# Bundle app event 
# COPY . . 

EXPOSE 8080 // 暴露容器端口 8080 
CMD [ "node", "server.js",">","./logs/app.log","2>", "./logs/error.log"] // 使用 Node.js 運行 server.js,並將日誌輸出到 ./logs/app.log 和 ./logs/error.log 中

注意:如果不使用 Docker 進行安裝,也可直接編譯運行。這種方式適用於不需要使用 Docker 進行環境隔離和容器化的場景。其他服務組件也可通過這種方式直接編譯運行,後續這部分不再贅述。

下載編譯 AREX 數據存取服務

AREX 數據存取服務(Storage Service)主要負責存儲 Agent 的錄製數據,獲取回放數據,以及錄製回放配置的讀取 。

cd github-arex 
git clone http://github.com/arextest/arex-storage.git
git pull --rebase
cd ../deployments
./storage.build.sh # 執行 storage.build.sh 腳本,構建 AREX 數據存取服務組件 

下載編譯 AREX 調度服務

AREX 調度服務(Schedule Service)是調度組件,用於協調 AREX 執行回放任務的過程以及回放結果比對。當 AREX 執行回放任務時,調度服務通過 Storage Service 服務從數據庫中提取被測應用的錄製數據(請求),然後向目標驗證服務發送接口請求。一旦服務接收到請求,便會處理請求邏輯。同時,由 Agent 裝載需要 MOCK 的外部依賴數據,處理完成後返回響應報文。調度服務會將錄製的響應報文與回放的響應報文進行比對,並將比對結果推送給分析服務,用於後續的回放報告生成。

cd github-arex 
git clone http://github.com/arextest/arex-replay-schedule.git
git pull –rebase 
cd ../deployments 
./schedule.build.sh # 執行 schedle.build.sh 腳本,構建 AREX 調度服務組件 

下載編譯 AREX 分析服務

AREX 分析服務(Report Service)是分析組件,負責分析錄製數據、回放結果,生成回放報告,以及處理用例管理邏輯。

cd github-arex 
git clone http://github.com/arextest/arex-report.git
git pull -rebase 
cd ../deployments 
./ report.build.sh # 執行 report.build.sh 腳本,構建 AREX 分析服務組件

下載編譯 AREX Community Test

AREX Community Test 是由 AREX 社區提供的用來驗證功能的一個模擬服務,你可以用它來試用 AREX 的流量錄製回放功能。

cd github-arex 
git clone http://github.com/arextest/arex-commuty-test.git
git pull –rebase 
cd ../deployments 
./ community.build.sh # 執行 community.build.sh 腳本,構建 AREX Community Test 服務

下載編譯 AREX Java Agent

AREX Java Agent 是錄製回放組件,負責 Java 應用的請求錄製及回放過程中的數據 Mock,在被測應用的後台執行。錄製過程中,Agent 會記錄 Java 應用的請求信息,並將這些信息存儲在數據庫中。回放過程中,Agent 會將錄製的外部依賴(外部請求/DB)的響應返回給被測應用,從而實現 Mock 的效果。

cd github-arex
git clone http://github.com/arextest/arex-agent-java.git
git pull –rebase
cd ../ arex-agent-java/
mvn clean package # 進行清理並打包,以便於部署和運行

編譯完成:

執行 ls arex-agent-jar/ 命令,即可查看生成的最新的 Java Agent 文件,如下圖所示:

下載編譯 AREX 批量執行測試用例服務(Node Service)

Node Service 是測試用例的腳本執行服務,負責在 Collection 模塊中用例的前置腳本和驗證腳本的執行。

cd github-arex
git clone http://github.com/arextest/arex-node-service.git 
cd arex-node-service/ 
git pull --rebase 
cd ../deployments 
./node.build.sh

如下圖所示,所有組件均已編譯完成。

如果需要對 AREX 整個系統中的某個組件進行單獨配置,可以通過修改配置文件 Docker-Compose file 中的配置項來完成。

以下將對如何修改各個服務組件的配置展開詳細介紹,如修改數據庫配置、服務端口配置等。完成修改後,AREX 系統中就可以按照你的需求來運行。

單獨配置各個服務

Docker Compose 是用於定義和運行多容器 Docker 應用程序的工具,使用 Compose 可在一台主計算機上方便地協調多個容器映像。 在 Docker Compose 中,通常會使用一個配置文件 docker-compose.yml 來配置應用程序的服務。 通過修改配置文件中的各個配置項,可以更加靈活地運行 AREX 中的每個服務。配置完成後,只需運行一條命令,即可從配置中創建並啟動所有服務。

cd github-arex 
git clone http://github.com/arextest/deployments.git 
cd deployments 
cat docker-compose.yml

配置 AREX 前端 UI

配置文件中關於 AREX 前端 UI 部分的詳細配置見下圖:

其中:

  1. AREX 前端服務配置的端口是 8080,通過 Docker 容器對外暴露的端口是 8088,用户可以根據需要修改;
  2. 日誌存儲在當前目錄下的 arex-logs/arex-front 目錄下。
  3. AREX 前端服務依賴於四個服務
    1. 分析服務(arex-report-service),用於獲取分析數據;
    2. 調度服務(arex-schedule-service),用於前端觸發回放操作等調用;
    3. 數據存儲服務(arex-storage-service),用於讀取配置等操作;
    4. Node 服務,用於實現批量執行測試用例。

配置 AREX Node服務

Node 服務是一個簡單服務,內部端口 3000, 對外暴露端口 10001,一般不涉及外部調用,此處可忽略。

配置 AREX 分析服務

  1. AREX 分析服務依賴於 Mongodb 數據庫,需要連接 MongoDB 數據庫進行數據存儲和查詢,用户名和密碼是 MongoDB 的配置。如果用户使用自己的 MongoDB 服務,需要將連接信息改為自己的 MongoDB 配置。
  2. 依賴於 Storage 服務,不需要修改此部分,如果獨立部署,需要修改地址和端口。
  3. AREX 分析服務的內部端口是 8080,通過 Docker 容器對外暴露的端口是 8090。

注意:Arex.ui.url 是一個特殊的配置項,它用於在 AREX 郵件服務中組裝登錄鏈接。因為 AREX 的登錄需要用户輸入郵箱,而郵件服務發送的鏈接需要指向可訪問的 AREX 前端地址,因此必須將 Arex.ui.url 配置為實際的前端地址,而不是 Docker-Compose 中容器的地址。如果配置不正確,郵件通知中的鏈接將會跳轉到錯誤頁面。

配置 AREX 數據存儲服務

  1. 數據存儲服務內部端口 8080, 對外暴露端口 8093。
  2. 數據存儲服務依賴於:
    1. mongodb 數據庫,配置方式同上一節;
    2. Redis 緩存,用於錄製和回放中存儲緩存,加速性能;
    3. 分析服務

配置 AREX 調度服務

  1. AREX 調度服務內部端口 8080,對外暴露端口8092。
  2. 與數據存儲服務基本一致,AREX 調度服務同樣依賴於:
    1. mongodb 數據庫;
    2. Redis 緩存;
    3. 分析服務。

配置 Redis 緩存服務

Redis 實例,內部端口 6379, 對外暴露端口 6379。

如果選擇使用其他環境中的 Redis 服務,則需要刪除 Docker-Compose 文件中 Redis 服務節點的配置,並將所有依賴服務中的相關配置修改為連接到已有的 Redis 服務。

配置 MongoDB 數據庫服務

數據庫服務內部端口 27017,對外暴露端口 27017。

同上,如果選擇使用其他環境中的數據服務,則需要刪除配置文件中 MongoDB 服務節點的配置,並將所有依賴服務中的相關配置修改為連接到已有的數據庫服務。

mongo-allone-init.js 是服務啟動過程中的依賴的一個配置文件,用於初始化 MongoDB 數據庫的一些配置。如下:

數據存儲在當前目錄的 arex-data/mongodb 目錄中。

AREX Docker Compose 啟動

所有配置調整好後, 啟動 AREX 服務:

docker-compose up –d

停止 AREX 服務:

docker-compose down –v

查看日誌:

docker-compose logs

logs 命令用來查看服務進程狀態, 當 State 出現問題時,可以使用 logs 命令來調試跟蹤。