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)
- 功能:执行函数式测试套件
- 内部流程:
- 为每个任务组创建异步任务
- 连接对应WebDriver服务
- 应用浏览器配置
- 顺序执行组内测试函数
- 关闭浏览器连接
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使用 |
---|---|---|---|---|
组1 | localhost:5143 | Chrome | 320MB | 12% |
组2 | localhost:5143 | Chrome | 350MB | 15% |
组3 | localhost:9438 | Edge | 380MB | 14% |
6.2 时间效率对比
执行方式 | 任务数 | 串行耗时 | 并行耗时 | 效率提升 |
---|---|---|---|---|
函数测试 | 3 | 45秒 | 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)
这种分布式测试架构通过将测试任务分发到不同服务节点,显著提高了测试执行效率,特别适合大型项目的快速验证需求。
「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀