將自動化測試打成鏡像在容器裏面運行是現在自動化測試的趨勢,最近在學習docker基礎,也就嘗試了一下將自動化測試放到docker裏跑,本文將詳細講述這一過程。
準備
1.安裝Docker,可參考:https://docs.docker.com/engine/install/
2.準備一個UI自動化測試項目,也可以使用博主的,我使用的自動化測試框架是Cypress:https://github.com/qycai/firstCypressProject.git
編寫Dockerfile
如果是下載博主項目的同學,可以看到在項目根目錄已經編寫好了Dockerfile了,沒有使用該項目的同學也沒關係,接下來我們會詳細講解怎麼編寫Dockerfile。
FROM cypress/browsers:node12.16.2-chrome81-ff75
WORKDIR /usr/uitest
COPY . /usr/uitest
RUN npm install
CMD ["npm","run","weiboSignUpTest"]
FROM cypress/browsers:node12.16.2-chrome81-ff75
基礎鏡像選擇的是cypress/browsers,這是cypress官方提供的一個帶有node和cypress的鏡像,有各種版本的,可以在docker hub自行選擇:https://hub.docker.com/r/cypress/browsers/tags。cypress官網也提供了不帶Chrome,只有cypress運行時依賴的鏡像,具體可參考:https://github.com/cypress-io/cypress-docker-images。WORKDIR /usr/uitest
表示容器裏的工作路徑。COPY . /usr/uitest
表示將host主機的當前目錄下的內容拷貝到容器裏的工作目錄,這裏的當前目錄是指代碼根目錄。RUN npm install
安裝項目所需依賴,由項目裏的package.json指定。CMD ["npm","run","weiboSignUpTest"]
表示容器運行起來後執行的命令,這裏是執行測試用例weiboSignUpTest。
構建鏡像
- 將代碼下載到本地某一路徑下,然後進入代碼根目錄,如下圖:
- 執行docker build命令:
docker build --rm -f Dockerfile -t uitest:1.0 .
--rm
:打完鏡像後刪除中間鏡像。
-f Dockerfile
:指定dockerfile的路徑和名稱,我們已經處於和dockerfile統一目錄下了,故只需要指定名稱即可。默認的dockerfile名稱是Dockerfile,所以如果在當前目錄下存在Dockerfile的話,可以直接省略。
-t uitest:1.0
:指定鏡像的名稱和tag,tag可以省略,默認爲latest。
.
:將當前目錄下的所有內容打成鏡像。
如下圖所示即表示鏡像打成功:
可以查看一下鏡像:
docker image ls
創建掛載卷
我們知道容器運行完成後會自動銷燬,與之相關的東西也不會保存,如果需要持久化保存數據,需要掛載卷。
- 創建一個卷:
docker volume create my-vol
- 查看卷:
docker volume ls
- 查看某一個卷的具體信息:
docker inspect my-vol
這裏的Mountpoint就是卷所在的位置,如果你的宿主機是linux,那麼你可以在宿主機上找到該目錄。但如果你的宿主機是windows或mac,那麼你是找不到該路徑的,是因爲其實docker engine實際上實在你的windows/mac宿主機上運行了一個輕量級的linux虛擬機,該目錄是Linux虛擬機的目錄。那麼在windows/mac上怎麼查看卷裏面的內容呢,下文會講到。
運行容器
鏡像構建完成後,就使用該鏡像運行容器:
docker run --rm -it --name uitest --mount source=my-vol,target=/usr/uitest uitest:1.0
--rm
:運行完成後刪除該容器。
-it
:以交互模式運行container,即可以在終端看到運行的日誌。
--name uitest
:給運行的container命名爲uitest。
--mount source=my-vol,target=/usr/uitest
:將容器裏/usr/uitest下的內容掛載到卷my-vol。
uitest:image
:運行的鏡像的名稱。
運行完成後如下圖:
windows/mac查看卷內容
上文提到,在windwos/mac系統上,是沒有辦法直接訪問卷的內容的,那麼我們可以將其內容copy到宿主機上:
docker run --rm -it -v /Users/qycai/volume-backup:/backup -v /var/lib/docker:/docker alpine:edge tar cfz /backup/volumes.tgz /docker/volumes/
/Users/qycai/volume-backup:/backup
:指定任意一個宿主機路徑。
-v /var/lib/docker:/docker
:卷的在虛擬機上的路徑。
alpine:edge
:鏡像名。
tar cfz /backup/volumes.tgz /docker/volumes/
:將/docker/volumes/下的東西打包到/backup下並命名爲volumes.tgz。
現在就可以去/Users/qycai/volume-backup路徑下查看卷裏面的內容了:
可以看到卷my-vol裏面包含了運行之後的所有文件,這樣便可以獲取運行後的截圖、視頻等。