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

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 通过代码实例解析Pytest运行流程

这篇文章主要介绍了通过代码实例解析Pytest运行流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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退出之前的阶段。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持"软件测试pytest"。

相关文章
|
2天前
|
存储 缓存 负载均衡
elasticsearch写入流程和请求检索流程原理全方位解析
elasticsearch写入流程和请求检索流程原理全方位解析
|
1天前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
6 1
|
6天前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
21 5
|
3天前
|
调度
SpringMVC----执行流程+底层解析
SpringMVC----执行流程+底层解析
|
6天前
|
数据采集 前端开发 JavaScript
python语言通过简单爬虫实例了解文本解析与读写
python|通过一个简单爬虫实例简单了解文本解析与读写
|
5天前
|
机器学习/深度学习 数据采集 算法
特征工程与数据预处理全解析:基础技术和代码示例
在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常值、缺失值、编码、特征缩放和特征提取的各种技术。
10 0
|
10天前
|
Java 应用服务中间件 API
Tomcat处理一个HTTP请求的执行流程的详细解析
Tomcat处理一个HTTP请求的执行流程的详细解析
18 4
|
10天前
结构体\判断日期是否合法(代码分步解析)
结构体\判断日期是否合法(代码分步解析)
7 1
|
1天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
4 0
|
2天前
|
Unix Shell Perl
技术心得:实例解析shell子进程(subshell)
技术心得:实例解析shell子进程(subshell)

热门文章

最新文章

推荐镜像

更多