基于Selenium 分布式的自动化测试环境搭建
背景介绍
最近致力于研究Selenium自动化测试(包含RF)筹备,经过B度一番探求后,未找到契合自己需求的部署方案。
另外这是一个拓荒的过程,再没有先例可以借鉴的情况下,只能找些支离破碎的例子拼凑兮尝试矣,故本文旨在阐述该方案的可行性及探索的过程。
硬件配置及组网
-
CI 持续集成环境部署于Linux (192.168.31.72)
-
自动化测试Server 部署于Linux (192.168.31.147
-
UI 自动化测试执行环境部署于Win10 (192.168.31.192)
-
Testbed部署于Linux(192.168.31.86)
组网如下图
软件配置及流程
序号 | 模块 | OS | 名称 | 版本 | 备注 |
---|---|---|---|---|---|
1 | CI 持续集成 | Linux | Apache Tomcat | 8.5.47 | 版本无特别要求 |
2 | CI 持续集成 | Linux | Jenkins | 2.190.2 | 版本无特别要求 |
3 | Auto-Testing Server | Linux | java | 1.8.0_212 | 用于启动Hub |
4 | Auto-Testing Server | Linux | python | 3.6.9 | Ubuntu18.04预安装 |
5 | Auto-Testing Server | Linux | selenium | 3.141.0 | 与UI Test Clilent保持一致 |
6 | Auto-Testing Server | Linux | selenium-server-standalone | 3.141.0 | 与selenium保持一致 |
7 | Auto-Testing Server | Linux | robotframework | 3.1.2 | N/A |
8 | Auto-Testing Server | Linux | robotframework-seleniumlibrary | 4.2.0 | N/A |
9 | UI Test Client | Win10 | Internet Explore | 11.0.120 | N/A |
10 | UI Test Client | Win10 | selenium-server-standalone | 3.141.0 | 与selenium保持一致 |
11 | UI Test Client | Win10 | java | 1.8.0_91 | 用于启动Node |
12 | TestBed | Linux | nexus | 3.19.1 | 被测对象 |
13 | TestBed | Linux | java | 1.8.0_212 | 运行nexus需要 |
Jenkins Server搭建
下载Apache Tomcat 并上传解压
- 下载Tomcat ,官方地址http://tomcat.apache.org/
- 上传至Linux (FTP 、SCP等)
下载Jenkins.war 包并上传解压
- 下载Jenkins.war包,官方地址https://jenkins.io/zh/
- 上传至Linux (FTP 、SCP等)
启动及配置jenkins
Auto-Testing Server 搭建
Java 安装及配置
- 下载jdk压缩包,官方地址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- 上传至Linux (FTP 、SCP等)
- 解压及配置环境变量
root@ubuntu:~# tar -xzvf jdk-8u212-linux-x64.tar.gz
vi .profile 加入环境变量
export JAVA_HOME=/root/jdk1.8.0_212/bin
export PATH=$PATH:$JAVA_HOME
环境变量生效
root@ubuntu:~# source ~/.profile
验证环境变量
root@ubuntu:~# java
Python环境调整及验证
- 初始化的Ubuntu 创建软连接方便调用
root@ubuntu:/usr/bin# ls -trl python*
-rwxr-xr-x 1 root root 1342 May 1 2016 python3-jsonpointer
-rwxr-xr-x 1 root root 3661 Oct 28 2017 python3-jsonpatch
-rwxr-xr-x 1 root root 1018 Oct 28 2017 python3-jsondiff
-rwxr-xr-x 1 root root 398 Nov 15 2017 python3-jsonschema
lrwxrwxrwx 1 root root 17 Oct 25 2018 python3m-config -> python3.6m-config
lrwxrwxrwx 1 root root 10 Oct 25 2018 python3m -> python3.6m
lrwxrwxrwx 1 root root 16 Oct 25 2018 python3-config -> python3.6-config
lrwxrwxrwx 1 root root 9 Oct 25 2018 python3 -> python3.6
lrwxrwxrwx 1 root root 34 Nov 7 10:44 python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 2 root root 4526456 Nov 7 10:44 python3.6m
lrwxrwxrwx 1 root root 33 Nov 7 10:44 python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 Nov 7 10:44 python3.6
创建python软连接
root@ubuntu:/usr/bin# ln -s /usr/bin/python3.6 /usr/bin/python
安装pip包管理工具
root@ubuntu:/usr/bin# apt install python3-pip
创建pip软连接
ln -s /usr/bin/pip3 /usr/bin/pip
- pip 镜像源配置
root@ubuntu:~# mkdir ~/.pip;cd ~/.pip;vi pip.conf
粘贴如下国内镜像源至pip.conf并保存
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
Robotframework 自动化测试依赖安装
root@ubuntu:/usr/bin# pip install selenium
root@ubuntu:/usr/bin# pip install robotframework
root@ubuntu:/usr/bin# pip install robotframework-seleniumlibrary
查看selenium版本
root@ubuntu:/usr/bin# pip show selenium
Name: selenium
Version: 3.141.0
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: /usr/local/lib/python3.6/dist-packages
Requires: urllib3
selenium-server-standalone下载及安装
相较于浏览器Driver 例如IEDriverServer_xxx.exe,RemoteWebDriver支持控制远程浏览器能力,通过搭配Selenium-Server-standalone的服务,将IE浏览器和测试代码分离,从而实现远程控制浏览器操作。
-
下载selenium-server-standalone http://selenium-release.storage.googleapis.com/index.html
选择版本与安装的selenium版本保持一致
-
上传selenium-server-standalone 至系统
Testbed搭建
Java 安装及配置
- 下载jdk压缩包,官方地址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- 上传至Linux (FTP 、SCP等)
- 解压及配置环境变量
test@kali:~$ tar -xzvf jdk-8u212-linux-x64.tar.gz
vi .profile 加入环境变量
export JAVA_HOME=/home/test/jdk1.8.0_212/bin
export PATH=$PATH:$JAVA_HOME
环境变量生效
test@kali:~$ source ~/.profile
验证环境变量
test@kali:~$ java
被测对象Nexus安装
- 下载Nexus https://www.sonatype.com/download-oss-sonatype
- 上传至Linux (FTP 、SCP等)
- 解压及运行
test@kali:~$ tar -xzvf nexus-3.19.1-01-unix.tar.gz
test@kali:~$ cd nexus-3.19.1-01/bin
test@kali:~/nexus-3.19.1-01/bin$ ./nexus start
安装完打开效果如下图:
UI Test Client 搭建
Java 安装及配置
windows下安装jdk及配置环境变量
(此处不再赘述)
selenium-server-standalone下载及安装
- 下载selenium-server-standalone http://selenium-release.storage.googleapis.com/index.html
选择版本与服务端(Hub节点)安装的selenium版本保持一致
Internet Explore配置
- IE 设置勾选所有“启动保护模式”
- IE 确保缩放比例为100%
流程串联
创建RF脚本并上传至Auto-Testing Server
*** Setting ***
Library SeleniumLibrary
*** Test Cases ***
OpenUrl
Open Browser http://192.168.31.86:8081 Ie None http://192.168.31.147:4444/wd/hub
Close Browser
~
启动Hub
root@ubuntu:~# java -jar selenium-server-standalone-3.141.0.jar -role hub -port 4444
10:35:52.172 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.0, revision: 2ecb7d9a
10:35:52.285 INFO [GridLauncherV3.lambda$buildLaunchers$5] - Launching Selenium Grid hub on port 4444
2020-02-02 10:35:52.681:INFO::main: Logging initialized @738ms to org.seleniumhq.jetty9.util.log.StdErrLog
10:35:52.898 INFO [Hub.start] - Selenium Grid hub is up and running
10:35:52.899 INFO [Hub.start] - Nodes should register to http://192.168.31.147:4444/grid/register/
10:35:52.900 INFO [Hub.start] - Clients should connect to http://192.168.31.147:4444/wd/hub
10:35:56.641 INFO [DefaultGridRegistry.add] - Registered a node http://192.168.31.192:30500
详细参数另起文档详述
启动Node监听
D:\>java -jar selenium-server-standalone-3.141.0.jar -role node -hub http://192.168.31.147:4444/grid/register
19:07:33.020 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.0, revision: 2ecb7d9a
19:07:33.099 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Launching a Selenium Grid node on port 28330
2020-02-02 19:07:33.356:INFO::main: Logging initialized @502ms to org.seleniumhq.jetty9.util.log.StdErrLog
19:07:33.502 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
19:07:33.544 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 28330
19:07:33.545 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Selenium Grid node is up and ready to register to the hub
19:07:33.644 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
19:07:33.780 INFO [SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://192.168.31.147:4444/grid/register
19:07:33.792 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use
详细参数另起文档详述
执行RF脚本
root@ubuntu:~# robot LoginNexus.robot
==============================================================================
LoginNexus
==============================================================================
OpenUrl | PASS |
------------------------------------------------------------------------------
LoginNexus | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /root/output.xml
Log: /root/log.html
Report: /root/report.html
结果展示
19:13:21.321 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
19:13:21.692 INFO [SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://192.168.31.147:4444/grid/register
19:13:21.780 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use
19:13:28.545 INFO [ActiveSessionFactory.apply] - Capabilities are: {
"browserName": "internet explorer",
"platform": "WINDOWS",
"version": ""
}
19:13:28.548 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.grid.session.remote.ServicedSession$Factory (provider: org.openqa.selenium.ie.InternetExplorerDriverService)
Started InternetExplorerDriver server (64-bit)
3.14.0.0
Listening on port 44178
Only local connections are allowed
19:13:29.922 INFO [ProtocolHandshake.createSession] - Detected dialect: W3C
19:13:29.945 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 6447f3fd-14a9-4823-8b0e-5e3370bc2a80 (org.openqa.selenium.ie.InternetExplorerDriverService)
19:13:31.997 INFO [ActiveSessions$1.onStop] - Removing session 6447f3fd-14a9-4823-8b0e-5e3370bc2a80 (org.openqa.selenium.ie.InternetExplorerDriverService)
[1]: https://softwaretester.info/robot-framework-selenium-grid-2-0/
[2]: https://stackoverflow.com/questions/29369339/robot-framework-selenium-standalone-only-java-installed
[3]: https://stackoverflow.com/questions/48682708/selenium-standalone-server
[4]:https://www.jianshu.com/p/05784d35ee34