前言
今天笔者想和大家来聊聊,pytest中assert断言的使用,废话就不多说了我们直接进入正题哈。
同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取
软件测试视频教程观看处:
字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战
一、常用断言
unittest断言方式是自身框架来实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类,因此pytest使用的断言是使用python内置的断言assert,相对于unittest各种各样的断言方法,但内置的断言会更简洁,它只有一种,如下。
关键代码:assert 表达式, 错误提示信息。
def test_login():
# 使用python内置的断言
assert 1 == 2, '1是不等于2的' # 错误信息也可以不写
test_login()
运行结果:
C:\software\python\python.exe D:/learn/test.py
Traceback (most recent call last):
File "D:/learn/test.py", line 13, in <module>
test_login()
File "D:/learn/test.py", line 11, in test_login
assert 1 == 2, '1是不等于2的'
AssertionError: 1是不等于2的
Process finished with exit code 1
常用的断言表达有以下几种:
- assert xx:判断xx为真
- assert not xx:判断xx不为真
- assert a in b:判断b包含a
- assert a not in b:判断b不包含a
- assert a == b:判断a等于b
- assert a != b:判断a不等于b
二、异常断言
可以使用pytest.raises作为上下文管理器,当抛出异常时可以获取到对应的异常实例,然后断言它抛出的异常是不是预期的。
# 断言异常
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
如任意一个自然数除以0时,由于0不能作为被除数,执行时就会抛出ZeroDivisionError异常,提示division by zero。
# 详细断言异常
def test_zero_division_long():
with pytest.raises(ZeroDivisionError) as excinfo:
1 / 0
# 断言异常类型 type
assert excinfo.type == ZeroDivisionError
# 断言异常 value 值
assert "division by zero" in str(excinfo.value)
注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需转str类型。
三、扩展
正则断言
可以将match关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配
注意:这种方法只能断言value,不能断言type
# 自定义消息
def test_zero_division_long():
with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:
1 / 0
该match方法的regexp参数 re.search函数匹配,因此在上面的示例中match='zero'也可以使用
# 自定义消息
def test_zero_division_long():
with pytest.raises(ZeroDivisionError, match="zero") as excinfo:
1 / 0
运行结果:
检查断言装饰器
当代码抛出异常时,如果和raises指定的异常类相匹配,就不会断言失败。
它相当于一个检查异常装饰器,目的是检查是否有异常(不确定是否有异常),不同使用场景:
- with pytest.raise(ZeroDivisionError)对于故意测试异常代码的情况,使用可能会更好
- 而@pytest.mark.xfail(raises=ZeroDivisionError)对于检查未修复的错误(即可能会发生异常),使用检查断言可能会更好
# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
1 / 0
执行结果:
总结
今天的分享就到这里了哟喜欢的小伙伴可以点赞收藏评论加关注哟,关注我,我每天都会分享不同的知识哟。
PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!
☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。