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 了。

comments powered by Disqus