前言:
断言是写自动化测试脚本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。 什么是断言呢?
简单来讲就是实际结果和期望结果去对比,符合预期那就是测试pass,不符合预期那就测试failed
-assert
pytest允许你使用标准python断言来验证Python测试中的期望和实际计算值。例如你可以写下:
def f(): return 3 def test_function(): assert f() == 4
断言f() 函数的返回值,接下来会看到断言失败,因为返回的值是3,判断等于4,所以失败了;从报错信息看,断言失败的原因:3!=4。
异常信息:
接下来再看一个案例,如果想要在异常的时候,输出一些提示信息,这样报错后,就方便查看是什么原因了,assert后面跟上提示信息。
def f(): return 3 def test_function(): a = f() assert a % 2 == 0, "判断a为偶数,当前a的值为:%s"%a
运行结果:------这样当断言失败的时候,会给写出 自己写上的失败的原因:判断a为偶数,当前a的值为:3
异常断言:
在测试过程中,对于某些方法进行测试时,预测输入某些特定的数据,会抛出特定的异常,若出现特定的异常,则用例执行通过
为了写关于引发异常的断言,可以使用pytest.raises 作为上下文管理器,如下:
def test_zero_division(): with pytest.raises(ZeroDivisionError): 1/0
运行结果:
如果我们要断言它抛出的异常是不是预期的,比如执行:1/0,预期结果是抛异常: ZeroDivisionError:division by 0,那我们要断言这个异常,通常是断言异常的type和value值了
这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero,用例可以如下设计:
def test_zero_division(): with pytest.raises(ZeroDivisionError) as excinfo: 1/0 assert excinfo.type == ZeroDivisionError assert "division by zero" in str(excinfo.value)
常用断言:
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
# !/usr/bin/env python # -*-coding:utf-8 -*- """ # File : test_assert.py # Time :2021/11/21 14:30 # Author :author Kong_hua_sheng_25304 # version :python 3.8 # Description: """ import pytest def f(): return 3 def test_function(): a = f() assert a % 2 == 0, "判断a为偶数,当前a的值为:%s"%a def test_zero_division(): with pytest.raises(ZeroDivisionError) as excinfo: 1/0 assert excinfo.type == ZeroDivisionError assert "division by zero" in str(excinfo.value) def is_true(a): if a>0: return True else: return False def test_01(): """ 断言 xx为真 :return: """ a =5 b = -1 assert is_true(a) assert not is_true(b) def test_02(): """ 断言b包含a :return: """ a = "hello" b= "hellqo world" assert a in b,"判断b是否包含a,a= %s b = %s " def test_03(): """ 断言相等 :return: """ a = "yoyo" b = "yoyo" assert a ==b def test_04(): """ 断言不相等 :return: """ a = 5 b = 6 assert a!=b