pytest之缓存测试运行状态

2023-12-13 03:48

本文主要是介绍pytest之缓存测试运行状态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缓存

pytest执行后会自动缓存运行失败等各种结果态的用例
--lf, --last-failed 仅重新运行失败的用例
--ff,–failed-first 先运行上次失败的用例,然后再运行剩余的其他用例
--nf,–new-first选项:首先运行新测试,然后再进行其余测试,在这两种情况下,测试还按文件修改时间排序,最新的文件排在第一位。
--cache-show,用来窥视缓存的内容
–cache-clear,用来在开始一轮新的测试前清理所有的缓存。(一般不需要)

1,首次执行50条用例,其中会有两条失败

import pytest@pytest.mark.parametrize("i", range(50))
def test_num(i):if i in (17, 25):pytest.fail("bad luck")

运行结果:如预期当1=17和25时,出现两条失败

PS autotest> pytest -q test_study.py
.................F.......F........................                       [100%]
=============================== FAILURES ==============================
_____________________________ test_num[17] ___________________________
i = 17@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
____________________________ test_num[25] ___________________________
i = 25@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
2 failed, 48 passed in 0.24 seconds

2,然后使用以下命令运行它--lf
自上次运行以来,仅运行了2个失败的测试,而尚未运行48个通过测试(“deselected取消选中”):

PS autotest> pytest --lf -q test_study.py
FF                                                                       [100%]
================================== FAILURES ===================================
________________________________ test_num[17] _________________________________
i = 17@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
________________________________ test_num[25] _________________________________
i = 25@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
2 failed, 48 deselected in 0.15 seconds

3,如果使用该--ff选项运行
将运行所有测试,但是将首先执行之前的失败用例(从FF和点系列可以看出),再执行其他用例:

PS autotest> pytest --ff -q test_study.py
FF................................................                       [100%]
================================== FAILURES ===================================
________________________________ test_num[17] _________________________________
i = 17@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
________________________________ test_num[25] _________________________________
i = 25@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17, 25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
2 failed, 48 passed in 0.18 seconds

4,使用--nf命令
首先运行新测试,然后再进行其余测试,在这两种情况下,测试还按文件修改时间排序,最新的文件排在第一位。
在之前运行失败后基础上,在测试文件中新加一个测试函数test_new

import pytest@pytest.mark.parametrize("i", range(50))
def test_num(i):if i in (17,25):pytest.fail("bad luck")
def test_new(): #新加的测试函数assert 1!=1

使用--nf命令执行(特意让test_new执行失败),可以看到先执行新增的测试用例test_new,再继续执行之前的用例(从F和.顺序可以看出)

PS autotest> pytest --nf -q test_study3.py
F.................F.......F........................                      [100%]
================================== FAILURES ===================================
__________________________________ test_new ___________________________________def test_new():
>       assert 1!=1
E       assert 1 != 1
test_study3.py:33: AssertionError
________________________________ test_num[17] _________________________________
i = 17@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17,25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
________________________________ test_num[25] _________________________________
i = 25@pytest.mark.parametrize("i", range(50))def test_num(i):if i in (17,25):
>           pytest.fail("bad luck")
E           Failed: bad luck
test_study3.py:31: Failed
3 failed, 48 passed in 0.24 seconds

5,没有测试失败的数据 --实际验证不管用,无论使用all还是none参数都把用例全部执行了

如果最后一次运行没有测试失败,或者找不到缓存的lastfailed数据,pytest则可以使用–last-failed-no-failures选项将其配置为运行所有测试或不运行测试

pytest --last-failed --last-failed-no-failures all    # run all tests (default behavior)
pytest --last-failed --last-failed-no-failures none   # run no tests and exit

操作结果,以上两个参数都试过,但是都全部执行了:

PS autotest> pytest -q test_study3.py
...................................................                      [100%]
51 passed in 0.14 secondsPS autotest> pytest --last-failed --last-failed-no-failures none test_study.py
============================= test session starts =============================
collected 51 items
test_study3.py ...................................................       [100%]
========================== 51 passed in 0.15 seconds ==========================PS autotest> pytest --last-failed --last-failed-no-failures all test_study.py
============================= test session starts =============================
collected 51 items
test_study3.py ...................................................       [100%]
========================== 51 passed in 0.18 seconds ==========================

6,检查缓存内容--cache-show命令
可以使用--cache-show命令行选项来窥视缓存的内容 :
虽然执行时我指定了test_study3.py文件,但是也会把当前目录下的其他test文件都执行了

PS autotest> pytest --cache-show test_study3.py
============================= test session starts =============================
cachedir: autotest\.pytest_cache
-------------------------------- cache values ---------------------------------
cache\lastfailed contains:{'test_study.py::test_username[1]': True,'test_study.py::test_username[2]': True,'test_study.py::test_username[3]': True,'test_study3.py::test_num[2]': True,'test_study3.py::test_num[6]': True}
cache\nodeids contains:['test_study.py::test_username[1]','test_study.py::test_username[2]','test_study.py::test_username[3]','test_study3.py::test_num[0]','test_study3.py::test_num[1]','test_study3.py::test_num[2]','test_study3.py::test_num[3]','test_study3.py::test_num[4]','test_study3.py::test_num[5]','test_study3.py::test_num[6]','test_study3.py::test_num[7]','test_study3.py::test_num[8]','test_study3.py::test_num[9]','test_some/test_study2.py::test_username1']
cache\stepwise contains:[]

config.cache --待更新

其他模块
逐步调试:?
使用–sw, --stepwise 允许你每次运行的时候都修复一个用例。测试集将运行到第一个失败的用例,然后自行停止,下一次再调用时,测试集将从上次失败的用例继续运行,然后运行到下一次失败的测试用例再停止。你可以使用–stepwise-skip选项来跳过一个失败的用例,在下一个失败的用例处再停止,如果你一直搞不定当前的失败的用例且只想暂时忽略它,那么这个选项非常有用。

这篇关于pytest之缓存测试运行状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/487029

相关文章

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.