前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python测试框架pytest(16)运行上次失败用例、查看与清除缓存cache、自定义标记mark

Python测试框架pytest(16)运行上次失败用例、查看与清除缓存cache、自定义标记mark

作者头像
wangmcn
发布2022-07-26 14:28:05
9030
发布2022-07-26 14:28:05
举报
文章被收录于专栏:AllTests软件测试

Python测试框架pytest(16)

运行上次失败用例、查看与清除缓存cache、自定义标记mark

目录

  • 1、运行上次失败用例
  • 2、查看与清除缓存cache
    • 2.1、--cache-show
    • 2.2、--cache-clear
  • 3、自定义标记mark

1、运行上次失败用例

执行全部用例,第一次部分用例执行失败,此时当被测系统修复后,可执行上次失败的用例。

命令行输入 pytest -h

可以查询到两个命令行参数:--lf 和 --ff

参数:

  • --lf, --last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)。
  • --ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)。

创建test_lf_ff.py文件

脚本代码:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

@pytest.fixture()
def open():
    name = "AllTests软件测试"
    return name

def test_case1(open):
    assert open == "AllTests软件测试"

def test_case2(open):
    assert open == "AllTests"

def test_case3(open2):
    assert open == "AllTests软件测试"

打开命令行,输入执行脚本命令:

代码语言:javascript
复制
pytest test_lf_ff.py

运行结果:

第一次运行3个测试用例,1个passed、1个failed、1个error。

1、如果只想运行 failed 和 error 用例,使用参数 --lf

在命令行输入:

代码语言:javascript
复制
pytest --lf test_lf_ff.py

运行结果:

2、如果想先运行上次失败的,后运行其它通过的用例,使用参数 --ff

在命令行输入:

代码语言:javascript
复制
pytest --ff test_lf_ff.py

运行结果:

2、查看与清除缓存cache

pytest 执行完测试用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录上一次失败的用例和用例的 ids 等。

pytest 命令行参数:

  • --cache-show=[CACHESHOW] 显示缓存内容,不执行收集用例或测试用例。可选参数:glob(默认值:"*")。
  • --cache-clear 在测试运行开始时删除所有缓存内容。

创建test_cache.py文件

编写4条测试用例

脚本代码:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

def test_case1():
    assert 0 == 0

def test_case2():
    assert 0 == 1

def test_case3():
    assert 0 == 0

def test_case4():
    assert 0 == 2

命令行输入执行命令:

代码语言:javascript
复制
pytest test_cache.py

运行结果:

2条用例失败,2条用例成功。

运行完成后,项目根目录会生成.pytest_cache的缓存文件夹。

目录结构:

lastfailed文件记录之前运行用例为失败的

可以看到刚执行完的用例,用例2和用例4为失败的用例。

nodeids文件记录之前所有运行用例的节点

2.1、--cache-show

命令行输入执行命令:

代码语言:javascript
复制
pytest --cache-show

运行结果:

显示缓存内容

2.2、--cache-clear

修改test_cache.py文件

脚本代码:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
def test_case5():
    assert 0 == 0

def test_case6():
    assert 0 == 1

def test_case7():
    assert 0 == 0

def test_case8():
    assert 0 == 2

命令行输入执行命令:

代码语言:javascript
复制
pytest test_cache.py

运行结果:

2条用例失败,2条用例成功。

查看.pytest_cache的缓存文件夹(里面的文件记录是累加的)

lastfailed文件(包含修改test_cache.py文件之前执行的失败用例记录)

nodeids文件(包含修改test_cache.py文件之前执行的用例节点)

使用命令行参数--cache-clear

命令行输入执行命令:

代码语言:javascript
复制
pytest --cache-clear test_cache.py

运行结果:

执行用例之前,清空所有的缓存内容。

再次查看.pytest_cache的缓存文件夹

lastfailed文件,显示最新的用例失败的记录

nodeids文件,显示最新的用例节点

3、自定义标记mark

pytest 可以支持自定义标记,自定义标记可以把一个项目划分多个模块,然后指定模块名称执行。

例如:可以标明哪些用例是在 Windows 下执行的,哪些用例是在 Mac 下执行的,在运行代码时指定 mark 即可。

示例一:

1、创建test_mark.py文件

脚本代码:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

@pytest.mark.case1
def test_case1():
    print("====执行 test_case1====")

@pytest.mark.case2
def test_case2():
    print("====执行 test_case2====")

@pytest.mark.case2
def test_case3():
    print("====执行 test_case3====")

@pytest.mark.case3
class TestClass:
    def test_method(self):
        print("====执行 test_method====")

def test_noMark():
    print("====没有标记测试====")

2、打开命令行,输入执行命令:

代码语言:javascript
复制
pytest -s -m case1 test_mark.py

运行结果:

只执行标记是case1的(函数test_case1)。

示例二:

还是使用test_mark.py文件。

如果不想执行标记是case1,其他的都执行,直接取反即可。

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

代码语言:javascript
复制
pytest -s -m "not case1" test_mark.py

运行结果:

除了标记是case1的(函数test_case1)没有执行,其他的标记都执行了。

示例三:

还是使用test_mark.py文件。

如果想执行多个自定义标记的用例,可以用or

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

代码语言:javascript
复制
pytest -s -m "case2 or case1" test_mark.py

运行结果:

执行自定义标记case1、case2。注意:执行的顺序,不一定在命令前就先执行。

示例四:

如上面几个示例,如何避免执行后有warnings信息。

1、还是使用test_mark.py文件。之后再创建一个pytest.ini文件(注意:pytest.ini需要和运行的测试用例同一个目录,或在根目录下作用于全局)。

例如:

文件内容:

代码语言:javascript
复制
[pytest]
markers =
    case1: 执行case1的测试用例
    case2: 执行case2的测试用例
    case3: 执行case3的测试用例

2、打开命令行,输入执行命令:

代码语言:javascript
复制
pytest -s -m "case2 or case1" test_mark.py

运行结果:

warnings信息不显示了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 2.1、--cache-show
  • 2.2、--cache-clear
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档