使用可视化的Docker进行自动化测试

2023-05-16

在这里插入图片描述

01 前言

顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以实现可视化,同时可以对浏览器进行相关的操作。

02 开篇

首先我们先了解什么是有头浏览器和无头浏览器的区别,有头的话不用怎么说了,就是我们平时使用的浏览器,能看到图形化界面,和用户有深度的交互,那无头浏览器即headless browser,是一种没有界面的浏览器。

既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面,省去可视化,也就是说去除了用户交互的部分,那这样对于浏览器来说是提高了浏览器整体运行的效率,提高自动化的兼容性稳定性,目前行业最流行的无头浏览器分别是Puppeteer和PhantomJS,但后者已经不再维护了。

图片

说到这里大家也可能已经理解到现在大部分的在docker部署的浏览器都是无头的,因为docker本身就是不提供用户界面的,所以一般制作浏览器镜像都会优先考虑无头浏览器

但是,用过docker无头浏览器的小伙伴应该都会遇到一个问题,就是在测试浏览器外的交互,比如上传文件,这类型的用例基本是不可能实现的,所以无头浏览器docker环境作为自动化测试的一个载体存在一定的局限性,但是有局限也就有突破的方法,接下来就是讲解一下在docker里面我们是怎么使用有头浏览器来做自动化测试

从上面的一些问题我们能因引出测试需求,那就是解决如何在docker上做浏览器测试使其达到的效果和在我们平常使用的桌面环境上深度交互的运行效果,我们看看最后的效果

图片

看到这个,大家应该也毕竟熟悉了,其实就是Docker的NoVnc的镜像,图形界面化docker环境,用浏览器直接打开就可以看到桌面,还可以直接操作,与一个普通界面操作系统基本无差,估计看到这里大家百度一下论坛搜一下都可以马上去用了,直接下个novnc镜像装个macaca selenium什么就跑一下脚本就能运行起来,很简单。

但是,知其然,也要知其所以然,那接下来就和大家说一下这个能够运行有头浏览器的docker环境的一些技术栈以及它的构建过程

03 技术栈

对于浏览器的那些driver和docker本身就不多说了,这次主要分享支持起浏览器可以在图形界面化的docker中运行的技术栈,其中主要的几个模块和组件:Xvfb,VNC,noVNC

01 Xvfb

Xvfb是X virtual framebuffer的简写,顾名思义,它最大的作用是可以代替完整的X server的功能,简单地说就是可以用虚拟的方式来模拟程序在有图形界面条件下运行的情况,大家现在用的大部分docker无头浏览器就是用到它,Xvfb也是最重要的模块,没有这个模块的支撑的话我这篇文章可以不用写了

我们在做自动化测试的时候有一定的场景可以不用关注浏览器的整个运行过程,大部分时候都是执行等结果出报告就好,所以在做这种场景的测试的话可以先运行xfvb,接着就按照平时自动化测试的流程去执行

对于docker本身要去安装这个模块的,以ubuntu镜像环境为例:

首先安装Xvfb

sudo apt-get install Xvfb

安装完以后运行

Xvfb :99 -ac 2>/dev/null &
export DISPLAY=:99  

验证是否启动成功,看看启动firefox的时候输出的日志正不正常就OK了

>>firefox

对于dockerfile方面也可以参考一下

FROM macaca-electron
EXPOSE 3456 22
ENTRYPOINT Xvfb -ac -screen scrn 1280x2000x24 :9.0 & \
      export DISPLAY=:9.0 \
      macaca server \    
         /usr/sbin/sshd -D

其中macaca-electron是自制的一个已经安装好Xvfb和macaca相关驱动的镜像,这里举例子,下面是没启动Xvfb时启动macaca执行自动化测试的情况
在这里插入图片描述

这里就直接报找不到Xvfb了,除了macaca大家也可以试试selenium,基本是一样的错误,那启动之后的我们也试一下
在这里插入图片描述

运行正常,同时我看看报告的截图,也是能正常显示的

在这里插入图片描述

这就是目前浏览器docker环境用无头方式做自动化测试的一个案例,主要就是Xvfb的支撑

02 VNC

VNC是Virtual Network Console(虚拟网络控制台)控制台的缩写,是业界优秀的远程桌面控制组件(工具),主要分为vncviewer和vncserver两个模块,其中VNC的原理也简单讲解一下:

在这里插入图片描述

上图是VNC的运行原理图,从一些参考资料解析,其控制是基于tcp/ip实现的,其中vnc server扮演了双重角色,vnc protocal是基于RFB protocal的实现,其传输方式包括RFB协议传输和X协议传输,自己理解后简单总结为X协议就是VNC用来获取X服务的信息(前文提前X服务信息可以用Xvfb模拟),然后经过RFB协议进行缩放等一系列操作投放到本地vncviewer中显示

在这里插入图片描述

对于vnc的部署安装可以直接使用现成的docker镜像,用docker search vnc可以搜出来,比如dorowu/ubuntu-desktop-lxde-vnc,然后在里面部署相关组件就可以用起来了

但是,只是通过VNC来进行自动化测试,是没办法模拟键盘和鼠标等一些操作,同时一些浏览器外的交互就实现不了,最明显的就是上传文件,那如果要解决这种场景,那基本上环境那块就要把浏览器外的环境也一起模拟进来,那就是接下来要讲的用noVNC的方式来解决这个问题

03 noVNC

VNC本身需是自己的客户端来显示获取到的图像信息的,如果要在Web页面上显示,就可以利用到noVNC

noVNC是一个HTML5 VNC客户端,采用HTML 5 WebSockets, Canvas和JavaScript实现,noVNC被普遍用在各大云计算、虚拟机控制面板中,noVNC采用WebSockets实现,但是目前大多数VNC服务器都不支持WebSockets,所以noVNC是不能直接连接VNC服务器的,需要一个代理来做WebSockets和TCP sockets 之间的转换。这个代理在noVNC的目录里,叫做Websockify

最后实现的效果就是本文的第一张图片的运行情况,直接利用浏览器可以操作一个linux操作系统,然后其实就相当于一台现成的虚拟机。

整套流程如下图:

在这里插入图片描述

这里也演示一下直接操作使用的效果,基本上和平时使用的虚拟机无异,而且是用浏览器打开的,不需本地部署

在这里插入图片描述

04 应用实践

说完原理那就说一下应用,目前这项技术就应用在自己前段时间研发的UI自动化测试平台上,这里也演示给大家看看

在这里插入图片描述

就是通过noVNC实现和自动化测试平台的一个互通,同时节点会保持发送心跳到平台更新状态,当执行自动化测试的时候如下图:

在这里插入图片描述

通过双向通信获取到节点的状态,这里是在任务调度这块逻辑用到的,尤其是多个项目执行自动化测试,但节点又不够的情况下就可以合理调度,就不会想selenium-grid那样不可控,可以需要的时候还可以去节点环境中看看执行情况,这就是Docker有头浏览器的一个应用。

在这里插入图片描述

总结:

用Docker的有头浏览器确实能够让我们可以很好的更贴近实际情况去实现自动化测试,当然任何方案都不是完美的,我们需要做的是针对业务上遇到的问题去设计方案解决。

下面是我们的刷题时刻!扫码一起来小程序 刷面试题 吧, 看你知道多少?不知道多少?

在这里插入图片描述

下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
在这里插入图片描述

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用可视化的Docker进行自动化测试 的相关文章

随机推荐

  • to_string函数的用法

    to string 函数 xff1a 将数字常量转换为字符串 xff0c 返回值为转换完毕的字符串 头文件 xff1a include lt string gt string s 61 to string i 将整数i转换为字符串表示形式
  • EKF2学习之控制融合模式

    By snowpang 2017 8 10 1 存储控制状态值 xff0c 并开启状态变化检测 control status value bitmask containing filter control status union filt
  • 经典算法 (四) 桶排序

    时隔一年 xff0c 小葵花课堂再次开课 xff0c 这次开课不会像之前那样很早就停课了 xff0c 在此给大家道个歉 xff1a 对不起 嘻嘻 又到了毕业季了 xff0c 废话不多说 xff0c 继续我们的算法学习 一丶算法描述 桶排序
  • 程序调试记录(纯自用)

    Stack类测试 xff1a 在测试Stck类型的变量内容是否正确时 xff0c 经常会通过把所有值pop出来输出的方法 xff0c 这样容易造成一个问题就是 xff0c 栈已经被弄空了 xff0c 以后再用的时候就会是一个空栈 所以 xf
  • vector详解

    引言 emmm 这篇博客写作的缘由其实就是我在日常使用vector的时候发现对vector并不怎么了解所以决定写这篇博客的 写这篇博客 xff0c 我参考了vector C 43 43 Reference中的内容 xff0c 及侯捷先生的
  • Eigen快速入门

    Eigen快速入门 一个简单的例子 span class hljs preprocessor include lt iostream gt span span class hljs preprocessor include 34 Eigen
  • PX4 的 ECL EKF 公式推导及代码解析

    原创作者 USRL所长 64 CSDN 文章来源 https blog csdn net u010307048 article details 100553475 如需转载联系联系原创作者 作者整理的内容如下 xff0c 干货很多 xff0
  • git fatal: The remote end hung up unexpectedly错误解决方法

    在使用git更新或提交项目时候出现 34 fatal The remote end hung up unexpectedly 34 原因是推送的文件太大 那就简单了 xff0c 要么是缓存不够 xff0c 要么是网络不行 xff0c 要么墙
  • 公开课精华|机器人的带约束轨迹规划

    本文章总结于大疆前技术总监 xff0c 目前在卡内基梅隆大学读博的杨硕博士在深蓝学院的关于机器人的带约束轨迹规划的公开课演讲内容 全文约5000字 笔者不是机器人领域的 xff0c 因此特地去了解了一下杨硕博士 xff0c 深感佩服 xff
  • 自动驾驶的重要一环:谈谈感知前沿技术

    本文总结于Waymo研发经理周寅于2021年8月29日在深蓝学院的讲座 讲座内容主要包括自动驾驶系统的总览 xff0c 自动驾驶感知的介绍 xff0c 以及感知的前沿动态和总结 1 自动驾驶系统总览 关于自动驾驶系统 目前主流的L4级别自动
  • 论文精读 | slam中姿态估计的图优化方法比较

    一 摘要 对于位置环境中的自主导航问题 xff0c 同步定位与建图 Simultaneous localization and mapping SLAM 是一个非常重要的工具框架 根据SLAM字面含义可以得知 xff0c 获取正确的环境表征
  • 自动驾驶中的多种卡尔曼滤波算法及推导详解,值得一读!

    鉴于卡尔曼滤波算在多传感器融合系统中使用的普遍性 xff0c 本文将单独就卡尔曼滤波算法及自动驾驶中常用的改进卡尔曼滤波算法进行详细介绍 首先介绍卡尔曼滤波的基本方法 xff0c 然后介绍针对非线性系统改进的扩展卡尔曼滤波 xff0c 最后
  • 入门ROS其实也没有那么难!

    作者 xff1a Tassel 相信提出这个问题的小伙伴已经对ROS有一定的了解 xff0c 但不管是出于工程应用还是理论学习 xff0c 我们都有必要谈谈ROS的概念 xff0c 从概念去理解ROS ROS xff08 机器人操作系统 x
  • 论SLAM技术发展趋势

    2018年7月底 xff0c 深蓝学院发起并承办了 第一届全国SLAM技术论坛 浙江大学章国锋老师 香港科技大学沈劭劼老师 上海交通大学邹丹平老师 中科院自动化所申抒含老师在 圆桌论坛 xff1a SLAM技术发展趋势 上分享了SLAM技术
  • 华清远见嵌入式学习每周汇总

    每周学习总结 第一周数据结构Makefile的编写顺序表链表 xff08 含约瑟夫环之选猴王 xff09 Joseph circle 本周总结 第二周栈队列树二叉树二叉树的创建 本周总结 IO进程标准IO2 题目要求 xff1a 编程读写一
  • 注意项:dockerFile中安装常用的运维工具

    自己打镜像的时候 xff0c 如果依赖的基础镜像中没有一些常用的Linux运维工具 xff0c 需要自己记得提前安装一下 xff0c 免得线上出现问题需要排查时才发现没有工具 一些常用的如下 RUN yum install y telnet
  • Ubuntu16.04安装ROS kinetic

    ROS kinetic官网 xff1a http wiki ros org kinetic Installation Ubuntu 1 配置Ubuntu的资源库 xff1a 34 restricted 34 xff0c 34 univers
  • 鼠标光标变成了一个点

    今天使用华为云桌面 xff08 内部系统是win7 xff09 xff0c 鼠标光标悬停在普通文本上就变成了一个 不容易发现的点 xff0c 用起来很不方便 xff0c 如图 xff1a 可通过修改鼠标指针颜色和大小来调整解决 xff08
  • opencv--颜色物体追踪 图片的形态学处理函数

    目录 一 主要函数介绍 1 cv2 erode 2 cv2 dilate 3 cv2 findContours 4 cv2 circle 5 cv2 line 二 代码 这里首先确定是否安装imutils库 xff0c 这个库能让调整大小或
  • 使用可视化的Docker进行自动化测试

    01 前言 顺着docker的发展 xff0c 很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试 xff0c 这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以实现可视化 xff0c 同时可