通过代码实例解析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 相关文章推荐
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
Python之修改图片像素值的方法
Jul 03 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python和js交互调用的方法
Jun 23 Python
Python 实现RSA加解密文本文件
Dec 30 Python
详解Python模块化编程与装饰器
Jan 16 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相关资料
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
PHP 数组遍历顺序理解
2009/09/09 PHP
php 一元分词算法
2009/11/30 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
Seajs源码详解分析
2019/04/02 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
python根据文件大小打log日志
2014/10/09 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python 回溯法模板详解
2020/02/26 Python
python 基于opencv操作摄像头
2020/12/24 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
保护环境的建议书
2014/03/12 职场文书
降消项目实施方案
2014/03/30 职场文书
中学生家长评语大全
2014/04/16 职场文书
大专生自荐书范文
2014/06/22 职场文书
技术经济专业求职信
2014/09/03 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
小学思想品德教学反思
2016/02/24 职场文书