Robotframework + selenium2library 实现 Headless 模式的 Web 功能测试
今天来点小技巧凑个数。 感谢健哥提供的 Hello world 样本。
之前因为做一些 CI/CD 的尝试,做了个要你命三千一样的 Jenkins 镜像(docker pull dustise/jenkins),其中包含了 Maven、Sornar Scanner、Robot Framework 以及 Git/Subversion、Kubectl 等一系列的相关工具。
一旦用起来,测试的兄弟发现了个大问题,基于 selenium2library 的页面功能测试无法完成了,回头一想,镜像里面压根没有浏览器,怎么可能执行浏览器测试呢。
安装
首先就要安装浏览器了,我这里选择了 FireFox。
apt-get install -y firefox
为了让 selenium2library 能够同 FireFox 互动,还需要 geckodriver 的支持,这个软件提供了 WebDriver 协议所需的 HTTP API,能够和 FireFox 这样的 Gecko 浏览器进行通信。
wget -O - https://github.com/mozilla/geckodriver/releases/download/v0.11.1/geckodriver-v0.11.1-linux64.tar.gz | tar xzf - --directory=/usr/local/bin
下载后生成的可执行文件需要放置在 $PATH
里,以便被 selenium 调用。
接下来,为了自动测试的需要,要在 Headless 的情况下运行 FireFox,这里又需要 xvfb 的支持,简单的使用 apt-get install -y xvfb
就可以了。
这个包带有一个 xvfb-run 命令,其功能是在虚拟 X 服务器环境下运行命令。
测试
首先我们生成一个 /tmp/test.robot 文件,内容如下
*** Settings ***
Library Selenium2Library
*** Test Cases ***
testHelloWorld
open browser http://www.qq.com firefox
maximize browser window
page should contain 0755
[Teardown] close browser
测试目的很简单,看 http://www.qq.com
中有没有 “0755” 这个字符串。
接下来用 robot 运行:
xvfb-run robot sample.robot
网络通畅的情况下,会得到类似这样的结果。
==============================================================================
Sample
==============================================================================
testHelloWorld | PASS |
------------------------------------------------------------------------------
Sample | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /output.xml
Log: /log.html
Report: /report.html
同时会生成三个结果文件供后续分析。
上述安装内容移植 Docker Build 过程中,就能够构造出用于 Web 功能测试的 Jenkins Node 了。