当前位置: 首页 > news >正文

如何使用Docker实现分布式Web自动化!

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

01Xvfb

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

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

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

  • 首先安装Xvfb

sudo apt-get install Xvfb
  • 安装完以后运行

  1. Xvfb :99 -ac 2>/dev/null &

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

相关文章:

如何使用Docker实现分布式Web自动化!

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

从零开始:制作出色的产品原型图的详细教程

在设计产品的初始版本或模型时,产品原型起着非常重要的作用,可以帮助设计师和团队更好地了解产品需求和用户需求,优化和改进设计,确保设计最终满足用户的需求和期望。如果你不知道如何绘制产品原型图,绘制产品原型图的…...

美国访问学者签证如何申请加急办理?

许多中国学者梦想着前往美国深造,积累更多的学术经验和知识。然而,签证申请过程可能会变得复杂和繁琐,特别是如果你需要在紧急情况下前往美国。但别担心,本文知识人网小编将为您介绍美国访问学者签证加急办理的一些建议和步骤。 首…...

33 WEB漏洞-逻辑越权之水平垂直越权全解

目录 前言水平,垂直越权,未授权访问Pikachu-本地水平垂直越权演示(漏洞成因)墨者水平-身份认证失效漏洞实战(漏洞成因)原理越权检测-Burpsuite插件Authz安装测试(插件使用)修复防御方案 前言 越权漏洞文章分享:https://www.cnblogs.com/zhen…...

【FreeRTOS】【STM32】02 FreeRTOS 移植

基于 [野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》 正点原子《STM32F429FreeRTOS开发手册_V1.2》 准备 基础工程,例如点灯 FreeRTOS 系统源码 FreeRTOS 移植 上一章节已经说明了Free RTOS的源码文件在移植时所需要的,FreeRTOS 为我们提供…...

STM32F4X 内部FLASH使用

STM32F4X 内部FLASH使用 STM32F4X 内部FLASHSTM32F4X内部FLASH结构STM32F40X和STM32F41X内部FLASH结构STM32F42X和STM32F43X内部FLASH结构 STM32F4X内部FLASH操作例程internal_flash.hinternal_flash.cmain.c 在嵌入式开发中,经常需要实时保存一些数据。如果工程的代…...

减小windows或linux虚拟机导出ova体积大小

减小windows或linux虚拟机导出ova体积大小 删除无用的文件,比如日志或者命令,程序等;去除磁盘碎片将不用的内存空间填充为0,便于vmdk压缩。 例子: 日志文件置空: 批量置空 /sf/data/log/ 目录下的日志文…...

WPF livecharts 折线图遮挡数字问题

在WPF里使用livecharts,如果折线图或者柱状图有多个的时候,可能会出现两个数字遮挡问题,这时候要设置DataLabelsTemplate 属性。 如LineSeries设置代码如下: 第一个折线图的DataLabelsTemplate var stackPanelFactory new Fra…...

电力系统数字化升级改造之配电室无人值守

随着科技的不断进步,电力系统的数字化升级改造已成为必然趋势。其中,配电室的无人值守是其中重要的一环。 配电室是电力系统的重要组成部分,其运行状态直接影响到电力系统的稳定性和可靠性。然而,传统的配电室存在很多问题&am…...

集合Set

目录 一、去重问题 一、去重问题 题目描述&#xff1a; 小明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性他先用计算机生成了N个1&#xff5e;1000之间的随机整数(N<1000),N是用户输入的&#xff0c;对于其中重复的数字&#xff0c;只保留一个&am…...

TCP/IP(二)导论

一 知识铺垫 以下内容参照 <<电子科技大学TCPIP协议原理>>全 ① 协议和标准 一组规则&#xff1a; 交通规则、学生上学的学生守则等;数据通信的规则,有一个专门的名称叫作协议 protocol语义&#xff1a;具体描述在通信当中,每一个信息的具体含义. 二进制bit流…...

Java之UDP,TCP的详细解析

练习四&#xff1a;文件名重复 public class UUIDTest { public static void main(String[] args) { String str UUID.randomUUID().toString().replace("-", ""); System.out.println(str);//9f15b8c356c54f55bfcb0ee3023fce8a } } public class Client…...

【总结】kubernates crd client-java 关于自定义资源的增删改查

Java model 准备 首先使用 crd.yml 和 kubernetes CRD 自动生成 Java model 类&#xff0c;这是一切的前提&#xff0c;之前在这个地方也卡了很久。如何生成在另外一个文章中已经有所记录。 使用 crd.yml 和 kubernetes CRD 自动生成 Java model 类 CustomObjectsApi 文档学习…...

蓝牙主要知识,一文概览

蓝牙知识相关 文章目录 蓝牙知识相关1.蓝牙版本的发展简史2.低功耗BLE PHY2.1 频段**2.2 BLE调制方案—GFSK**2.3 **蓝牙 LE 传输速度、功率和接收器灵敏度**2.4 **BLE 时分双工 (TDD)**3.BT主从连接过程3.1 主设备工作模式3.1.1 积木编程控制台3.2 从设备工作模式3.2.1 蓝牙遥…...

Linux 守护进程

一 何为守护进程 守护进程&#xff08; Daemon &#xff09;也称为精灵进程&#xff0c;是运行在后台的一种特殊进程&#xff0c;它独立于控制终端并且周期性 地执行某种任务或等待处理某些事情的发生&#xff0c;主要表现为以下两个特点&#xff1a; 长期运行。守护进程是一…...

自动驾驶技术的基础知识

自动驾驶技术是现代汽车工业中的一项革命性发展&#xff0c;它正在改变着我们对交通和出行的理解。本文将介绍自动驾驶技术的基础知识&#xff0c;包括其概念、历史发展、分类以及关键技术要素。 1. 自动驾驶概念 自动驾驶是一种先进的交通技术&#xff0c;它允许汽车在没有人…...

解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述&#xff1a; 报错的整体代码为&#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 // 整体的报错代码为 &#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&…...

【JVM--StringTable字符串常量池】

文章目录 1. String 的基本特性2. 字符串拼接操作3. intern()的使用4. StringTable 的垃圾回收 1. String 的基本特性 String 声明为 final 的&#xff0c;不可被继承String 实现了 Serializable 接口&#xff1a;表示字符串是支持序列化的。String 实现了 Comparable 接口&am…...

Large Language Models Meet Knowledge Graphs to Answer Factoid Questions

本文是LLM系列文章&#xff0c;针对《Large Language Models Meet Knowledge Graphs to Answer Factoid Questions》的翻译。 大型语言模型与知识图谱相遇&#xff0c;回答虚假问题 摘要1 引言2 相关工作3 提出的方法4 实验设计5 结果与讨论6 结论 摘要 最近&#xff0c;有研…...

blender 之视频渲染(以三维重建path为例)

blender 之视频渲染&#xff08;以三维重建path为例&#xff09; 1.新建轨迹路径2.设置相机&#xff0c;使其按照path运动3.将相机视角对准物体4.修改帧率5.设置输出路径6.设置输出格式7.渲染 1.新建轨迹路径 新建轨迹 选中新建的BezierCycle&#xff0c;按住S&#xff0c;拖…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...