当用例执行完成后,希望获取到执行的结果,方便了解用例的执行情况,这时候就可以使用 pytest_terminal_summary 来进行测试结果的统计(可以拿到所有的执行结果)。

pytest_terminal_summary 源码:

  • terminalreporter(内部使用的终端测试报告对象)

  • exitstatus(返回给操作系统的返回码)

  • config(pytest 的 config 对象)

示例一:正常情况

创建conftest.py文件,pytest_terminal_summary函数用于收集测试结果。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
import time
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']))
    print('成功率:%.2f' % (len(terminalreporter.stats.get('passed', []))/terminalreporter._numcollected*100)+'%')
    # terminalreporter._sessionstarttime 会话开始时间
    duration = time.time() - terminalreporter._sessionstarttime
    print('total times:', duration, 'seconds')

创建test_a.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
import pytest
def test_a1():
    print("测试用例test_a1")
    assert 1 == 1
def test_a2():
    print("测试用例test_a2")
@pytest.mark.skip("跳过test_a3")
def test_a3():
    print("测试用例test_a3")
    assert 1 == 1
def test_a4():
    print("测试用例test_a4")
    assert 1 == 2

创建test_b.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
def test_b1():
    print("测试用例test_b1")
def test_b2():
    print("测试用例test_b2")
    assert 1 == 2

打开命令行,输入执行命令

pytest -s

运行结果:

获取到的测试用例执行状态打印到控制台。

示例二:setup 异常情况

修改test_b.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
import pytest
@pytest.fixture(scope="function")
def my_setup():
    assert 1 == 2
def test_b1(my_setup):
    print("测试用例test_b1")
def test_b2():
    print("测试用例test_b2")
    assert 1 == 2

打开命令行,输入执行命令

pytest -s

运行结果:

setup报错,结果标记为error。

示例三:teardown 异常情况

修改test_b.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
import pytest
@pytest.fixture(scope="function")
def my_teardown():
    yield
    assert 1 == 2
def test_b1(my_teardown):
    print("测试用例test_b1")
def test_b2():
    print("测试用例test_b2")
    assert 1 == 2

打开命令行,输入执行命令

pytest -s

运行结果:

用例总数是6,但是测试报告状态结果为2 failed, 3 passed, 1 skipped, 1 error,合计为7。

从获取的terminalreporter.stats信息可以看出:

passed里when = 'call'时,统计一次test_b1用例

<TestReport 'test_b.py::test_b1' when='call' outcome='passed'>

error里when = 'teardown'时,又统计一次test_b1用例

<TestReport 'test_b.py::test_b1' when='teardown' outcome='failed'>

所以报告结果合计为7。

但因为when='teardown'是测试用例的后置操作,一般用于数据的清理等操作,如报错不影响测试用例的执行结果,所以在conftest.py文件里

pytest_terminal_summary函数获取测试结果进行了忽略统计。

when='teardown'是测试用例的后置操作,一般用于数据的清理等操作,如报错不影响测试用例的执行结果,可以忽略。

但是如果想与测试报告结果保持一致(即报错都要统计)

修改conftest.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
微信公众号:AllTests软件测试
import time
def pytest_terminal_summary(terminalreporter, exitstatus, config):
    收集测试结果
    print(terminalreporter.stats)
    print("total:", terminalreporter._numcollected)
    print('passed:', len(terminalreporter.stats.get('passed', [])))
    print('failed:', len(terminalreporter.stats.get('failed', [])))
    print('error:', len(terminalreporter.stats.get('error', [])))
    print('skipped:', len(terminalreporter.stats.get('skipped', [])))
    # terminalreporter._sessionstarttime 会话开始时间
    duration = time.time() - terminalreporter._sessionstarttime
    print('total times:', duration, 'seconds')

再次运行用例,运行结果:

抓取的测试结果与用例执行后的状态结果一致。

当用例执行完成后,希望获取到执行的结果,方便了解用例的执行情况,这时候就可以使用 pytest_terminal_summary 来进行测试结果的统计(可以拿到所有的执行结果)。pytest_terminal_summary 源码:参数: terminalreporter(内部使用的终端测试报告对象) exitstatus(返回给操作系统的返回码) config(pytest 的 config 对象) 示例一:正常情况创建conftest.py文件,py 用例执行完成后,我们希望能获取到执行的结果,这样方便我们快速 统计 用例的执行情况。 也可以把获取到的结果当成总结报告,发邮件的时候可以先 统计 测试 结果,再加上html的报告。 pytest _ terminal _ summary 关于 Terminal Report er 类可以在_ pytest . terminal 中查看到 from _ pytest import terminal pytest _ terminal _ summary ( terminal report er , exitstatus, config) 最后的结果汇总, 正常来说我们自动化 测试 执行完成之后,都会发送一个报告,以便相关人员查看 测试 情况,但是对于经常运行的用例如果每次去打开 测试 报告查看 测试 结果,大家就会慢慢不去关注 测试 结果,所以现在大多数都会采用简单的 测试 结果提醒,有问题再去查看详细的报告。 通过企业微信、钉钉、短信等发送推送消息(常用) 通过发送邮件 如果 通过企业微信、钉钉、短信等发送推送消息 方式,我们就需要获取当前 测试 完成后执行情况,在 pytest 框架 里面有一个 Hook s 函数 pytest _ terminal _ summary 就可以轻松获取到执 配置您的 tox.ini 以运行 py.test 并生成 XML 文件: commands = py.test --junitxml={envlogdir}/result.xml 然后运行 ​​tox 和 tox_ summary .py import Terminal Report er report er = T er mainal Report er . Report er ( "StepManag er " , "Introducing steps..." ) # who & what # initialize the steps introduction report er . initialize_stepIntro ( 100 ) # sum of steps for _ in range ( 100 ): report er . report ( withStepIntro = True ) 输出将如下所示: | StepManag er | Introducing
基于命令行模式的 Pytest 参数详解_ 测试 _运行_-tb--capture=fd 时,若文件描述符(file deor)为1或者2,则会被输出至临时文件中。 --tb=auto: 默认值 ,如果有多个用力失败,仅打印第一个和最后一个用例的回溯信息,格式为 lon…https://www.sohu.com/a/514862571_12 11 24320 coffee_and_milk: 请问我在jenkins上集成运行时大部分case执行失败是怎么回事?Failed: Failed to create WebDriver: Message: Could not start a new session. New session request timed out Host info: host: '887a1d1aacc6', ip: '172.18.0.2' Build info: version: '4.14.1', revision: '03f8ede370' System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-1160.88.1.el7.x86_64', java.version: '11.0.20.1' Driver info: driver.version: unknown 接口测试工具Hoppscotch wolf_410: 压根就跳过数据库配置这一步骤 Linux 常用命令壁纸 Superzero_cat: Linux 常用命令壁纸