背景:
想要做稳定性测试,在一段时间内,持续性并发调用测试用例,查看单量情况和系统有无报错。
自动化测试框架pytest
分布式执行用例的设计原则
#用例之间是独立的,没有依赖关系,用例可以完全独立运行
#用例执行没有顺序,随机顺序都能正常执行
#每个用例都能重复运行,运行结果不会影响其他用例
过程:
pytest框架的并发操作有两种
1、pytest-xdist
多进程方式,跟服务器有多少cpu有关
插件安装
pip3 install pytest-xdist -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip list 能查看到已安装的插件信息
pytest-xdist 1.30.0
使用命令
pytest -s test_Case.py -n auto
auto 是会自动检测到系统的CPU核数;从测试结果看,检测到的是逻辑处理器的数量
自动调用所有的cpu信息来跑用例,此时cpu占用率会特别高
2、pytest-parallel
多进程加多线程结合的方式
pip install pytest-parallel==0.0.10
pip list 能查看到已安装的插件信息
pytest-parallel 0.0.10
最开始安装的版本是 0.1.0,有报错,把版本降下来就解决了。
使用命令:
pytest -s test_Case.py --workers=1 --tests-per-worker=6
【 workers 指进程数:windows环境默认为1,tests-per-worker 指线程数】
使用如下,用例1的调用要写6遍,只写1遍,开了6个线程也只会执行一次。

3、文件锁
如何让scope=session 的fixture在test session中仅执行一次
pytest-xdist 是让每个worker进程执行属于自己的测试用例集下的所有测试用例
这意味着在不同进程中,不同的测试用例可能会调用同一个scope 范围级别较高(例如session)的fixture,该fixture则会被执行多次,这不符合scope=session的预期
可以通过使用锁定文件进行进程间通信来实现。
pip install filelock == 3.0.12
在 pytest 的 conftest.py 文件中使用以下代码
from filelock import FileLock
with FileLock("session.lock"):
configpath = 'dataconfig\config.ini'
overalldict['configpath'] = configpath
config = dict(readconfig.config_read(configpath))
本文介绍了如何使用pytest进行稳定性测试,特别是在并发环境下。文章详细讲解了pytest-xdist和pytest-parallel两个插件的安装及使用,讨论了它们在多进程和多线程并发执行测试用例时的特点,并提出了解决scope=session级别的fixture在多进程环境中被多次执行的问题,通过引入filelock库来实现文件锁保证fixture只执行一次。
3万+





