【python】pytest多线程

本文介绍了如何使用pytest进行稳定性测试,特别是在并发环境下。文章详细讲解了pytest-xdist和pytest-parallel两个插件的安装及使用,讨论了它们在多进程和多线程并发执行测试用例时的特点,并提出了解决scope=session级别的fixture在多进程环境中被多次执行的问题,通过引入filelock库来实现文件锁保证fixture只执行一次。

背景:

想要做稳定性测试,在一段时间内,持续性并发调用测试用例,查看单量情况和系统有无报错。

自动化测试框架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))

     

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值