0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

电子工程师 来源:全栈软件测试在线 作者:全栈软件测试在线 2022-08-08 10:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

01

需求背景

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

3542a30a-16c1-11ed-ba43-dac502259ad0.png

简单的UI自动化架构

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

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

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

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

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

35576b78-16c1-11ed-ba43-dac502259ad0.png

并发测试框架

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

整体架构如下:

35684c54-16c1-11ed-ba43-dac502259ad0.png

并发分布式测试框架

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

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

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

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

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

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

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

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

02

框架搭建

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

3580321a-16c1-11ed-ba43-dac502259ad0.png

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

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

03

测试环境搭建


1、安装docker

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

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

3593a0a2-16c1-11ed-ba43-dac502259ad0.png

win7安装docker toolbox

(2)设置环境变量

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

35a3536c-16c1-11ed-ba43-dac502259ad0.png

设置环境变量

(3)开始使用

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

35b82cba-16c1-11ed-ba43-dac502259ad0.png

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

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

35dddc58-16c1-11ed-ba43-dac502259ad0.png

docker启动ok

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

35efbb80-16c1-11ed-ba43-dac502259ad0.png

xshell连接docker宿主机

35fbde9c-16c1-11ed-ba43-dac502259ad0.png

2、下载或制作相关镜像

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

36116870-16c1-11ed-ba43-dac502259ad0.png

selenium/hub镜像

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

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

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

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

3629251e-16c1-11ed-ba43-dac502259ad0.png

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-debug

docker run -P -d --link selenium_hub:hub selenium/vnc-node-chrome-debug

-P:随机生成映射端口号,上文中的-p是指定特定的端口号,这里node并不需要知道容器内部的端口号,所以随机映射即可

--link:指定selenium-node容器依赖容器selenium_hub

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

363eb74e-16c1-11ed-ba43-dac502259ad0.png

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

365af4d6-16c1-11ed-ba43-dac502259ad0.png

selenium容器启动成功

04

多线程并发测试框架搭建

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

1、测试用例

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

367e28a2-16c1-11ed-ba43-dac502259ad0.png

测试用例

2、多线程并发框架

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

368fabb8-16c1-11ed-ba43-dac502259ad0.png

各文件代码如下:

utils.py:

369c10ce-16c1-11ed-ba43-dac502259ad0.png

utils.py

36ac124e-16c1-11ed-ba43-dac502259ad0.png

utils.py

multiThreadings.py

36c05812-16c1-11ed-ba43-dac502259ad0.png

multiThreadings.py

callRobot.py

36cd4fea-16c1-11ed-ba43-dac502259ad0.png

callRobot.py

36d9c266-16c1-11ed-ba43-dac502259ad0.png

callRobot.py

run.py

36eb8e10-16c1-11ed-ba43-dac502259ad0.png

run.py

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

05

运行

这里开启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容器的执行日志:

36feec76-16c1-11ed-ba43-dac502259ad0.png

selenium_hub容器日志

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

3710c8ce-16c1-11ed-ba43-dac502259ad0.png

node容器内浏览器运行情况

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

37325890-16c1-11ed-ba43-dac502259ad0.png

合并报告

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

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化
    +关注

    关注

    31

    文章

    6012

    浏览量

    90838
  • 虚拟机
    +关注

    关注

    1

    文章

    976

    浏览量

    30764
  • Docker
    +关注

    关注

    0

    文章

    540

    浏览量

    14467

原文标题:城会玩!Selenium+Docker成功解决这一大难题!

文章出处:【微信号:全栈软件测试在线,微信公众号:全栈软件测试在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Java并发编程的“基石”——多线程概念初识

    。Java 的内存可见性机制(如 happens-before 原则)能够确保在极端并发下,任何一个调度节点看到的集群状态都是一致且准确的,从根本上杜绝了“脑裂”和资源超卖。 其次是 精妙的多线程协同
    发表于 04-16 18:50

    通用自动化测试系统:FCT、ATE、ICT、PCBA功能测试

    在现代制造业中,自动化测试已经成为提高生产效率、降低错误率、提升产品质量的关键环节。尤其是在电子产品的测试过程中,FCT(功能测试)、ATE(自动测
    发表于 04-13 14:54

    ATE测试是什么?电源企业为什么必须上自动化测试

    在电源行业快速发展的年代,产品质量、生产效率与成本控制成为企业竞争的关键。很多电源厂家都在关注ATE 测试,但不少人仍不清楚 ATE测试是什么,也不明白自动化测试对于电源生产的重要意义
    的头像 发表于 03-24 14:37 459次阅读
    ATE<b class='flag-5'>测试</b>是什么?电源企业为什么必须上<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>?

    自动化测试的「千里眼」:当RTSM远程控制遇上自动化测试效率直接拉满!

    自动化痛点】自动化测试的“黑箱困境”:你真的敢说“完全放心”? 凌晨2点,测试工程师小李盯着电脑屏幕上的自动化脚本进度条——第17步卡住了
    的头像 发表于 12-11 11:26 552次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>的「千里眼」:当RTSM远程控制遇上<b class='flag-5'>自动化</b>,<b class='flag-5'>测试</b>效率直接拉满!

    多线程的系统

    多线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执
    发表于 12-08 07:55

    Linux多线程对比单线程的优势

    。「提高响应性」:线程可以使程序更加响应用户输入或其他事件,避免阻塞。线程相比单线程的优点:「并发性」:多线程可以同时执行多个任务,而单
    发表于 12-01 06:11

    CI/CT自动化测试解决方案

    北汇信息可以提供Jenkins、Gitlab Runner CI和自研平台等的CI/CT整体解决方案,通过CI/CT自动化测试执行、测试策略定制、测试任务
    的头像 发表于 11-12 16:01 1683次阅读
    CI/CT<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>解决方案

    测试小白3分钟上手,零代码自动化测试平台,15分钟搭建自动化测试方案

    还在为不懂代码、搭建测试方案耗时久而发愁?ATECLOUD 零代码自动化测试平台,专为自动化测试量身打造,小白3 分钟就能轻松上手,15 分
    的头像 发表于 09-22 17:52 1094次阅读
    <b class='flag-5'>测试</b>小白3分钟上手,零代码<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台,15分钟搭建<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>方案

    电源模块的短路保护如何通过自动化测试软件完成测试

    在当今电力电子领域,电源模块的可靠性至关重要,短路保护作为其关键特性,需通过精确的自动化测试软件进行验证。本文将整理如何借助自动化测试软件ATECLOUD完成电源模块短路保护的
    的头像 发表于 09-03 19:10 1100次阅读
    电源模块的短路保护如何通过<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>软件完成<b class='flag-5'>测试</b>

    BitsButton嵌入式按键处理框架

    支持 按键结果高性能缓冲区支持 按键模拟器Window环境支持 按键模拟器Linux/macOS环境支持 自动化测试框架支持 ✨ 已完成完整测试
    发表于 08-02 11:24

    除了LabVIEW还有哪些自动化测试的软件?

    NI 开发的 LabVIEW 软件在工业控制领域中一直占有举足轻重的地位,其市场占有率在一众平台中也是领先的,那么除了 LabVIEW 拿有哪些自动化测试的软件?本文将介绍一些自动化测试
    的头像 发表于 07-30 17:18 1356次阅读
    除了LabVIEW还有哪些<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>的软件?

    自动化测试平台ATECLOUD推出AI算法功能

    作为纳米软件自主研发的自动化测试平台,ATECLOUD 始终致力于为用户提供高效优质的测试解决方案。面对5G、AI等前沿技术的迭代发展,平台深度融合新技术持续升级测试能力,最新推出的A
    的头像 发表于 07-22 16:10 1103次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台ATECLOUD推出AI算法功能

    多线程的安全注意事项

    多线程安全是指多个线程同时访问或修改共享资源时,能够保证程序的正确性和可靠性。 开发者选择TaskPool或Worker进行多线程开发时,在TaskPool和Worker的工作线程中导
    发表于 06-20 07:49

    鸿蒙5开发宝藏案例分享---应用并发设计

    ?** 鸿蒙并发编程实战指南:解锁ArkTS多线程黑科技** 嘿,开发者朋友们! 今天给大家扒一扒鸿蒙官方文档里藏着的并发编程宝藏—— 100+实战场景解决方案 !从金融理财到游戏开发,从折叠屏适配
    发表于 06-12 16:19

    UTP系统通过ModBus协议对温度传感器的自动化测试介绍

    一、UTP系统简介 宏控UTP协同自动化测试系统(简称UTP测试系统)是一款通用的自动化测试系统,支持对总线通信(如串口、CAN、以太网等)
    的头像 发表于 06-07 15:12 1043次阅读
    UTP系统通过ModBus协议对温度传感器的<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>介绍