城会玩,Selenium+Docker成功解决这一大难题

01、需求背景

日常测试中会遇到对web应用进行UI自动化的测试场景,一般常用的工具是使用Selenium,一套简单的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自动化测试的执行节点,取代之前的虚拟机。

02、框架搭建

基于以上介绍,整体的测试框架如下:
在这里插入图片描述

框架分为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安装。

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

(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

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

另外,我们可以记下docker宿主机的IP 192.168.99.100,可以用xshell来ssh登录docker宿主机方便操作,账号和密码是docker/tcuser:
在这里插入图片描述

在这里插入图片描述

2、下载或制作相关镜像

docker pull selenium/hub,它会自动从镜像源中下载别人制作好的最新的selenium/hub镜像,可以通过docker images看到下载好的selenium/hub镜像
在这里插入图片描述

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

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

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

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

在这里插入图片描述
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容器

 
  1. docker run -P -d --link selenium_hub:hub selenium/vnc-node-firefox-debug

  2. docker 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
在这里插入图片描述

04、多线程并发测试框架搭建

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

1、测试用例

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

2、多线程并发框架

多线程并发框架采用Python编写,程序目录如下:
在这里插入图片描述

各文件代码如下:

utils.py:
在这里插入图片描述

在这里插入图片描述
multiThreadings.py
在这里插入图片描述

callRobot.py
在这里插入图片描述
在这里插入图片描述

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容器的执行日志:
在这里插入图片描述

 通过vnc viwer可视化查看node容器内浏览器的运行情况:
在这里插入图片描述
最终用rebot命令合并各线程生成的测试报告,合并后的报告如下:
在这里插入图片描述

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

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/659950.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十五届蓝桥杯省赛第二场C/C++B组H题【质数变革】题解

解题思路 首先,我们考虑一下整个数组都是由质数构成的情况。 当我们要将质数 x x x 向后移 k k k 个时,如果我们可以知道质数 x x x 在质数数组的下标 j j j,那么就可以通过 p r i m e s [ j k ] primes[j k] primes[jk] 来获取向后…

自动化神器,获客秘籍揭秘!

在如今这个信息爆炸的时代,企业如何高效精准地获客成为了一个重要课题。传统的营销方式不仅成本高昂,且效果往往难以衡量。然而,随着自动化工具的兴起,这一切都在悄无声息中发生着翻天覆地的变化。 我们得了解一下什么是自动化工具…

FebHost:为什么短域名在数字世界这么重要?

寻找完美的短域名,就好比在节假日商场促销时争夺一个最佳停车位,它关乎的是如何进场、出场以及给人留下深刻印象。 那么,为什么短域名如此重要?又该如何为自己寻找合适的短域名呢?下面,我们来详细探讨一下…

2024年Docker常用操作快速查询手册

目录 一、Linux系统上 Docker安装流程(以ubuntu为例) 一、卸载所有冲突的软件包 二、设置Docker的apt存储库(这里使用的是阿里云软件源) 三、直接安装最新版本的Docker 三、安装指定版本的Docker 四、验证Docker是否安装成功…

redis主从+哨兵搭建

redis主从哨兵搭建 1. 工程准备2. 基于Dockerfile构建2.1 拷贝工程到工作目录2.2 安装依赖包2.3 解压redis安装包、编译、安装2.4 拷贝配置文件到安装目录 3. 配置文件3.1 redis-master.conf3.2 redis-slave.conf3.3 sentinel-master.conf3.4 sentinel-slave.conf 4. 启动redis…

使用groovy+spock优雅的进行单测

使用groovyspock优雅的进行单测 1. groovyspock示例1.1 简单示例1.2 增加where块的示例1.3 实际应用的示例 2. 单测相关问题2.1 与SpringBoot融合2.2 单测数据与测试数据隔离2.3 SQL自动转换(MySQL -> H2) 参考 Groovy是一种基于JVM的动态语言&#x…

用户中心(中)

文章目录 数据库设计用户表建表 登录/注册后端一、规整项目目录二、实现基本数据库操作自动生成器的使用**(1) 模型 user 对象自动生成****(2) 测试一下** 三、注册逻辑四、测试 数据库设计 1.什么是数据库?存数据的 2.数据库里有什么?数据表(理解为exce…

基于ST的STM32F407ZGT6嵌入式uCOS-III V3.08 操作系统工程实验

1.基于的开发板 2.原理图截图: 3.主控芯片框图与性能特点: High-performance foundation line, Arm Cortex-M4 core with DSP and FPU, 1 Mbyte of Flash memory, 168 MHz CPU, ART Accelerator, Ethernet, FSMC The STM32F405xx and STM32F407xx family is based on the high…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的…

Transformer实战 单词预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:TensorFlow入门实战|第3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 一、定义模型 from tempfile import Tempor…

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层 问题场景: 1.浏览官网示例的时候图层看到大量线数据合并渲染的示例 2.矢量数据较大量级的时候,这种时候怎么在config.json文件中尝试配置呢&#x…

大数据运维之数据质量管理

第1章 数据质量管理概述 1.1 数据质量管理定义 数据质量管理(Data Quality Management),是指对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题,进行识别、度量、监控、预警等一…