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

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.lryc.cn/news/2397169.html

相关文章:

  • 探索大语言模型(LLM):RSE流程详解——从文档中精准识别高相关片段
  • 【C++】类的构造函数
  • 【ISP算法精粹】动手实战:用 Python 实现 Bayer 图像的黑电平校正
  • 分布式存储技术全景解析:从架构演进到场景实践
  • JVM——从JIT到AOT:JVM编译器的云原生演进之路
  • Linux中的mysql逻辑备份与恢复
  • [HTML5]快速掌握canvas
  • Gartner《Emerging Patterns for Building LLM-Based AIAgents》学习心得
  • Hive SQL优化实践:提升大数据处理效率的关键策略
  • vue中父子参数传递双向的方式不同
  • LLM 使用 MCP 协议及其原理详解
  • DAY 36神经网络加速器easy
  • STM32 单片机启动过程全解析:从上电到主函数的旅程
  • 4.RV1126-OPENCV 图像轮廓识别
  • WEB3——开发者怎么查看自己的合约日志记录
  • TDengine 集群容错与灾备
  • MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件
  • 如何成为一名优秀的产品经理(自动驾驶)
  • BAT脚本编写详细教程
  • 快速了解 GO之接口解耦
  • 【多线程初阶】内存可见性问题 volatile
  • C++ 类模板三参数深度解析:从链表迭代器看类型推导与实例化(为什么迭代器类模版使用三参数?实例化又会是怎样?)
  • MySQL强化关键_018_MySQL 优化手段及性能分析工具
  • ASP.NET MVC添加模型示例
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
  • 第1天:认识RNN及RNN初步实验(预测下一个数字)
  • 全文索引详解及适用场景分析
  • 利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数
  • 树莓派安装openwrt搭建软路由(ImmortalWrt固件方案)
  • 排序算法——详解