目录

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断言使用相关推荐

  1. Pytest断言assert

    常用断言 pytest 断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种 assert xx :判断 xx 为真 assert not xx :判断 xx 不为真 ass ...

  2. python单元测试断言_Python单元测试框架之pytest -- 断言-阿里云开发者社区

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...

  3. 接口测试 Pytest断言处理_告警断言

    pytest中对告警进行断言采用pytest.warns()方法,其断言的方法与pytest.raises()类似.pytest.warns()除了能断言告警外,还能够捕获告警信息,并对捕获的告警信息 ...

  4. pytest测试框架系列 - pytest 断言assert使用

    前言 测试用例的预期结果是用例不可缺少的一部分,那么断言就是自动化测试不可缺少的一步,一个没有断言的用例,自动化测试的就没有意义了.那什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就 ...

  5. Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言

    分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...

  6. Python测试框架Pytest的基础入门

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  7. 不夸张地说,这是我见过最通俗易懂的,pytest入门基础教程

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  8. pytest接口自动化测试框架 | 汇总

    视频来源:B站<冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频[软件测试]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  9. Pytest和Allure测试框架-超详细版+实战

    加我微信:hz223336,领取pytest视频 文章目录 一:pytest的介绍,安装,框架结构,执行方式 1,特点 2,安装 3, pytest的框架结构 4,执行方式 二:Pytest -断言. ...

最新文章

  1. opencv鼠标画路径点
  2. Oracle 表空间的段管理
  3. Jmeter服务器监控插件使用
  4. 令人泪目 浙江江山古稀老人照顾俩脑瘫儿近半世纪
  5. centos6.6-zabbix2.4.5安装实战
  6. C++伪(pseudo)随机数生成及简单应用
  7. maya 替换名称_maya替换对象,MAYA
  8. Vue:使用vue-json-excel导出数据到excel
  9. SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)...
  10. 全网最全MATLAB学习归纳总结(建模学习必备)
  11. 关于jsp表单提交中action所指向Servlet路径问题的总结
  12. 史上最全进入BIOS方法及U盘重装系统步骤详解
  13. mysql前台工具下载_phpmyadmin工具下载
  14. 《MGMatting:Mask Guided Matting via Progressive Refinement Network》论文笔记
  15. 宝塔搭建腾讯云轻量级云服务器基本步骤
  16. Ant Design的入门使用教程
  17. 如果恰巧有一台超微服务器,如何调节风扇转速
  18. RIP1实验1(实现不同路由器 不同PC机之间的通信)
  19. Vue 实现Redis管理页面
  20. 个人空间的编辑个人资料案例(简单介绍 仅供参考)

热门文章

  1. 如何写Java框架 — 前言
  2. 手机端实现6位验证码输入框效果
  3. X86_64架构的ubuntu16.04更换了系统源 update提示无法下载一些包 404 Not Found
  4. JAVA CAS原理深度分析
  5. Calendar类的常用方法分享
  6. jdk1.6 1.7 1.8下载地址
  7. [原创][PowerShell教程][06]PowerShell中格式化命令和输出命令
  8. 第二版:JAVA对象对比VO对象找出差异值结合swagger-ApiModel无需自定义注解
  9. 一张图看懂bug的生命周期
  10. [Codis] Codis3部署流程