前言
- 测试用例的预期结果是用例不可缺少的一部分,那么断言就是自动化测试不可缺少的一步,一个没有断言的用例,自动化测试的就没有意义了。那什么是断言呢?
- 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed
- Pytest里面使用关键字assert,断言为一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败
Assert 常用断言方式
pytest里面断言实际上就是python里面的assert断言方法,常用的有以下几种
- assert xx 判断xx为真
- assert not xx 判断xx不为真
- assert a in b 判断b包含a
- assert a == b 判断a等于b
- assert a != b 判断a不等于b
示例:
# _*_coding:utf-8 _*_
# @Time :2021/7/2 21:27
# @Author : king
# @File :test_assert.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试开发知识库】
import pytest
def func(a):
if a > 2:
return True
else:
return False
def test_01():
"""断言xx为真"""
a = 3
b = 1
assert func(a)
def test_02():
"""断言 b 包含 a"""
a = "king"
b = "hello king"
assert a in b
def test_03():
"""断言相等"""
a = "king"
b = "king"
assert a == b
def test_04():
"""断言不等于"""
a = 1
b = 2
assert a != b
if __name__ == "__main__":
pytest.main()
命令行输入: pytest -s test_assert.py
执行结果如下:
注意:用例如果没有断言且运行正常,测试结果为pass
那么断言都能正常进行吗?所以接下来我们讲解一下异常断言
Pytest 异常断言Excepiton
- 除了支持对代码正常运行的结果断言之外,Pytest也能够对 Exception 和 Warnning 进行断言,来断定某种条件下,一定会出现某种异常或者警告。在功能测试和集成测试中,这两类断言用的不多,这里简单介绍一下。
对于异常的断言,Pytest的语法是:with pytest.raises(异常类型),可以看下面的这个例子:
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
这个测试用例断言运算表达式1除以0会产生ZeroDivisionError异常。除了对异常类型进行断言,还可以对异常信息进行断言,比如:
# _*_coding:utf-8 _*_
# @Time :2021/7/2 21:43
# @Author : king
# @File :test_except_assert.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试开发知识库】
import pytest
def test_zero_division():
"""断言异常"""
with pytest.raises(ZeroDivisionError) as excinfo:
1 / 0
# 断言异常类型type
assert excinfo.type == ZeroDivisionError
# 断言异常value值
assert "division by zero" in str(excinfo.value)
命令行输入: pytest -s test_except_assert.py
执行结果如下:
这个测试用例,就断言了excinfo.value的内容中包含division by zero这个字符串,这在需要断言具体的异常信息时非常有用。
关于更多的Exception和Warnning的断言可以参考Pytest的官方文档:
Exception和Warnning的断言 Pytest的官方文档
我们再来看下下面这个断言失败你发现啥了呢?
从这个断言看出来,断言失败提示信息是不是对我们不太友好,不是很明显
优化断言提示信息
def test_assert_fail():
a = 2
b = 3
assert a == b, "判断 a 和 b 是否相等 a:{} b: {}".format(a, b)
命令行输入: pytest -s test_assert_fail.py
执行结果如下:
欢迎您给我留言,我们一起讨论。