容器化UI自動化測試環境(Cypress&Docker)

將自動化測試打成鏡像在容器裏面運行是現在自動化測試的趨勢,最近在學習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"]
  1. 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
  2. WORKDIR /usr/uitest
    表示容器裏的工作路徑。
  3. COPY . /usr/uitest
    表示將host主機的當前目錄下的內容拷貝到容器裏的工作目錄,這裏的當前目錄是指代碼根目錄。
  4. RUN npm install
    安裝項目所需依賴,由項目裏的package.json指定。
  5. CMD ["npm","run","weiboSignUpTest"]
    表示容器運行起來後執行的命令,這裏是執行測試用例weiboSignUpTest。

構建鏡像

  1. 將代碼下載到本地某一路徑下,然後進入代碼根目錄,如下圖:
    在這裏插入圖片描述
  2. 執行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
在這裏插入圖片描述

創建掛載卷

我們知道容器運行完成後會自動銷燬,與之相關的東西也不會保存,如果需要持久化保存數據,需要掛載卷。

  1. 創建一個卷:docker volume create my-vol
  2. 查看卷:docker volume ls
  3. 查看某一個卷的具體信息: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裏面包含了運行之後的所有文件,這樣便可以獲取運行後的截圖、視頻等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章