Pytest 测试用例断言
同学们大家好,这个章节我们来学习一下在 pytest 测试框架中如何进行断言。
简介
在 pytest 中,断言(assert)是用来验证测试结果是否符合预期的基本手段。
断言语句用的是 Python 内置的 assert 语句,用于验证期望的结果与实际的结果是否相符,它是测试框架中检查测试正确性的基础。
assert 可以检查某个条件是否为 True,如果条件为 False,则会抛出 AssertionError 异常,并且测试失败。
在前面的章节中其实提到过,pytest 中的断言使用的是 python 内置的 assert 关键字。它可以验证预期结果和实际结果的关系,所以 assert 后面跟的是一个条件表达式。如果条件表达式的结果为 True,断言通过。反之,如果条件表达式的结果是 False,就会抛出 Assertion Error 这个异常,断言也就失败了。
使用断言的优点
Pytest 使用断言可以使测试代码更简洁、直观和可读,并且提供了友好的错误消息和异常处理,帮助开发人员更好地进行测试和调试。
那我们为什么需要在测试用例中添加断言呢?其实加上断言语句可以让我们的测试代码更简洁,不用自己去实现对比的逻辑了,而且也更直观可读性会更好。assert 已经给我们封装好了友好的错误提示和异常处理,让我们能更方便的去测试和调试。
断言的用法
assert <表达式>
assert <表达式>, <描述>
assert <bool expression>
assert <bool expression>, <message>
下面我们来看看断言的具体用法。基本语法是 assert 后跟上条件表达式,这个条件表达式的结果是布尔值。也可以在条件表达式的后面加上失败后的描述信息,中间用逗号做分隔。下面我们来看几个具体的断言场景。
断言等于
断言实际结果是否等于预期结果。
def test_equal():
assert 1 + 1 == 2
首先先来看一下如何断言实际结果与预期结果相等。其实只需要在 assert 后面编写一个相等的条件表达式就可以,实际结果等于等于预期结果。这样,如果条件表达式的结果为 True,则代表实际结果与预期结果是相等的。比如这个例子里,要断言 1加1 的结果和 2 是相等的。这里大家要注意,其实在这个断言场景中,实际结果与预期结果的前后顺序没有特别严格的规定。不过推荐大家先写实际结果,然后再写预期结果,这样在断言失败的场景下,pytest 可以更准确的给出失败原因的描述。
断言不等于
断言实际结果是否不等于预期结果。
def test_not_equal():
assert 2 + 2 != 5
下面再看看,如果想要断言实际结果与预期结果不相等要怎么做。我们在 assert 关键字后写上实际结果不等于预期结果这样的条件表达式就可以。如果这个条件表达式的结果为 True,则代表预期结果不等于实际结果。比如例子当中就是要断言 2 加 2 的结果不等于 5。
断言大于和小于
断言实际结果是否大于或者小于某个值。
def test_greater_than():
# 检查 3 是否大于 2
assert 3 > 2
def test_less_than():
# 检查 2 是否小于 3
assert 2 < 3
如果我们想要断言的是实际结果大于或者小于某个值,可以在 assert 后面的条件表达式中使用大于号或者小于号。如果这个条件表达式的结果为 True,则代表实际结果大于或者小于某个值。比如例子中分别断言的是 3 大于 2 和 2 小于 3。
断言包含
断言实际结果中是否包含某个值。
def test_in():
fruits = ['apple', 'banana', 'cherry']
# 检查 'apple' 是否在列表 fruits 中
assert 'apple' in fruits
除了上面几种之外,我们还可以断言实际结果中是否包含某个值。比如列表或者字符串中是否包含某些值。这个时候 assert 关键字后面可以使用某个值 in 列表或者字符串这种方式。比如例子中就是断言了 apple 这个字符串是否存在于 fruits 列表中。
断言为空
断言实际结果是否为空,或不为空。
def test_is_none():
value = None
# 检查值是否为 None
assert value is None
def test_is_not_empty():
value = "hello"
# 检查字符串是否非空
assert value
当然了,我们也可以断言某个值是否为空。这个时候就可以在 assert 关键字后面使用 is None 判断某个值是否为空,或者直接 assert 后跟上对应变量名称,判断这个值是否不为空。
断言的自定义错误消息
可以为 assert 语句指定自定义错误消息,在断言失败时展示。
自定义的错误信息可以帮助测试人员更快地理解测试失败的原因。
def test_addition():
result = 1 + 1
# 自定义错误消息
assert result == 3, f"预期结果是 3, 不是 {result}"
上面是给大家介绍了最常见的一些断言的场景,如果我们想要在断言失败的情况下加上一些说明信息的话,也可以直接在条件表达式后面,使用逗号分隔,用字符串的方式添加自定义错误消息。比如例子中,当断言失败时,会展示失败的原因是因为预期结果是 3,但是实际结果不是。
断言结果
标准的 assert 语句会自动解释失败的断言并显示详细的信息。
pytest 会展示出失败的断言表达式和实际结果,这使得调试非常方便。
上面说的都是断言语句如何编写,那断言执行的结果是怎么样的呢?其实如果断言成功的话,会展示 pass。如果断言失败,assert 语句会自动解释失败的原因,并且把详细信息,包括失败的断言表达式和实际结果都显示出来。非常方便我们做调试。
下面给大家演示一下具体操作。我已经在项目中创建好了测试文件 test assert。然后刚才的示例已经都放到文件中了。这些测试用例当中就包含了刚才给大家介绍的场景,比如断言相等、不相等、大于、小于、包含、为空、不为空、添加自定义断言失败消息的场景。下面我们来执行一下看看效果。还是移动鼠标到文件上,点击右键选择 run 整个文件。可以看到,最终的结果都是符合我们编写预期的。最后的这个也能看到失败的具体原因和自定义的失败之后的提示信息。
./assets/Pytest测试用例断言.mp4
总结
- Pytest 断言优点。
- Pytest 断言的用法。
好了,pytest 中断言的常见用法就先给大家介绍这么多。