百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

「软件测试」Selenium+Docker,轻松实现测试环境的自动化搭建

yuyutoo 2025-01-31 16:04 11 浏览 0 评论

日常测试中会遇到对web应用进行UI自动化的测试场景,一般常用的工具是使用Selenium一套简单的UI自动化架构如下:


简单的UI自动化架构


上图即为简单搭建的一套UI自动化测试架构,但存在如下缺点:

  • 串行执行测试用例:即同一时刻只启动一个进程去启动一个浏览器进行测试,有时工作中需要进行浏览器的兼容性测试,这样的话只能等一个进程结束后,再开启另一个进程开始另一个浏览器的测试,效率很低。

  • 一台机器只能安装一个版本的浏览器:有时兼容性测试不仅要测试不同浏览器的情况,还要测试同一浏览器不同版本的情况,通常一台机器只能安装1个版本的chrome或firefox,这样就没办法测试不同版本的兼容性情况了。

  • 测试脚本与浏览器部署在同一台机器,试想一台机器既跑测试脚本,又开启进程启动浏览器进行测试,严重消耗机器硬件资源。


为了解决(1)的问题,可以考虑用多线程并发的方式执行测试用例,如下图

并发测试框架


为了解决(2)和(3)的问题,可以在并发框架的基础上,采用SeleniumGrid这一分布式测试工具,实现测试脚本和测试执行节点的分离,即用远程机作为SeleniumNode,在其上安装不同版本的不同浏览器,这样在本机运行测试脚本后,测试脚本会向SeleniumGrid发起测试请求,SeleniumGrid会寻找当前处于空闲状态的节点,并在其上执行测试。


整体架构如下:

并发分布式测试框架


至此,这种并发分布式测试框架基本上就可以满足我们的日常测试需求了,但仍然存在缺点:


(1) 执行节点机配置麻烦:常用的方式就是为每个执行节点配一台虚拟机,然后在每台执行节点机上都要重新配置一遍测试环境,最重要的一点是,测试资源很紧张,没有那么多虚拟机供我们使用。


为了解决(1)的问题,我们需要一台测试执行节点,需要搭建一台虚拟机,然后在其上进行环境配置,如果再需要一台测试执行节点,又要重复上述的过程。一是搭建一台虚拟机周期较长,虚拟机启动时间较长,且虚拟机资源依赖于硬件配置,二是每台虚拟机都要重新配置。


而利用docker可以解决上述问题,其具有以下优点:

  • docker镜像不并包含linux内核,多个docker镜像共用宿主机的linux内核,即相当于我们只要有一个linux内核虚拟机就可以了,可以减少对硬件资源的依赖。

  • 一个docker镜像可以运行很多docker容器,每个docker容器之间都是物理隔离的。

  • docker镜像仓库里会有其他人已经制作好的相关镜像,不需要我们自己制作,或者我们把其他人的镜像拿来,改下某些配置变为我们自己想要的镜像就ok了


至此,我们可以利用docker的容器来作为UI自动化测试的执行节点,取代之前的虚拟机

框架搭建


基于以上介绍,整体的测试框架如下:

基于docker的多线程并发UI自动化测试框架


框架分为3个部分,多线程并发测试框架采用Python编写,调用robot framework执行测试用例,并将测试请求发送给docker容器中运行的SeleniumHubSeleniumHub寻找处于空闲状态的SeleniumNode执行节点进行web测试,测试结束后,在部署测试脚本的主机上生成各线程运行后的测试报告,再调用robot frameworkrebot命令合并测试报告,生成最后的汇总测试报告发布。下面详细介绍搭建步骤。


测试环境搭建


1、安装docker

(1)win7用户,进入Docker Toolbox的下载网页,选择windows版本下载,win10用户进入docker官网下载Docker For Windows安装。


整个安装过程非常简单,安装完成后,可以在桌面得到如下的三个图标:

win7安装docker toolbox


(2) 设置环境变量

安装完成后,建议先配置一个环境变量MACHINE_STORAGE_PATH,来自定义虚拟机保存的位置,因为之后下载的镜像越来越多,都是放在虚拟机的虚拟磁盘文件中,虚拟磁盘文件会越来越大,放在默认的C盘用户目录下可能会在以后造成一些麻烦,参考下图:

设置环境变量


(3) 开始使用

点击Docker Quickstart Terminal图标,从而打开一个Docker Toolbox terminal,若报如下图信息,则去https://github.com/boot2docker/boot2docker/releases下载对应版本的boot2docker.iso放到MACHINE_STORAGE_PATH/cache下,再重新打开Docker Quickstart Terminal

下载相应的boot2docker.iso到MACHINE_STORAGE_PATH/cache下


再次打开terminal后,terminal会自动进行一些设置,需要点时间,全部完成后,出现如下结果表示docker安装ok了:

docker启动ok


另外,我们可以记下docker宿主机的IP 192.168.99.100,可以用xshell来ssh登录docker宿主机方便操作,账号和密码是docker/tcuser:

xshell连接docker宿主机



2、下载或制作相关镜像

docker pull selenium/hub,它会自动从镜像源中下载别人制作好的最新的selenium/hub镜像,可以通过docker images看到下载好的selenium/hub镜像

selenium/hub镜像


对于seleniumnode镜像,兼容性测试时,需要我们覆盖更多版本的浏览器,所以,可以选择自己制作Dockerfile来生成自己想要的浏览器版本的镜像。


然后通过如下命令来构建镜像,其中selenium/vnc-node-firefox-debug是自己起的镜像名,后面的.表示Dockerfile所在的目录为当前目录:

docker build -t selenium/vnc-node-firefox-debug .

用同样的方法可以生成chrome浏览器的镜像,生成后的镜像如下图:

selenium-node-chrome/firefox镜像


3、启动容器

(1)启动selenium/hub容器

docker run -p 5555:4444 -d --name 'selenium_hub'  selenium/hub
  • run:通过镜像启动一个容器
  • -p:端口映射,5555是容器宿主机(运行docker的主机)的端口,4444是我们容器(运行selenium_hub虚拟机)的端口。我们把容器的4444端口映射给docker主机的5555端口,就可以通过docker主机的5555端口来访问selenium_hub容器了


(2)启动selenium/node容器

docker run -P -d --link selenium_hub:hub  selenium/vnc-node-firefox-debugdocker run -P -d --link selenium_hub:hub  selenium/vnc-node-chrome-debug
  • -P:随机生成映射端口号,上文中的-p是指定特定的端口号,这里node并不需要知道容器内部的端口号,所以随机映射即可
  • --link:指定selenium-node容器依赖容器selenium_hub


容器启动完后,可通过docker ps查看启动的容器:

启动的容器


在浏览器中查看selenium容器是否正常启动,http://192.168.99.100:5555/grid/console

selenium容器启动成功


多线程并发测试框架搭建


采用Python编写多线程并发程序,robot framework执行测试用例。


1、测试用例

在robot framework中,将测试用例打上标签tag,来区分要测试的不同版本的不同浏览器,remote_url为selenium_hub容器的地址,已将该容器的4444端口映射到docker宿主机的5555端口,所以这里直接通过宿主机的5555端口访问hub容器。

测试用例


2、多线程并发框架

多线程并发框架采用Python编写,程序目录如下:


各文件代码如下:

  • utils.py:

utils.py

utils.py


  • multiThreadings.py

multiThreadings.py


  • callRobot.py

callRobot.py

callRobot.py

  • run.py

run.py


脚本run.py接收两个参数,第1个参数为要执行的robot测试套件,第2个参数为要执行的robot用例的标签,各标签之间以逗号分隔,有多少个标签,就启动多少个线程来调用robot的pybot命令执行打上相应标签的测试用例。


运行


这里开启2个node节点,一个chrome,一个firefox

cmd下执行脚本,robot测试套件名为TestSuite.txt,执行标签为chromeNode1,firefoxNode1的测试用例:

python run.py TestSuite.txt selenium_node=chromeNode1,firefoxNode1

docker宿主机下,执行docker logs -f selenium_hub,可以查看hub容器的执行日志:

selenium_hub容器日志


通过vnc viwer可视化查看node容器内浏览器的运行情况:

node容器内浏览器运行情况


最终rebot命令合并各线程生成的测试报告,合并后的报告如下:

合并报告


至此,基于docker的selenium并发web应用UI自动化测试框架搭建完成。之后,自己会再探究将docker容器的创建,启动和停止自动化,实现测试环境的自动化搭建。

相关推荐

YAML配置文件简介及使用(yaml 配置)

简介YAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)的缩写。相比JSON格式的方便。...

教你如何解决最常见的58种网络故障排除方法

1.故障现象:网络适配器(网卡)设置与计算机资源有冲突。分析、排除:通过调整网卡资源中的IRQ和I/O值来避开与计算机其它资源的冲突。有些情况还需要通过设置主板的跳线来调整与其它资源的冲突。2.故障现...

一分钟带你了解服务器网卡(服务器网卡怎么用)

今天小编和大家聊一下服务器的网卡。什么是网卡?简单说网卡就是计算机与局域网互连的设备。计算机主要通过网卡接入网络。网卡又称为网络适配器或网络接口卡NIC(NetworkinterfaceCard)...

linux文件之ssh配置文件的含义与作用

ssh远程登录命令是操作系统(包括linux和window系统)下常用的操作命令,可以帮助用户,远程登录服务器系统,查看,操作系统相关信息。linux系统对于ssh命令有专门保存其相关配置的目录和文件...

Cilium 官方文档翻译 - IPAM(二)Kubernetes Host模式

KubernetesHostScopeciliumIPAM的kuberneteshost-scope模式通过选项ipam:kubernetes开启,将集群IP地址分配委托给每个独立的节点,并...

域名劫持跳转,域名劫持跳转的解决办法只需5步

简单来说,域名劫持就是把原本准备访问某网站的用户,在不知不觉中,劫持到仿冒的网站上,例如用户准备访问某家知名品牌的网上商店,黑客就可以通过域名劫持的手段,把其带到假的网上商店,同时收集用户的ID信息和...

Linux基本命令(linux基本命令总结)

...

Linux 磁盘和文件系统管理(linux磁盘管理fdisk)

1检测并确认新硬盘...

windows host文件怎么恢复?局域网访问全靠这些!

windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...

Nginx配置文件详解与优化建议(nginx 配置详解)

1、概述今天来详解一下Nginx的配置文件,以及给出一些配置建议,希望能对大家有所帮助。...

Mac电脑hosts文件锁定,如何修改hosts文件权限

有时候我们需要修改hosts文件,但是网上很多教程都行不通,使用sudo命令也不行。其实有一个很简单的方法。打开终端命令行,使用如下命令即可:sudochflags-hvnoschg/etc/...

windows电脑如何修改hosts文件?(windows 修改hosts文件)

先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...

Vigilante恶意软件行为怪异:修改Hosts文件以阻止受害者访问盗版网站

Sophos刚刚报道了一款名叫Vigilante的恶意软件,但其行为却让许多受害者感到不解。与其它专注于偷密码、搞破坏、或勒索赎金的恶意软件不同,Vigilante会通过修改Hosts文件...

hosts文件无法修改几种现象和解决方法

第一种、hosts文件修改完不是直接保存而是弹出另存为窗口解决:1、右击hosts文件——属性——把“只读”前面勾去掉。第二种、打开hosts文件时提示“你没有权限打开该文件,请向文件的所有者或管理员...

hosts文件位置在哪里,教你hosts文件位置在哪里

Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的I...

取消回复欢迎 发表评论: