通过代码实例解析Pytest运行流程


Posted in Python onAugust 20, 2020

pytest的整个测试分成如下6个阶段:

1、pytest_configure

插件和conftest.py文件配置初始化等,创建session。

2、pytest_sessionstart

创建session完以后,执行collection之前的阶段。会调用pytest_report_header向terminal打印一些环境信息,比如插件版本,python版本,操作平台这些等。

3、pytest_collection

测试用例收集以及生成测试输入的过程,这里还可能包括根据keywords和marker筛选测试用例的过程。这个过程会涉及多次generate item的调用,主要关注如下调用:

pytest_generate_tests(metafunc): 生成测试项;

pytest_make_parametrize_id(config, val, argname):根据@pytest.mark.parametrize生成对应值;

pytest_collection_modifyitems(session, config, items):所有测试项收集完毕以后调用,一般用来进行重新排序和二次过滤。

pytest_deselected(items): 有测试项被关键字或者marker过滤掉的时候会被调用

注意: 通过::语法筛选测试用例的步骤是在之前生成测试用例阶段完成的,并不是在deselected里面做的

4、pytest_runtestloop

执行筛选过的测试用例, 在pytest_runtest_protocol里面完成包括setup, call, teardown和log打印的过程。主要关注如下调用:

pytest_runtest_logstart(nodeid, location):开始执行一个新测试项的时候调用.

注:官方文档的意思表述的有点模糊,并不是setup/call/teardown阶段分别调用一次,就是函数命令一直的意思测试开始前打印一次

pytest_runtest_logfinish(nodeid, location): 结束执行一个测试项的时候调用.

注:同上

pytest_runtest_setup(item): 在pytest_runtest_call执行之前调用.

pytest_runtest_call(item): 执行实际的测试过程。

pytest_runtest_teardow(item, nextitem): 在pytest_runtest_call执行之后调用

pytest_fixture_setup(fixturedef, request):执行fixture的setup过程(是否执行取决于fixture是否需要创建).

pytest_fixture_post_finalizer(fixturedef, request): 执行fixture的teardown过程(如果有)。

pytest_runtest_makereport(item, call): 返回给定item和call对应的 _pytest.runner.TestReport 对象, 这里的call object我们一般不太接触,_pytest/runner.py里面有具体的用法可以参考。

pytest_runtest_logreport(report): 在测试的setup/call/teardown阶段report更新之后分别被调用到,可以用when属性来区分不同阶段。

pytest_report_teststatus(report, config): 返回各个测试阶段的result, 可以用when属性来区分不同阶段。

5、pytest_sessionfinish

所有测试执行完毕之后,返回exit status之前的阶段。会调用pytest_terminal_summary向terminal打印一些summary信息,比如pass, fail, error数量之类的总结信息。

def pytest_terminal_summary(terminalreporter, exitstatus, config):
  '''收集测试结果'''
  print(terminalreporter.stats)
  print("total:", terminalreporter._numcollected)
  print('passed:', len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown']))
  print('failed:', len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown']))
  print('error:', len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown']))
  print('skipped:', len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown']))
  # terminalreporter._sessionstarttime 会话开始时间
  duration = time.time() - terminalreporter._sessionstarttime
  print('total times:', duration, 'seconds')

6、pytest_unconfigure

session结束以后,整个process退出之前的阶段。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多线程抓取天涯帖子内容示例
Apr 03 Python
python 容器总结整理
Apr 04 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python实现websocket的客户端压力测试
Jun 25 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 #Python
python openCV实现摄像头获取人脸图片
Aug 20 #Python
Python实现自动签到脚本功能
Aug 20 #Python
python如何随机生成高强度密码
Aug 19 #Python
python实现图片转换成素描和漫画格式
Aug 19 #Python
python+django+selenium搭建简易自动化测试
Aug 19 #Python
python 中的命名空间,你真的了解吗?
Aug 19 #Python
You might like
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
JavaScript版代码高亮
2006/06/26 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
Python中列表与元组的乘法操作示例
2018/02/10 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
django页面跳转问题及注意事项
2019/07/18 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
初级Java程序员面试题
2016/03/03 面试题
学生处主任岗位职责
2013/12/01 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
委托书范文
2014/04/02 职场文书
教师求职信
2014/06/17 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
毕业生党员个人总结
2015/02/14 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python