Pytest断言使用
目录
assert断言方法
异常断言Excepiton
检查断言装饰器
Pytest使用的断言是使用python内置的断言assert。Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。即pytest测试结果为False的断言为断言失败即测试用例执行失败,反之为断言成功即测试用例执行成功。
断言使用场景:
- 为测试结果作断言
- 为断言不通过的结果添加说明信息
- 为预期异常作断言
- 为失败断言作自定义说明信息
assert断言方法
assert关键字后面接表达式,常用的assert断言方法如下:
- 判断xx为真:
assert xx
- 判断xx不为真:
assert not xx
- 判断b包含a:
assert a in b
- 判断b不包含a:
assert a not in b
- 判断a等于b:
assert a == b
- 判断a不等于b:
assert a != b
示例:
# 为测试结果作断言import pytest
from func import *class TestFunc:def test_add_by_class(self):assert add(2,3) == 5
# 为断言不通过的结果添加说明信息def test_login():# 使用python内置的断言# "1是不等于2的"是断言失败后,抛出异常输出的自定义提示信息assert 1 == 2, "1是不等于2的"test_login()# 运行结果:
AssertionError: 1是不等于2的
异常断言Excepiton
异常断言即为断言抛出的异常是预期的异常,执行的测试用例是成功的。
使用pytest.raises()
作为上下文管理器。当抛出异常时,可获取到对应的异常实例,然后断言它抛出的异常是不是预期的异常。当代码抛出异常时,如果和raises指定的异常类相匹配,则断言不会失败。
官方文档:How to write and report assertions in tests — pytest documentation
with pytest.raises()
执行结束后会生成一个ExceptionInfo
的实例对象,该对象包含type , value, traceback属性。
# 变量存储该异常的所有信息
with pytest.raises(TypeError) as 变量: # 获取变量的所有属性,即type、value、tracebackprint(变量.__dict__)
注意:断言type的时候,异常类型是不需要加引号的。断言value值的时候需转换str类型,value属性可作异常的说明信息。
示例如下:
import pytestdef test_zero_division_long():with pytest.raises(ZeroDivisionError) as excinfo:1 / 0# 断言异常类型 typeassert excinfo.type == ZeroDivisionError# 断言异常 value 值assert "division by zero" in str(excinfo.value)
with pytest.raise(ZeroDivisionError)
用于对于故意测试异常代码的情况(已知异常),断言通过用例执行成功显示passed,不通过会显示failed。
示例如下:
# 为预期异常作断言完整示例,执行用例为True# ./func.py
def add(a,b):if isinstance(a,int) and isinstance(b,int):return a+belse:raise TypeError('数据类型错误')# ./test_case/test_func.py
import pytest
from func import *class TestFunc:# 正常测试用例def test_add_by_class(self):assert add(2,3) == 5# 异常测试用例,期望结果为抛出TypeError异常def test_add_by_func_aaa(self,*args, **kwargs):with pytest.raises(TypeError) as E:add('3',4)print(E.type)print(E.value)print(E.traceback) # ./run_test.py
import pytestif __name__ == '__main__':pytest.main(['-v'])
# 木有抛出预期异常的示例,执行用例为False# ./func.py
def add(a,b):# 指定异常,从此处直接抛出异常raise NameError("名称错误")if isinstance(a,int) and isinstance(b,int):return a+belse:raise TypeError('数据类型错误')# ./test_case/test_func.py
import pytest
from func import *class TestFunc:# 异常测试用例,期望结果为爆出TypeError异常def test_add_by_func_aaa(self,*args, **kwargs):with pytest.raises(TypeError):add('3',4)# ./run_test.py
import pytestif __name__ == '__main__':pytest.main(['-v'])
可将match关键字参数传递给上下文管理器pytest.raises()
,来测试正则表达式与异常的信息表达形式是否匹配。match方法相当于re.search功能。
注意:这种方法只能断言value,不能断言type。
示例如下:
import pytestdef test_zero_division_long():with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:1 / 0# match方法相当于re.search功能,即match="zero"也是允许的
def test_zero_division_long():with pytest.raises(ZeroDivisionError, match="zero") as excinfo:1 / 0
pytest. raised()
函数还有另一种形式,在这里传递一个函数,该函数将使用给定的*args和**kwargs执行,并断言引发了给定的异常。在没有异常或错误异常的情况下,报告器将为您提供有用的输出。
pytest.raises(ExpectedException, func, *args, **kwargs)
断言某个测试用例中可能出现多个不同的预期异常的解决办法:
在with pytest.raises()
中传入异常类型的参数,从传入一个异常类型,改变为传入一个异常类型组成的元组。同样只是传入一个参数。
示例如下:
# ./func.py
def add(a,b):raise NameError('名字错了')if isinstance(a,int) and isinstance(b,int):return a+belse:raise TypeError('数据类型错误')# ./test_case/test_func.py
import pytest
from func import *class TestFunc:# 异常测试用例,期望结果为爆出TypeError异常def test_add_by_func_aaa(self,*args, **kwargs):# 将预期中多个错误信息组成一个元组with pytest.raises((TypeError,NameError),match=r'.*错.*$') as E:add('3',4)# ./run_test.py
import pytestif __name__ == '__main__':pytest.main(['-v'])
检查断言装饰器
检查异常装饰器@pytest.mark.xfail()
:用于对于检查未修复的错误,即可能发生的异常。断言通过用例执行成功会显示xfailed,不通过显示failed。
作用:检查是否有异常,不确定是否有异常。
示例如下:
# 单个异常时断言装饰器使用@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():1 / 0
# 多个异常时断言装饰器使用@pytest.mark.xfail(raises=(TypeError, NameError))
def test_add_by_func_aaa2():add("3", 4)
Pytest断言使用相关推荐
- Pytest断言assert
常用断言 pytest 断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种 assert xx :判断 xx 为真 assert not xx :判断 xx 不为真 ass ...
- python单元测试断言_Python单元测试框架之pytest -- 断言-阿里云开发者社区
对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...
- 接口测试 Pytest断言处理_告警断言
pytest中对告警进行断言采用pytest.warns()方法,其断言的方法与pytest.raises()类似.pytest.warns()除了能断言告警外,还能够捕获告警信息,并对捕获的告警信息 ...
- pytest测试框架系列 - pytest 断言assert使用
前言 测试用例的预期结果是用例不可缺少的一部分,那么断言就是自动化测试不可缺少的一步,一个没有断言的用例,自动化测试的就没有意义了.那什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就 ...
- Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言
分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...
- Python测试框架Pytest的基础入门
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- 不夸张地说,这是我见过最通俗易懂的,pytest入门基础教程
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- pytest接口自动化测试框架 | 汇总
视频来源:B站<冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频[软件测试]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Pytest和Allure测试框架-超详细版+实战
加我微信:hz223336,领取pytest视频 文章目录 一:pytest的介绍,安装,框架结构,执行方式 1,特点 2,安装 3, pytest的框架结构 4,执行方式 二:Pytest -断言. ...
最新文章
- opencv鼠标画路径点
- Oracle 表空间的段管理
- Jmeter服务器监控插件使用
- 令人泪目 浙江江山古稀老人照顾俩脑瘫儿近半世纪
- centos6.6-zabbix2.4.5安装实战
- C++伪(pseudo)随机数生成及简单应用
- maya 替换名称_maya替换对象,MAYA
- Vue:使用vue-json-excel导出数据到excel
- SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)...
- 全网最全MATLAB学习归纳总结(建模学习必备)
- 关于jsp表单提交中action所指向Servlet路径问题的总结
- 史上最全进入BIOS方法及U盘重装系统步骤详解
- mysql前台工具下载_phpmyadmin工具下载
- 《MGMatting:Mask Guided Matting via Progressive Refinement Network》论文笔记
- 宝塔搭建腾讯云轻量级云服务器基本步骤
- Ant Design的入门使用教程
- 如果恰巧有一台超微服务器,如何调节风扇转速
- RIP1实验1(实现不同路由器 不同PC机之间的通信)
- Vue 实现Redis管理页面
- 个人空间的编辑个人资料案例(简单介绍 仅供参考)
热门文章
- 如何写Java框架 — 前言
- 手机端实现6位验证码输入框效果
- X86_64架构的ubuntu16.04更换了系统源 update提示无法下载一些包 404 Not Found
- JAVA CAS原理深度分析
- Calendar类的常用方法分享
- jdk1.6 1.7 1.8下载地址
- [原创][PowerShell教程][06]PowerShell中格式化命令和输出命令
- 第二版:JAVA对象对比VO对象找出差异值结合swagger-ApiModel无需自定义注解
- 一张图看懂bug的生命周期
- [Codis] Codis3部署流程