軟件測試中Docker應用場景和實現原理

引言

作爲測試工程師,是否經常遇到下面這些問題?
  1.和開發共用一套測試環境,測試時不能保證環境的穩定性,有可能在開發環境上穩定,但上線時會容易漏掉一些文件配置等。當然還經常會與開發就bug產生一些糾紛。
  2.多個項目部署到同一臺服務器,測試時會多了一些不相關的噪音,可能影響到測試的準確性。
  3.重新部署一套測試環境,代碼是開發寫的,環境配置可能是運維搞得,如果測試任務多了,需要部署一套新的測試環境怎麼辦?我們需要費很大勁去折騰。
  4.用selenium做ui自動化測試以及兼容性測試時,需要安裝相應的瀏覽器及其適配版本的驅動,過程繁瑣還需要親自調試,麻煩的是有些瀏覽器版本和驅動對系統內核還有要求。
  5.很多時候,我們測試服務器資源不是很多,我們想在這有限的資源上開發部署自己的web平臺,又怕自己的環境影響到其他人,畏手畏腳,怎麼辦?
  歸根結底就是我們需要一套屬於自己的環境,這個環境能夠隨時隨地拿起來就用,提升我們的測試效率以及測試準確性。其生命週期也需要受到我們控制,讓我們徹底放飛自我,不再畏手畏腳。
  那麼,有什麼答案解決這種環境問題嗎?有,docker就是這種答案。

何爲Docker

Docker 是一個開源的應用容器引擎,讓開發測試可以打包他們的應用以及依賴包到一個可移植的容器中。套用docker官方的口號:Build, Ship, and Run Any App, Anywhere。意思就是在任何平臺都可以構建、部署、運行任何應用。聽起來很厲害的樣子,不過docker輕量(佔用內存資源少)、標準與持續化部署(開發、測試以及線上環境的一致性)、強大的移植能力(各種系統)、安全的特性使得其成爲實現輕量級的操作系統虛擬化的優秀解決方案。

測試實踐

Docker搭建業務測試環境

事實上,公司提供了適配公司現有環境的容器化產品,主要是基於Docker和Kubernetes底層技術架構,這個也是主流的基礎架構方案。
  Docker就是將一個應用程序正常運行所需的一系列東西打包成一個鏡像,用的時候,基於這個鏡像啓動一個容器實例,直接使用。
實現過程:
  在Dockerfile中構建一個docker鏡像的基本指令,包含FROM(基礎鏡像)、WORKDIR(建立文件夾)、COPY(宿主機文件複製)、RUN(linux常用命令操作)、ENV(環境變量設置)這幾個指令。這幾個指令的組合能夠生成一套穩定的javaweb鏡像。文件寫完之後,只需要docker build一下,就能夠生成我們需要的javaweb鏡像。我們可以將鏡像上傳到鏡像倉庫上,然後我們就可以在任何我們想要部署業務測試環境的系統上(包括本地機器),下載該鏡像,並使用docker run命令生成容器,即可快速部署一套我們自己的測試環境(當然前提是部署的機器上需要安裝docker)。

Docker在selenium自動化中的應用

Selenium Grid主要用於分佈式自動化測試,就是一套Selenium 代碼可在不同的環境上運行。Grid使用了hub-node(Master Slave)的概念,在這個概念中,測試只在一個機器上運行(hub),但是執行會在不同的機器(nodes)並行執行。剛好,Docker可快速的創建各種環境,從而使得selenium分佈化測試變得更爲快捷可靠。
實現過程:
那麼,一套腳本如何同時跑多個瀏覽器,做兼容測試?
  2.1>先後下載hub及node鏡像
  docker pull selenium/hub
  docker pull selenium/node-chrome
  2.2>啓動hub容器
  docker run -d –p 32768:4444 --name selenium-hub selenium/hub
  注:Selenium/hub 容器的端口號爲4444,對centos映射的端口爲32768
  2.3>啓動分支node chrome 容器
  docker run -d --link selenium-hub:hub selenium/node-chrome
  注:–link 通過 link 關聯 selenium-hub 容器,併爲其設置了別名hub
  2.4>可以在本地機器上執行腳本

Docker與CI/CD

Docker可以讓你非常容易和方便地以“容器化”的方式去部署應用,它就像集裝箱一樣,打包了所有依賴,再在其他服務器上部署很容易,不至於換服務器後發現各種配置文件散落一地,這樣就解決了編譯時依賴和運行時依賴的問題。Docker在CI/CD上的應用使得整個過程更進一步自動化,也使整個過程鏡像化,達成一次構建,多次部署的願景。
  CI流程:1.開發者向gitlab上提交代碼 2.gitlab通過webhook通知jenkins有更新 3.jenkins從gitlab上下拉最新代碼 4.jenkins對代碼進行編譯、構建新的集成鏡像、最後將鏡像推送到docker鏡像倉庫上。
  CD流程:1.在鏡像倉庫上拉取最新集成鏡像 2.然後啓動容器。

總結

Docker不僅解決了測試中環境治理的問題,也能夠利用社區強大的鏡像資源快速搭建我們想要的環境,非常省時省力。當然,docker讓整個測試和開發流程更加自動化,更有效率。

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