如何在本地編譯安裝部署自動化迴歸測試平台 AREX
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 部分的詳細配置見下圖:
其中:
- AREX 前端服務配置的端口是 8080,通過 Docker 容器對外暴露的端口是 8088,用户可以根據需要修改;
- 日誌存儲在當前目錄下的 arex-logs/arex-front 目錄下。
- AREX 前端服務依賴於四個服務
- 分析服務(arex-report-service),用於獲取分析數據;
- 調度服務(arex-schedule-service),用於前端觸發回放操作等調用;
- 數據存儲服務(arex-storage-service),用於讀取配置等操作;
- Node 服務,用於實現批量執行測試用例。
配置 AREX Node服務
Node 服務是一個簡單服務,內部端口 3000, 對外暴露端口 10001,一般不涉及外部調用,此處可忽略。
配置 AREX 分析服務
- AREX 分析服務依賴於 Mongodb 數據庫,需要連接 MongoDB 數據庫進行數據存儲和查詢,用户名和密碼是 MongoDB 的配置。如果用户使用自己的 MongoDB 服務,需要將連接信息改為自己的 MongoDB 配置。
- 依賴於 Storage 服務,不需要修改此部分,如果獨立部署,需要修改地址和端口。
- AREX 分析服務的內部端口是 8080,通過 Docker 容器對外暴露的端口是 8090。
注意:Arex.ui.url
是一個特殊的配置項,它用於在 AREX 郵件服務中組裝登錄鏈接。因為 AREX 的登錄需要用户輸入郵箱,而郵件服務發送的鏈接需要指向可訪問的 AREX 前端地址,因此必須將 Arex.ui.url
配置為實際的前端地址,而不是 Docker-Compose 中容器的地址。如果配置不正確,郵件通知中的鏈接將會跳轉到錯誤頁面。
配置 AREX 數據存儲服務
- 數據存儲服務內部端口 8080, 對外暴露端口 8093。
- 數據存儲服務依賴於:
- mongodb 數據庫,配置方式同上一節;
- Redis 緩存,用於錄製和回放中存儲緩存,加速性能;
- 分析服務
配置 AREX 調度服務
- AREX 調度服務內部端口 8080,對外暴露端口8092。
- 與數據存儲服務基本一致,AREX 調度服務同樣依賴於:
- mongodb 數據庫;
- Redis 緩存;
- 分析服務。
配置 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 命令來調試跟蹤。