前言

使用命令行执行pytest用例的时候,会在 terminal 终端打印整个用例的测试结果:

  • .代表通过的用例
  • F代表失败的用例
  • E代表异常的用例

    如果我们不喜欢这种报告结果,可以通过 pytest_report_teststatus 钩子函数改变测试报告的内容,接下来试试吧.改成√,把F改成x,这样更直观。

pytest_report_teststatus

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

  • when=='setup' 用例的前置操作
  • when=='call' 用例的执行
  • when=='teardown' 用例的后置操作

运行案例test_x.py

import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/ def test_01():
a = "hello"
b = "hello"
assert a == b def test_02():
a = "hello"
b = "hello world"
assert a == b def test_03():
a = "hello"
b = "hello world"
assert a in b def test_04():
a = "hello"
b = "hello world"
assert a not in b

命令行执行pytest test_x.py --tb=line

>pytest test_x.py --tb=line
============================= test session starts ============================= collected 4 items test_x.py .F.F [100%] ================================== FAILURES ===================================
D:\test_x.py:13: AssertionError: assert 'hello' == 'hello world'
D:\test_x.py:25: AssertionError: assert 'hello' not in 'hello world'
===================== 2 failed, 2 passed in 0.07 seconds ======================

运行的结果是.和F,我们希望改成√和x,在conftest.py文件写钩子函数

# conftest.py
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/ def pytest_report_teststatus(report, config):
'''turn . into √,turn F into x'''
if report.when == 'call' and report.failed:
return (report.outcome, 'x', 'failed')
if report.when == 'call' and report.passed:
return (report.outcome, '√', 'passed')

重新运行pytest test_x.py --tb=line

>pytest test_x.py --tb=line
collected 4 items test_x.py √x√x [100%] ================================== FAILURES ===================================
D:\soft\kecheng202004\xuexi\test_x.py:13: AssertionError: assert 'hello' == 'hello world'
D:\soft\kecheng202004\xuexi\test_x.py:25: AssertionError: assert 'hello' not in 'hello world'
===================== 2 failed, 2 passed in 0.07 seconds ======================

关于Error异常

前面这篇https://www.cnblogs.com/yoyoketang/p/12609871.html讲到关于测试用例的执行结果,

当 setup 出现异常的时候,用例才会Error,于是可以通过report.when == 'setup' 判断到前置操作的结果

# test_x.py
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/ @pytest.fixture()
def login():
print("前置操作:准备数据")
assert 1 == 2 # 前置出现异常
yield
print("后置操作:清理数据") def test_01(login):
a = "hello"
b = "hello"
assert a == b def test_02():
a = "hello"
b = "hello world"
assert a == b def test_03():
a = "hello"
b = "hello world"
assert a in b def test_04():
a = "hello"
b = "hello world"
assert a not in b

运行结果

>pytest test_x.py --tb=line
============================= test session starts ============================= collected 4 items test_x.py Ex√x [100%] =================================== ERRORS ====================================
__________________________ ERROR at setup of test_01 __________________________
E assert 1 == 2
---------------------------- Captured stdout setup ----------------------------
前置操作:准备数据
================================== FAILURES ===================================
D:\soft\kecheng202004\xuexi\test_x.py:21: AssertionError: assert 'hello' == 'hello world'
D:\soft\kecheng202004\xuexi\test_x.py:33: AssertionError: assert 'hello' not in 'hello world'
================= 2 failed, 1 passed, 1 error in 0.09 seconds =================

当前置失败的时候,改成0

# conftest.py
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/ def pytest_report_teststatus(report, config):
'''turn . into √,turn F into x, turn E into 0'''
if report.when == 'call' and report.failed:
return (report.outcome, 'x', 'failed')
if report.when == 'call' and report.passed:
return (report.outcome, '√', 'passed')
if report.when == 'setup' and report.failed:
return (report.outcome, '0', 'error')

于是控制台的结果,就可以改了

>pytest test_x.py --tb=line
============================= test session starts ============================= collected 4 items test_x.py 0x√x [100%] ================================== FAILURES ===================================
D:\soft\kecheng202004\xuexi\test_x.py:7: assert 1 == 2
D:\soft\kecheng202004\xuexi\test_x.py:21: AssertionError: assert 'hello' == 'hello world'
D:\soft\kecheng202004\xuexi\test_x.py:33: AssertionError: assert 'hello' not in 'hello world'
===================== 3 failed, 1 passed in 0.07 seconds ======================

skip的用例可以通过report.skiped获取到,可以这样写

if report.skipped:
return (report.outcome, '/', 'skipped')

report相关的属性

report相关的属性,参考以下

'_from_json',

'_get_verbose_word',

'_to_json',

'caplog',

'capstderr',

'capstdout',

'count_towards_summary',

'duration',

'failed',

'from_item_and_call',

'fspath',

'get_sections',

'head_line',

'keywords',

'location',

'longrepr',

'longreprtext',

'nodeid',

'outcome',

'passed',

'sections',

'skipped',

'toterminal',

'user_properties',

'when'

pytest文档54-Hooks函数terminal打印测试结果(pytest_report_teststatus)的更多相关文章

  1. pytest文档7-pytest-html生成html报告

    前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...

  2. pytest文档3-pycharm运行pytest

    前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...

  3. pytest文档55-plugins插件开发

    前言 前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了. 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能 ...

  4. C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印

    其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...

  5. pytest文档19-doctest测试框架

    前言 doctest从字面意思上看,那就是文档测试.doctest是python里面自带的一个模块,它实际上是单元测试的一种. 官方解释:doctest 模块会搜索那些看起来像交互式会话的 Pytho ...

  6. pytest文档1-环境准备与入门

    前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittes ...

  7. pytest文档46-关于https请求警告问题(InsecureRequestWarning: Unverified HTTPS request is being made)

    前言 使用 pytest 执行 https 请求用例的时候,控制台会出现警告:InsecureRequestWarning: Unverified HTTPS request is being mad ...

  8. pytest文档43-元数据使用(pytest-metadata)

    前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址http ...

  9. python文档字符串(函数使用说明)

    关键字: 函数说明.help()函数 1.效果图: 2.代码: # 文档字符串( doc str) 是 函数使用说明 # 用法: 在函数第一行写一个字符串 def fn(*nums): ''' 函数的 ...

随机推荐

  1. i春秋公益赛之BFnote

    题目链接:https://buuoj.cn/challenges#gyctf_2020_bfnote 首先检查程序开的保护: 发现程序只开了canary和NX保护,接下来查看IDA反汇编出来的为代码, ...

  2. Django 页面之间传递MySql数据表(Django八)

    之前实现了页面传递多个参数,但没有实现页面间传递一整个数据表 session传递几个参数:https://blog.csdn.net/qq_38175040/article/details/10496 ...

  3. oracle数据库备份、还原命令及常见问题(待补充)

    1.oracle数据库的备份:先查空表——将结果全选复制为insert语句——将语句执行后导出 先select 'alter table '||table_name||' allocate exten ...

  4. swift基本数据类型使用-数组使用

    目录 数组的使用 1.数组的定义 2.对可变数组的基本操作 3.数组的遍历 4.数组的合并 5. 示例 数组的使用 1.数组的定义 1> 定义不可变数组 2> 定义可变数组 2.对可变数组 ...

  5. python中库引用与import

    在蟒蛇绘制函数中,多有turtle.   ,称它为<a>.<b>的编码风格 库引用 扩充python程序功能的方式 使用import保留字完成,采用<a>.< ...

  6. 分布式文件系统之FastDFS安装部署

    前面我们了解了分布式文件系统mogilefs的框架以及安装部署和简单使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/MogileFS/:今天我们来了解下 ...

  7. springboot的文件路径,配置文件

    生成springboot会指定一个包路径,启动的class文件在这个目录下,其他的controller等也要在这个目录的子目录下,不然会扫不到. 一般我们会维护两三个配置文件:生产环境,开发环境,测试 ...

  8. MongoDB入门(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

  9. MySQL: 2、SQL语言

    一.SQL的简介: 1.SQL的概念: SQL就是结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统 2.SQL的作用:   - ...

  10. RestTemplate get请求多参数 简单封装

    使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装 public static void main(String[] args) { Map<St ...