在之前的五篇文章中,我们介绍了从Git、Maven、Junit、SonarQube、Sh等工具及技术介绍了从持续集成到静态代码扫描再到简单的部署。基本可以满足了我们在基础开发过程的流水线。
之前的文章链接见下:
Devops关键工具及技术(一)—Jenkins 容器化
Devops关键工具及技术(二)—Jenkins2.0 Pipeline
Devops关键工具及技术(三)—基于Pipeline的Git+Maven+Junit持续集成
Devops关键工具及技术(四)—基于Pipeline的SonarQube静态代码扫描
Devops关键工具及技术(五)—基于Pipeline的Bash脚本部署
接下来,我们将介绍在流水线中加入测试相关的功能,如Web自动化测试、性能测试这些测试流水线。Web自动化测试加入到流水线中,将会用三篇文章进行介绍。在Web自动化测试的框架中将会选用RobotFramework+Selenium2Library。三篇文章分别是Windows下Web自动化测试工具安装、Web自动化测试工具的容器化、Web自动化测试的流水线集成。
本篇我们将介绍Web自动化测试工具的容器化。
以下所有的文件代码都可以在Github找到:
https://github.com/zbbkeepgoing/containerization
Web自动化工具容器化是为了我们能够将Wen自动化加入到我们的Jenkins中成为一个 节点,这样Web的自动化测试将会很容易地集成到我们pipeline流水线中。并且容器化后自动化测试的工具部署将会变得非常简单,只需要部署一个容器即可以进行自动化的测试。
下面就是Web自动化测试的Dockerfile文件
FROM ubuntu:16.04 //基础镜像
ENV http_proxy http://192.168.88.130:8118 //配置代理,无需代理的可以去掉
ENV https_proxy http://192.168.88.130:8118 //配置代理,无需代理的可以去掉
RUN apt-get update && apt-get install -y --no-install-recommends \
python \
python-pip \
unzip \
libx11-6 \
libnss3 \
libfontconfig1 \
libgconf2-4 \
wget \
git \
openjdk-8-jdk \
&& rm -rf /var/lib/apt/lists/* //安装必要软件包
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -;\
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get -y remove google-chrome-stable && apt-get install -qy google-chrome-stable //安装google浏览器稳定版
RUN pip install --upgrade pip //更新pip
RUN pip install --upgrade setuptools //更新setuptools
RUN pip install robotframework //安装robotframwork
RUN pip install robotframework-seleniumlibrary //安装seleniumlibrary
RUN pip install robotframework-faker //安装robotframework-faker
RUN wget https://chromedriver.storage.googleapis.com/2.42/chromedriver_linux64.zip; \
unzip chromedriver_linux64.zip; \
rm -rf chromedriver_linux64.zip; \
mv -f chromedriver /usr/local/bin/chromedriver; //安装google浏览器驱动
RUN pip install robotframework-selenium2library //安装selenium2library
ENV http_proxy "" //取消代理
ENV https_proxy "" //取消代理
根据Dockerfile镜像Docker的构建。
docker build -t robot:latest .
构建完成后运行
docker run --name robot -it -d robot:latest
测试
[root@localhost ~]# docker exec -it e8c2eb006383 sh
# google-chrome --version
Google Chrome 69.0.3497.100
# robot --version
Robot Framework 3.0.4 (Python 2.7.12 on linux2)
#
# chromedriver --version
ChromeDriver 2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac)
#
脚本可以在这里找到:https://github.com/zbbkeepgoing/containerization/blob/master/RobotFramework/sample.robot
该脚本与上一篇文章中的脚本不太一致,主要原因是容器化后Google浏览器将无法进行可视化得进行调用,因为在容器里面。所以我们需要采用headless模式进行运行Google浏览器
*** Settings ***
Library Selenium2Library
*** Test Cases ***
Baidu
Open Headless Chrome https://www.baidu.com
Wait Until Page Contains baidu
Close Browser
*** Keywords ***
Open Headless Chrome
[Arguments] ${url}
${chrome_options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys, selenium.webdriver
Call Method ${chrome_options} add_argument no-sandbox
Call Method ${chrome_options} add_argument headless
Call Method ${chrome_options} add_argument disable-gpu
Create Webdriver Chrome chrome_options=${chrome_options}
Go To ${url}
进入容器进行测试
[root@localhost RobotFramework]# docker cp /root/containerization/RobotFramework/sample.robot e8c2eb006383:/opt
[root@localhost RobotFramework]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8c2eb006383 robot:latest "/bin/bash" 23 hours ago Up 23 hours robot
[root@localhost RobotFramework]# docker exec -it e8c2eb006383 sh
# cd /opt
# ls
google sample.robot
# pybot -d /opt sample.robot
==============================================================================
Sample
==============================================================================
Baidu | PASS |
------------------------------------------------------------------------------
Sample | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /opt/output.xml
Log: /opt/log.html
Report: /opt/report.html
#
以上即是Web自动化测试工具容器化的内容,后面将会利用容器化后的镜像与Jenkins、Pipeline结合进行Web自动化测试的集成