首页 > 其他分享 >pytest---hooks获取到用例执行结果(pytest_runtest_makereport )

pytest---hooks获取到用例执行结果(pytest_runtest_makereport )

时间:2023-08-10 16:13:10浏览次数:34  
标签:hooks pytest runtest print 测试用例 report 执行 def

前言

  自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过pytest中的hooks来进行获取吗,其中pytest中存在多个hooks的函数,小编今天先简单介绍其中一种,通过pytest_runtest_makereport 获取自动化测试用例的执行情况

获取用例结果

pytest_runtest_makereport 是pytest中提供的方法,我们可以通过执行自动化测试用例进行获取其对应的结果信息,此函数需要写入到conftest.py文件中,进行简单的二次开发,将执行结果获取出来

# coding:utf-8
import pytest
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    # 获取钩子方法的调用结果
    out = yield
    report = out.get_result()
    print(report.__dict__)

通过执行测试用例后会发现,我们已经将一些测试信息打印出来了。

从上图执行结果中可以发现,可以很清楚的看到获取三次执行结果,其中分别是"setup", "call", "teardown",安静这里可以理解成,分别是执行用例前,执行测试用例,执行测试用例后

案例展示

小编这边通过一个简单的pytest可以执行的测试用例,再次将pytest_runtest_makereport进行二次开发,将所有的详细参数进行打印出来。

首先进行创建一个测试用例test_01.py

# test01.py
# coding:utf-8
def test():
    '''用例描述'''
    print('测试用例1')

编写pytest_runtest_makereport函数,进行将测试结果不同信息进行打印出来

# conftest.py 文件
# coding:utf-8
import pytest
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    # 获取钩子方法的调用结果
    out = yield
    # 获取执行结果内容
    report = out.get_result()
    print('测试报告:{}' .format(report))
    print('当前执行步骤:{}' .format(report.when))
    print('当前执行测试用例:{}' .format(report.nodeid))
    print('当前用例描述:{}' .format(report.nodeid))
    print('当前执行结果:{}' .format(report.outcome))
    print('当前报错信息:{}' .format(report.longrepr))
    print('执行时间:{}' .format(report.duration))

打开cmd窗口,执行pytest -s test_01.py

可以通过上面的执行结果看到,我们的前置,用例,后置都是执行成功的,那么如果我们加上setup和teardown来看看执行结果如何?

# test01.py
# coding:utf-8
def setup():
    print('测试执行开始')
def teardown():
    print('测试执行结束')
def test():
    '''用例描述'''
    print('测试用例1')

再次通过cmd窗口进行运行程序,通过从下图可以看出没有什么整体变化,因为我们这里的测试用例都是成功的

前置出现错误

首先小编这里先编写一个前置操作时出现错误,也就是代码中的setup中出现错误信息

# 前置代码出现错误
def setup():
    assert 1 == 0

通过执行发现,我们前置操作执行错误或者失败后,执行完测试用例后,后置内容不再进行执行。

后置出现错误

前置错误已经完成了尝试,那么我们通过后置进行尝试出现错误,看看如何执行顺序的

def teardown():
    assert 1 == 0

通过运行代码后发现,后置出现错误后,代码继续运行完成。

call出现执行错误

前置和后置(setup和teardown)都已经失败过了,那么接下来就是测试用例环节了,当测试用例通过断言失败后

# test01.py
# coding:utf-8
def setup():
    print('测试执行开始')
def teardown():
    print('测试执行结束')
def test():
    '''用例描述'''
    print('测试用例1')
    assert  1 == 0

通过执行后会发现,我们已经将测试用例的前置和后置执行完成,并将测试用例的错误信息全部打印出来了

其他

目前小编这里收集了一些关于pytest_runtest_makereport函数中常用到的其他几种方法

首先我们需要通过yield方法获取到到测试用例的执行结果集合,然后将此结果进行读取出来存放到一个变量中(report = yield(返回值).get_result()),然后通过report.XXXX获取测试用例执行的结果

当前执行步骤:report.when

当前执行测试用例:report.nodeid

当前用例描述:report.nodeid

当前执行结果:report.outcome

当前报错信息:report.longrepr

当前报错异常信息:call.excinfo

执行时间:report.duration

总结

小编这里通过一个简单的测试用例进行通过hooks函数进行介绍了该函数方法的使用和结果展示,此方法主要讲我们的测试用例的一些执行结果或者错误信息如何获取,当然具体获取到这些结果后,后续我们如何使用,这个就需要通过公司项目进行实践操作了。感谢您的阅读,希望小编的文章会对您有所帮助。

 

 

标签:hooks,pytest,runtest,print,测试用例,report,执行,def
From: https://www.cnblogs.com/qican/p/17620607.html

相关文章

  • pytest用例执行顺序
    py文件的执行顺序pytest默认按字母顺序去执行的(小写英文-->大写英文--->0~9数字)setup_module->setup_claas->setup_function->testcase->teardown_function->teardown_claas->teardown_module文件按照ASCLL码排序文件内默认按照从上到下进行执行文件内的用例按照从上往下执......
  • pytest中skip用例影响测试报告的结果
    前言最近使用pytest写用例,其中有一部分用例需要skip掉,但是输出的测试报告通过率计算了skip的部分,所以通过率达不到100%。这个不符合我的需求。比如100条case,其中20条skip,即使另外80条都pass,测试报告的通过率只有80%。我查了很多资料,最终得到的结论是pytest没有这个功能。但是想......
  • 如何解决pytest参数化时出现的Unicode编码问题?
    前言Pytest是一个广泛使用的Python测试框架,通过参数化测试(ParameterizedTesting)功能,可以轻松地为测试用例提供多组输入数据。然而,当我们尝试在参数化测试中使用中文作为测试用例的IDs时,有时会遇到Unicode编码问题,导致测试报告中显示的是乱码。本文将详细解释这个问题的原因,并提供......
  • React Hooks 中的属性详解
    ReactHooks是React16.8版本中新增的特性,允许我们在不编写class的情况下使用state和其他的React特性。Hooks是一种可以让你在函数组件中“钩入”React特性的函数。以下是一些常用的ReactHooks,并附有详细的用法和代码示例。1.useStateuseState是一个Hook函数,让......
  • 配置文件pytest.ini的详细使用
    使用pytest.ini定制化和管理pytest测试框架的配置前言在使用pytest进行测试时,我们经常需要根据项目的需求进行定制化配置。pytest提供了丰富的配置选项,使我们可以灵活地调整测试框架的行为。其中,pytest.ini文件是一种方便的方式来定义和管理pytest的配置。本文将详细介绍......
  • pytest-xdist分布式测试原理浅析
    pytest-xdist执行流程:解析命令行参数:pytest-xdist会解析命令行参数,获取用户指定的分发模式、进程数、主机列表等信息。加载测试用例:pytest-xdist会加载所有的pytest测试用例,包括在当前目录和子目录下的所有测试文件和测试函数。分发测试用例:根据用户指定的分发模式,py......
  • 读excel测试用例;登录;做pytest 请求
    1.从excel中读数据 返回【{字典}{字典}】;当传参数时,可以获得对应单元格内容importxlrdimportjsonfromconfigs.configsimportHOSTfromutils.md5importget_md5#在创建excel时,将登录接口的返回结果粘贴到excel时需要“只粘贴文本”#将excel实例化defget_exce......
  • pytest -k 参数 从多个py文件中 指定要运行的方法
    #D:\pythonProject0726\test_case\test_one.pyimporttimedefsetup_module():print('准备测试数据')defteardown_module():print('清理测试数据')deftest_oneone():ex=1real=1time.sleep(3)print('1==1')asse......
  • pytest 中添加线程
    #D:\pythonProject0726\test_case\test_one.pyimporttimedefsetup_module():print('准备测试数据')defteardown_module():print('清理测试数据')deftest_one():ex=1real=1time.sleep(3)print('1==1')assert......
  • pytest 对数据的前置 后置处理
     上图示例defsetup_module():print('准备测试数据')defteardown_module():print('清理测试数据')deftest_one():ex=1real=1assertex==real仅在模块中执行一次......