使用pytest-xdist实现分布式APP自动化测试

news2024/11/26 9:38:17

不知道大家有没有遇到这样一种情况,实际工作中,app自动化测试的用例可能是成百上千条的,如果放在一台机器上跑,消耗的时间非常久,那能不能使用分布式的来跑测试用例呢?比如有1000条测试用例,给A机器分配500个,给B机器分配500个,同时去跑,这样耗时就大大减少。刚好pytest-xdist为我们提供了一种可能

什么是pytest-xdist?

pytest-xdist是一款分布式测试插件。它在pytest的基础上做了一些独有的测试执行模式的扩展。比如你有多个CPU或者多台机器,就可以使用它们做一些并行化的测试,并且它还是跨平台的,可以指定不同的python解释器或不同的平台来执行测试

pip install pytest-xdist

01 分布式测试的原理

上面有提到pytest-xdist实现分布式的方式有两种:一种是使用多CPU,一种是使用多台机器。

一般来说对于web自动化测试,使用多核CPU来做分布式比较合适,但对于app自动化测试来说,使用多台机器做分布式比较合适。这里主要介绍后者

pytest-xdist是工作方式是一个master对应多个worker,每个worker会按照master的要求来执行各自的测试集。

基本的执行流程为:

master在测试会话开始的时候会产生一个或多个worker。master和worker之间使用execnet及其网关进行通信。worker可以是本地的,也可以是远程的

worker作为pytest的执行者。在收集完一套完整的测试集后,worker将收集到的测试id发送给不承担执行任务的master

master接收所有节点发送来的结果,同时也会做一些可用性的检查以确保所有的worker都收集到相同的测试集。如果一切正常,它会将测试id列表转换为简单索引列表,每个索引对应着它在原始测试集列表中的位置。这种方案的可行性在于可以节约带宽,由于所有的worker都有相同的测试集列表,所以master可以指派其中一个worker只执行测试索引为3的用例

pytest-xdist有两种模式,each模式和load模式

each模式:

master会将所有的测试任务(这里的测试任务不是测试集,类似于测试指令,也就是上面说的测试索引)发送到每个worker上,每个worker都执行一遍完整的测试集。

举个例子,假如有1000条用例,分为A和B两个worker,那么A和B同时执行1000条用例

load模式:

master会先将25%的测试任务以轮询的方式发送给每个worker,剩下的等到worker执行完后再做分发。同样,有1000条用例,有A和B两个worker,那么先给A分发250个用例,再给B分发250条用例,剩下的500条用例等A和B执行完后再做分发,有可能此时A服务器的压力比较小,那么给A再分260条,B的压力比较大,给B再分240条。类似于负载均衡的概念

02 测试项目

以百度贴吧app为例,可以写简单的4条用例来测试。第一条测试的是欢迎页的滑动功能。如果用户点了同意,后面滑屏,能够正常滑动,点击立即体验,能够正常跳转,说明用例是通过的

图片

第二条测试的是欢迎页点击不同意,能够正常弹出提示,说明用例是通过的

图片

第三条测试搜索,如果用户滑屏后,在主页搜索栏输入关键字,能够搜索到指定的内容,说明用例通过

图片

最后一条测试登录,点击主页“我的”,能够进入到百度账号登录页面,说明用例通过

图片

03 环境准备

在搭建环境上,我准备了三台虚拟机,其中一台作为master,剩下两台作为执行的worker。为了避免不必要的麻烦,三台机器都统一使用python3.8,两台worker上都使用docker安装appium1.17.0,客户端采用两台系统为v7.1.2的夜神模拟器。

具体信息如下表所示:

服务器环境

在这里插入图片描述

04 搭建步骤

1、在worker上创建并启动docker容器

在两台worker上执行同样的操作,可以启动一个名为appium的容器

图片

看到这里或许会问,docker里的appium服务是怎么启动的,比较简单,代码可以通过命令行的方式启动appium服务

图片

2、模拟器设置

通过桥接的方式,设置tcpip端口,使得远程服务器可以通过adb连接到模拟器。具体方法是点开右上角的设置,进入系统设置,属性设置,勾选开启网络桥接模式,这时候应该会装一个桥接网卡,然后可以自己设置静态IP。保存后重启就可以了

图片

正常情况下,重启后ip应该会变成静态IP,但是夜神模拟器有个bug,ip还是随机ip,不过这一点不影响后续的操作

图片

接下来设置tcpip端口,通过如下命令设置好后,如果看到有restarting in TCP mode port:6666说明已经设置完成

图片

3、appium远程连接模拟器

在两台worker上分别执行远程连接命令,worker1对应模拟器1,worker2对应模拟器2。这里要主要adb connect 后面跟的是模拟器的实际ip地址加tcpip端口号6666,如果看到connected to ip:端口号,说明已经远程连接成功

图片图片
在这里插入图片描述

4、上传代码

使用命令或工具将代码上传到master上的/opt目录下并解压

图片

图片

main.py是项目测试执行的入口,为了适应分布式执行,我们需要对main.py做一些修改

图片

对最关键的几步做一个说明:

“-d”:

表示分布式参数

"–tx"后面跟着worker服务器的地址

且通过python=/opt/Python-3.8.0/bin/python3.8指定了python版本,通过chdir=/opt/pyexecnetcache指定了worker上同步测试集的目录,也就是master会将测试项目同步worker的该目录下

“–rsyncdir"后面跟”./",

表示将master上当前目录下的所有文件都同步

“TieBa-AutoTest”:

因为同步过去的项目在pyexecnetcache目录下,实际上是/opt/pyexecnetcache/TieBa-AutoTest,如果不加该配置,就进入不到TieBa-AutoTest目录下,由于worker上的pytest执行时是找test_开头的测试用例,所以会找不到测试用例,可以将其理解为cd TieBa-AutoTest

05 分布式执行

在master上执行python3 main.py命令就可以做分布式运行,gw0和gw1分别表示worker1和worker2,[4]表示共有4条测试用例

图片

此时去看worker的/opt目录下,已经同步到了测试项目

图片

再去观察两台模拟器,发现已经开始同步执行了

图片

06 测试报告

测试完成后,观察master上的执行结果信息,4条测试用例耗时不到3分钟,2条通过2条失败。

图片

但是在master上通过allure serve生成预览报告后,发现报告是空的

图片

两台worker上的报告预览展示正常,分别展示它们各自执行用例的报告信息

图片

图片

其原因是pytest-xdist对allure测试报告支持的不友好,各个worker的测试报告信息没有回传,使用pytest-html就没有这个问题。github上有人提出过这个问题。暂时留个“悬念”,下次再讲讲怎么解决这一问题

图片

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

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导耳机品牌排行前五名揭晓:精选5款音质卓越、佩戴舒适的优选产品!

骨传导耳机是目前非常热门的蓝牙耳机,有很多人都想去尝试,但又很多消费者再入手后,都出现了佩戴不舒服,音质刺耳等问题,作为一位拥有十多年经验的数码测评师,我有必要提醒大家,尽管市面上各种骨…

inpaint下载安装2024-inpaint软件安装包下载v5.0.6官网最新版附加详细安装步骤

Inpaint软件最新版是一款功能强大的图片去水印软件,这款软件拥有强大的智能算法,能够根据照片的背景为用户去除照片中的各种水印,并修补好去除水印后的图片。并且软件操作简单、界面清爽,即使是修图新手也能够轻松上手&#xff0c…

什么牌子的灯好不伤眼?带你了解什么灯对眼睛伤害最小

眼睛是人类获取信息最重要的感官器官之一,而近视则会导致视力模糊,进而影响学习效果和生活品质。因此,什么灯对眼睛伤害最小成为许多人迫切寻找的目标。本文将为各位家长解答目前许多家长选择为孩子保护视力的产品——护眼台灯。护眼台灯以其…

如何打开mobi文件?两个步骤解决

打开MOBI格式的电子书,其实相当简便。NeatReader作为一个兼容多格式多系统的电子书阅读器,对MOBI格式的支持自然不在话下。下面是使用NeatReader阅读MOBI文件的步骤: 第一步:下载并安装NeatReader: 首先,你…

如何利用Python处理站点数据、格点观测数据、再分析ERA5;GLDAS、遥感数据、水文数据、气象数据、陆面模式数据、气候变化数据等

Python是功能强大、免费、开源,实现面向对象的编程语言,Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台(x86和arm),Python简洁的语法和对动态输入的支持,再加上解释性语言的本质&…

ECharts 蓝色系-荧光图标折线图01案例

ECharts 蓝色系-荧光图标折线图01案例 图表意义 本折线图案例展示了一周内不同路线的使用情况或数据统计。通过折线的上升和下降,可以直观地观察到每条路线的流量或数据变化趋势,从而进行分析和决策。 效果预览 效果图展示不同路线的数据统计和个性化…

下载依赖有问题(只有自己有问题)

有缓存! 删除node_modules 命令:npm run clean 前提是该项目支持这个命令:package.json > scripts 内有 clean 例如下面这个就没有clean,则直接手动删除 清除缓存 npm cache clean --force pnpm store prune删除lock文件 …

Linux——ansible剧本

剧本(playbook) 现在,可以写各种临时命令 但如果,想把所有步骤,集合到一起,写到同一个文件里 让ansible自动按顺序执行 就必须要写“剧本” 剧本里面,也可以写临时命令,但是剧本…

AI辅助写作:如何高效完成毕业论文

写作这件事一直让我们从小学时期就开始头痛,初高中时期800字的作文让我们焦头烂额,一篇作文里用尽了口水话,拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业,结果毕业前的最后一道坎拦住我们的是毕业论文,这玩意不…

Nature发文介绍使用ChatGPT帮助学术写作的三种方式

文章链接:https://www.nature.com/articles/d41586-024-01042-3 一、介绍 这篇文章是由Dritjon Gruda撰写的,讨论了生成性人工智能(AI)在学术写作、编辑和同行评审中的三种应用方式。Gruda认为,尽管学术界对聊天机器…

opengauss安装postgis插件(Docker部署)

opengauss安装postgis插件 当然不管是安装opengauss还是给其安装插件,对其官方文档的解读是至关重要的,opengauss官网 点击最新开发版本进入快速入门链接。则可查看具体的各种指南。本次我使用的是极简版-容器安装。 下载源码并修改版本号 从官网的配置准备中可以发现,我们…

?? 与 || 在 JavaScript 中的微妙差别

起初,你可能会认为你可以随意替换任何你喜欢的人,对吗? 错误。他们并非你所想的那样。 我们必须一劳永逸地学习这个区别,以避免日后出现痛苦的错误。 这个差别是什么? 这是他们对待真值和假值的令人难以置信的对比。这…

这个是 2024 Idea最新激活码

idea的激活与安装 操作如下: ① 打开网站:https://web.52shizhan.cn 切换到:正版激活码,点击获取 ② 获取后的激活码,到idea里打开help->register 打开弹窗,如图 切换的activate code 输入激活码&…

Conmi的正确答案——Vue默认加载方式设置为Yarn后怎么修改

Vue版本:3 1和2主要是搜索文件所在位置,Windows的这个文件一般在“C:\User{当前用户}”下,linux的非root情况下一般在“/home/{当前用户}”下。 1、打开“Everything”; 2、搜索“vuerc”; 3、打开“.vuerc”&#xf…

【Java】已解决Java中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常 在Java中操作MySQL数据库时,我们经常会使用JDBC(Java Database Connectivi…

教你一招,一键学会NAS磁盘“净身出户”的好方法!

在毕业季这个充满离别与新的开始的时刻,空气中似乎也弥漫着一种“断舍离”的氛围。就在这个特殊的季节里,我们迎来了618购物节,各种诱人的优惠活动如雨后春笋般涌现。铁威马618优惠不断!T系列部分低至六折! 在这个热闹…

python--fasApi学习(Dash+FastAPI框架)

在学习fastApi 框架时,发现了一个好用的框架,参考: 博客参考: https://blog.csdn.net/gitblog_00002/article/details/137331157下载文档并部署: 下载代码: git clone https://gitee.com/insistence2022/…

KernelFuzzer部署、使用与原理分析

文章目录 前言1、概述1.1、整体架构1.2、工作流程1.2.1、环境配置流程1.2.2、计划任务执行流程1.2.3、Fuzz测试流程1.2.3.1、整体资源调度1.2.3.2、选取Fuzz测试目标1.2.3.3、生成Fuzz测试参数1.2.3.4、进行Fuzz测试 2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1…

AI大模型的策略布局:通用广度与垂直深度的融合之道

1. 设计理念: 通用大模型(GeneralPurpose Large Models):旨在处理多种类型的任务,不特定于某个领域或应用。它们通常具有广泛的知识和能力,能够理解和生成自然语言、进行图像识别、解决数学问题等。 1. 广…

权威!IDC《中国大模型市场主流产品评估,2024》报告发布

6月12日,国际数据公司 IDC 发布《中国大模型市场主流产品评估,2024》,从基础能力到应用能力 7 大维度对 11 家大模型厂商的 16 款市场主流产品进行实测。 结果显示,百度位于第一梯队,是唯一一家在7大维度上均为优势厂…