带你认识 Pytest(二)
时间:2022-07-25
本文章向大家介绍带你认识 Pytest(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
上一篇简单的介绍了Pytest的安装和运行,我们这篇将介绍Pytes的执行用例的方式和异常。
调用方式
Pytest 调用测试用例执行有多种方式,下面我们就一一介绍:
1.执行指定模块的中的测试用例。
pytest 模块名
1.执行指定目录下所有的测试用例。
pytest 目录名
1.执行文件名、类名或者函数名中包含特定关键字的测试用例。
pytest -k "_class and not two" .
上面的代码就是执行当前目录下,名字包含_class但不包含two的测试用例。
1.执行指定的 nodeid
的测试用例 pytest为每一个收集到的测试用例指定一个唯一的nodeid
。其由模块名+说明符构成,中间以::间隔。其中,说明符可以是类名、函数名以及由parametrize
标记赋予的参数。示例如下:有 test_node.py
文件:
import pytestdef test_one(): print('test_one') assert 1class TestNodeId: def test_one(self): print('TestNodeId::test_one') assert 1 @pytest.mark.parametrize('x,y', [(1, 1), (3, 4)]) def test_two(self, x, y): print(f'TestNodeId::test_two::{x} == {y}') assert x == y
•指定函数名执行
pytest -q -s test_node.py::test_onetest_one.1 passed in 0.02s--------------------------------------------------------------
•指定类名 + 函数名 执行
ytest -q -s test_node.py::TestNodeId::test_oneTestNodeId::test_one.1 passed in 0.03s--------------------------------------------------------------
•指定由parametrize
标记赋予的参数执行 (后面章节会会说明parametrize
)
pytest -q -s test_node.py::TestNodeId::test_two[1-3]TestNodeId::test_two::1 == 1.1 passed in 0.03s
异常
1.assert
pytest允许你使用python标准的assert表达式写断言 如上面例子所示. 同时你也可以为断言指定了一条说明信息,用于失败时的情况说明
def testa(): assert func(5) ==7 , "hahahahahahahahha"test_2.py:5: AssertionError====================================================== short test summary info =======================================================FAILED test_2.py::testa - AssertionError: hahahahahahahahha1 failed in 0.22s
1.pytest.raises()
可以使用pytest.raises()作为上下文管理器,来编写一个触发期望异常的断言:(我就预期这里会抛出一个xxx 异常,如果不抛出,还就是不正常的)
import pytestdef myfunc(): raise ValueError("Exception 123 raised")def test_match(): with pytest.raises(ValueError): myfunc()
当用例没有返回ValueError或者没有异常返回时,断言判断失败;ps: 上下文管理器的作用域中,raises代码(myfunc())必须是最后一行,否则,其后面的代码将不会执行
1.不同数据结构比较时的优化
def test_set_comparison(): set1 = set('1308') set2 = set('8035') assert set1 == set2def test_long_str_comparison(): str1 = 'show me codes' str2 = 'show me money' assert str1 == str2def test_dict_comparison(): dict1 = { 'x': 1, 'y': 2, } dict2 = { 'x': 1, 'y': 1, } assert dict1 == dict2
针对一些特殊的数据结构间的比较,pytest对结果的显示做了一些优化:
•集合、列表等:标记出第一个不同的元素•字符串:标记出不同的部分•字典:标记出不同的条目
- ruby学习笔记(6)-Array的使用
- centos7下部署iptables环境纪录(关闭默认的firewalle)
- ruby学习笔记(5)-模块module的运用
- linux系统root密码遗忘的情况下的解决办法
- ruby学习笔记(4)-动态修改类的属性
- 如果技术是一种生命
- ruby学习笔记(2)--类的基本使用
- 域名资讯:四声域名BHHS.com被BHHS公司收购
- ruby学习笔记(1)--初识语法
- 无法启用数据库中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。
- Centos7.2下针对LDAP的完整部署记录
- .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
- 温故而知新:设计模式之适配器模式(Adapter)
- .NET Core RC2/RTM 明确了时间表
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Shiro学习笔记五(Shiro标签,及通配符)
- Shiro学习笔记六(自定义Reaml-使用数据库设置 user roles permissions)
- Luncene学习 第一天 《入门程序》
- Luncene学习二《搜索索引》
- JavaWeb--简单分页技术
- 使用Python制作第一个爬虫程序
- 使用BeautifulSoup 爬取一个页面上的所有的超链接
- 使用PlaceHolder,测试碰见的问题
- 隐藏MySQL InnoDB Cluster / ReplicaSet实例
- MySQL8.0.21——错误日志中的组复制系统消息
- 【一】、搭建Hadoop环境----本地、伪分布式
- 在组复制中指定恢复IP地址
- START GROUP_REPLICATION可以将恢复凭据作为参数
- MySQL Shell转储和加载第1部分:演示!
- MySQL Shell转储和加载第2部分:基准测试