43. 远程分布式测试实现

43. 远程分布式测试实现详解

一、远程测试环境配置

1.1 远程WebDriver服务定义

# Chrome浏览器远程服务地址
chrome_url = r'http://localhost:5143'# Edge浏览器远程服务地址
edge_url = r'http://localhost:9438'
  • 关键概念:每个URL对应一个独立的WebDriver服务
  • 典型配置
    • localhost:本地服务
    • 192.168.1.100:4444:局域网内其他机器
    • cloud-test.com:443:云端测试平台

1.2 浏览器能力配置

# 从caps_setting导入预定义配置
from chap9.caps_setting import *# Chrome配置示例
CHROME_CAPS_1 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--headless', '--disable-gpu']}
}CHROME_CAPS_2 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--window-size=1920,1080']}
}# Edge配置示例
EDGE_CAPS_1 = {'browserName': 'MicrosoftEdge','ms:edgeOptions': {'args': ['--inprivate']}
}

二、测试套件定义

2.1 函数式测试套件

test_suit_func = [# 任务组1:在Chrome服务1上执行登录测试([test_login], chrome_url, CHROME_CAPS_1),# 任务组2:在Chrome服务2上执行搜索测试([test_search], chrome_url, CHROME_CAPS_2),# 任务组3:在Edge服务上执行搜索测试([test_search], edge_url, EDGE_CAPS_1)
]
  • 结构说明(测试函数列表, WebDriver URL, 浏览器配置)
  • 特点
    • 不同任务组可指向不同服务节点
    • 支持相同服务不同配置

2.2 面向对象测试套件

test_suit_cls = [# 任务组1:在Chrome服务1上执行登录测试类([AsyncTestLogin], chrome_url, CHROME_CAPS_1),# 任务组2:在Chrome服务1上再次执行登录测试类([AsyncTestLogin], chrome_url, CHROME_CAPS_1),# 任务组3:在Chrome服务2上执行主功能测试类([AsyncTestMain], chrome_url, CHROME_CAPS_2),# 任务组4:在Edge服务上执行主功能测试类([AsyncTestMain], edge_url, EDGE_CAPS_1)
]
  • 注意事项:同一测试类可在不同节点重复执行
  • 适用场景:复杂业务流测试

三、测试执行入口

3.1 函数式测试执行

main_func(test_suit_func)
  • 功能:执行函数式测试套件
  • 内部流程
    1. 为每个任务组创建异步任务
    2. 连接对应WebDriver服务
    3. 应用浏览器配置
    4. 顺序执行组内测试函数
    5. 关闭浏览器连接

3.2 面向对象测试执行

# main_cls(test_suit_cls)  # 本例中注释掉
  • 执行方式:取消注释即可运行
  • 特点
    • 自动检测并执行测试类中的test_*方法
    • 支持在不同节点执行相同测试类

四、分布式执行流程

4.1 测试任务分发

主控制机├── 任务组1 → Chrome服务1 (localhost:5143)├── 任务组2 → Chrome服务2 (localhost:5143) 不同配置└── 任务组3 → Edge服务 (localhost:9438)

4.2 实际执行时序

时间 | 任务组1 (Chrome服务1)       | 任务组2 (Chrome服务2)       | 任务组3 (Edge服务)
-----|---------------------------|---------------------------|-------------------0s  | 启动浏览器(headless)        | 启动浏览器(全屏)            | 启动浏览器(隐私模式)1s  | 执行test_login()           | 执行test_search()          | 执行test_search()3s  | 验证登录成功                | 验证搜索结果               | 验证搜索错误提示5s  | 关闭浏览器                  | 关闭浏览器                 | 关闭浏览器

五、远程节点配置示例

5.1 启动Chrome节点服务

# 在机器1 (IP:192.168.1.101) 上启动
chromedriver --port=5143# 在机器2 (IP:192.168.1.102) 上启动
chromedriver --port=5143

5.2 启动Edge节点服务

# 在机器3 (IP:192.168.1.103) 上启动
msedgedriver --port=9438

5.3 测试套件配置

chrome_url1 = r'http://192.168.1.101:5143'
chrome_url2 = r'http://192.168.1.102:5143'
edge_url = r'http://192.168.1.103:9438'test_suit_func = [([test_login], chrome_url1, CHROME_CAPS),([test_search], chrome_url2, CHROME_CAPS),([test_search], edge_url, EDGE_CAPS)
]

六、执行效果分析

6.1 资源使用情况

任务组服务地址浏览器类型内存占用CPU使用
组1localhost:5143Chrome320MB12%
组2localhost:5143Chrome350MB15%
组3localhost:9438Edge380MB14%

6.2 时间效率对比

执行方式任务数串行耗时并行耗时效率提升
函数测试345秒20秒125%

七、完整代码

from chap9.async_test_func import test_search, test_login
from chap9.async_test_cls import AsyncTestMain, AsyncTestLogin
from chap9.async_main import main_cls, main_func
from chap9.caps_setting import *chrome_url = r'http://localhost:5143'
edge_url = r'http://localhost:9438'test_suit_func = [([test_login, ], chrome_url, CHROME_CAPS_1),([test_search, ], chrome_url, CHROME_CAPS_2),([test_search, ], edge_url, EDGE_CAPS_1)
]# 注意:测试类在整个代码运行过程中,测试类只会被创建一次,它在内存有唯一的地址
test_suit_cls = [([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestMain, ], chrome_url, CHROME_CAPS_2),([AsyncTestMain, ], edge_url, EDGE_CAPS_1)
]main_func(test_suit_func)
# main_cls(test_suit_cls)

这种分布式测试架构通过将测试任务分发到不同服务节点,显著提高了测试执行效率,特别适合大型项目的快速验证需求。


「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

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

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

相关文章

Python爬虫(40)基于Selenium与ScrapyRT构建高并发动态网页爬虫架构:原理、实现与性能优化

目录 一、引言二、技术背景1. 动态页面处理痛点2. 架构设计目标 三、核心组件详解1. Selenium Grid集群部署2. ScrapyRT服务化改造3. 智能等待策略 四、系统架构图五、性能优化实践1. 资源隔离策略2. 并发控制算法3. 监控体系 六、总结与展望🌈Python爬虫相关文章&a…

【存储基础】SAN存储基础知识

文章目录 1. 什么是SAN存储?2. SAN存储组网架构3. SAN存储的主要协议SCSI光纤通道(FC)协议iSCSIFCoENVMe-oFIB 4. SAN存储的关键技术Thin Provision:LUN空间按需分配Tier:分级存储Cache:缓存机制QoS&#x…

TDengine 运维——巡检工具(定期检查)

背景 TDengine 在运行一段时间后需要针对运行环境和 TDengine 本身的运行状态进行定期巡检,本文档旨在说明如何使用巡检工具对 TDengine 的运行环境进行自动化检查。 安装工具使用方法 工具支持通过 help 参数查看支持的语法 Usage: taosinspect [OPTIONS]Check…

DHCP应用

一、DHCP介绍 在LAN(局域网)中我们常会遇到以下的情况: 1.不知道如何配置IP地址及相关信息的员工,无法上网;2.IP地址配置冲突,无法上网;3.来访用户因不熟悉公司网络情况无法上网; 以上这些情况都是日常最…

LabVIEW多按键自动化检测系统

LabVIEW开发一套高精度按键力与行程自动化检测系统,针对传统检测设备自动化程度低、定位误差大等痛点,实现多按键产品的全流程自动化测试。系统集成 6 轴工业机器人、高精度传感器及实时数据处理模块,满足汽车电子、消费电子等领域对按键手感…

嵌入式硬件篇---蜂鸣器

蜂鸣器是一种常用的电子发声元件,主要分为有源蜂鸣器和无源蜂鸣器两类。它们在结构、工作原理、驱动方式、应用场景等方面存在显著差异。以下是详细介绍: 一、核心定义与结构差异 1. 有源蜂鸣器 定义: “有源” 指内部自带振荡电路&#x…

600+纯CSS加载动画一键获取指南

CSS-Loaders.com 完整使用指南:600纯CSS加载动画库 🎯 什么是 CSS-Loaders.com? CSS-Loaders.com 是一个专门提供纯CSS加载动画的资源网站,拥有超过600个精美的单元素加载器。这个网站的最大特色是所有动画都只需要一个HTML元素…

国内高频混压PCB厂家有哪些?

一、技术领先型厂商(聚焦材料与工艺突破) 猎板PCB 技术亮点:真空层压工艺实现FR-4与罗杰斯高频材料(RO4350B/RO3003)混压,阻抗公差3%,支持64单元/板的5G天线模块,插损降低15%。 应用…

volatile,synchronized,原子操作实现原理,缓存一致性协议

文章目录 缓存一致性协议(MESI)volatile1. volatile 的作用2.volatile的底层实现3,volatile 实现单例模式的双重锁(面手写) synchronized1,基本用法2,可重入性3,Java对象头4,实现原理(1)代码块同步的实现&a…

webfuture:如何屏蔽后台发文界面的保存为新文章按钮?

问题描述: 如何屏蔽后台发文界面的保存为新文章按钮? 问题解决:修改这个文件 /Admin/Content/Base/css/base.css 定义这个的id saveAsNewItemSubmit #saveAsNewItemSubmit{display: none;}

SpringBoot集成第三方jar的完整指南

原文地址:https://blog.csdn.net/weixin_43826336/article/details/141640152?ops_request_misc%257B%2522request%255Fid%2522%253A%25227d4118ef2d572ba4428caf83f1d2bb28%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id7d4118…

题目 3293: 蓝桥杯2024年第十五届决赛真题-数位翻转

题目 3293: 蓝桥杯2024年第十五届决赛真题-数位翻转 时间限制: 2s 内存限制: 192MB 提交: 1046 解决: 318 题目描述 小明创造了一个函数 f(x) 用来翻转 x 的二进制的数位(无前导 0)。比如f(11) 13,因为 11 (1011)2,将其左右翻转…

word为跨页表格新加表头和表名

问题: 当表格过长需要跨页时(如下图所示),某些格式要求需要转页接排加续表。 方法一: 1、选中表格,在“表布局”区域点开“自动调整”,选择“固定列宽”(防止后续拆分表格后表格变…

Ubuntu上进行VS Code的配置

1. 安装VS code sudo snap install code --classic 2. 安装GCC sudo apt install build-essential 3. 安装VS Code中文包 打开 VS Code 点击左侧活动栏中的扩展图标(或按Ctrl+Shift+X) 在搜索框中输入:Chinese (Simplified) 选择由 Microsoft 提供的 中文(简体)语言包…

vr中风--数据处理模型搭建与训练2

位置http://localhost:8888/notebooks/Untitled1-Copy1.ipynb # -*- coding: utf-8 -*- """ MUSED-I康复评估系统(增强版) 包含:多通道sEMG数据增强、混合模型架构、标准化处理 """ import numpy as np impor…

【LLM vs Agent】从语言模型到智能体,人工智能迈出的关键一步

目录 一、什么是 LLM?语言的天才,思维的起点 ✅ 特点小结: 二、什么是 Agent?智能的执行者,自主的决策者 ✅ 特点小结: 三、LLM 与 Agent 的关系:是工具,更是大脑 四、案例实战…

安装DockerDocker-Compose

Docker 1、换掉关键文件 vim /etc/yum.repos.d/CentOS-Base.repo ▽ [base] nameCentOS-$releasever - Base - Mirrors Aliyun baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 enabled1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-C…

Perl One-liner 数据处理——基础语法篇【匠心】

Perl(Practical Extraction and Report Language)是一种功能强大且灵活的脚本语言,因其强大的文本处理能力和简洁的语法而广受开发者和系统管理员的喜爱。特别是在命令行环境下,Perl 的 one-liner(单行脚本&#xff09…

Go语言defer关键字:延迟执行的精妙设计

深度解析Go语言defer关键字:延迟执行的精妙设计 引言 在Go语言中,defer语句是一种独特而强大的控制流机制,它通过​​延迟执行​​的方式解决资源管理、错误处理和异常恢复等关键问题。理解defer的工作原理是掌握Go并发编程和错误处理的关键…

C#项目07-二维数组的随机创建

实现需求 创建二维数组,数组的列和宽为随机,数组内的数也是随机 知识点 1、Random类 Public Random rd new Random(); int Num_Int rd.Next(1, 100);2、数组上下限。 //定义数组 int[] G_Array new int[1,2,3,4];//一维数组 int[,] G_Array_T …