pytest文档54-Hooks函数terminal打印测试结果(pytest_report_teststatus)
前言
使用命令行执行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)的更多相关文章
- pytest文档7-pytest-html生成html报告
前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...
- pytest文档3-pycharm运行pytest
前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...
- pytest文档55-plugins插件开发
前言 前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了. 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能 ...
- C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...
- pytest文档19-doctest测试框架
前言 doctest从字面意思上看,那就是文档测试.doctest是python里面自带的一个模块,它实际上是单元测试的一种. 官方解释:doctest 模块会搜索那些看起来像交互式会话的 Pytho ...
- pytest文档1-环境准备与入门
前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittes ...
- pytest文档46-关于https请求警告问题(InsecureRequestWarning: Unverified HTTPS request is being made)
前言 使用 pytest 执行 https 请求用例的时候,控制台会出现警告:InsecureRequestWarning: Unverified HTTPS request is being mad ...
- pytest文档43-元数据使用(pytest-metadata)
前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址http ...
- python文档字符串(函数使用说明)
关键字: 函数说明.help()函数 1.效果图: 2.代码: # 文档字符串( doc str) 是 函数使用说明 # 用法: 在函数第一行写一个字符串 def fn(*nums): ''' 函数的 ...
随机推荐
- leetcode刷题-67二进制求和
题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...
- SSM框架中添加写日志功能
前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...
- linux基础命令一、
命令格式: 命令 -选项 参数 uname -r 查看内核版本 uname -m 查看系统版本 alias 别名. 举例: alias grep ='grep --color=auto' ...
- 3896. 【NOIP2014模拟10.26】战争游戏
鉴于如此一道恶心的题,作者还花了一个晚上草草学了tarjan. 于是乎,这道题就是道tarjan 具体怎么实现呢?正解上有个什么树形DP,看的我一脸懵逼. 这道题可以运用到tarjan一个高科技的算法 ...
- Python中的枚举enumerate
- native到CPU
Native 所谓的native准确的说是借由虚拟机实现的JNI接口调用的操作系统提供的API JNI使得class中的ACC_NATIVE标至的方法能借由JNI类的实例转换为JNI规范(如全限定名) ...
- 传值&传值引用
转自http://www.cnblogs.com/androidsuperman/p/9012320.html 首先对传值和传引用要有个基本的概念 传值:传递的是值的副本.方法中对副本的修改,不会影响 ...
- Hadoop学习笔记(一):ubuntu虚拟机下的hadoop伪分布式集群搭建
hadoop百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin hadoop官网:http://hadoop.apache.org/ ...
- 目标检测:SSD算法详解
一些概念 True Predict True postive False postive 预测为正类 False negivate True negivate 预测为负类 真实为 ...
- Spring Boot(二) :Redis 使用
Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化.除此 ...