前言
- 本篇来学习下在pytest中分布式执行测试用例,以节省测试时间。
安装插件
pip install pytest-xdist
分布式用例设计原则
- 用例之间是独立的,用例之间没有依赖关系,用例可以完全独立运行【独立运行】
- 用例执行没有顺序,随机顺序都能正常执行【随机执行】
- 每个用例都能重复运行,运行结果不会影响其他用例【不影响其他用例】
使用示例
- 顺序执行
# -*- coding: utf-8 -*- # @Time : 2022/11/26 # @Author : 大海 import time import pytest def test_01(): print('case 1') time.sleep(2) assert 1 == 1 def test_02(): print('case 2') time.sleep(2) assert 1 == 1 def test_03(): print('case 3') time.sleep(2) assert 1 == 1 def test_04(): print('case 4') time.sleep(2) assert 1 == 1 def test_05(): print('case 5') time.sleep(2) assert 1 == 1 if __name__ == '__main__': # 顺序执行 pytest.main(['-s', 'test_78.py'])
- 并行执行:加-n参数后面数字是并行数
# -*- coding: utf-8 -*- # @Time : 2022/11/26 # @Author : 大海 import time import pytest def test_01(): print('case 1') time.sleep(2) assert 1 == 1 def test_02(): print('case 2') time.sleep(2) assert 1 == 1 def test_03(): print('case 3') time.sleep(2) assert 1 == 1 def test_04(): print('case 4') time.sleep(2) assert 1 == 1 def test_05(): print('case 5') time.sleep(2) assert 1 == 1 if __name__ == '__main__': # 并行执行 加-n参数后面数字是并行数 pytest.main(['-s', 'test_78.py', '-n=4', '--html=report.html', '--self-contained-html'])
测试报告
按一定顺序执行
- pytest-xdist默认是无序执行的,可以通过 --dist 参数来控制顺序
- –dist=loadscope
将按照同一个模块module下的函数和同一个测试类class下的方法来分组,然后将每个测试组发给可以执行的worker,确保同一个组的测试用例在同一个进程中执行
- –dist=loadfile
按照同一个文件名来分组,然后将每个测试组发给可以执行的worker,确保同一个组的测试用例在同一个进程中执行