一、前言
断言是自动化测试基本最重要的一步,一个用例没有断言,就等于失去自动化测试的意义了。什么是断言呢?
简单来讲就是实际结果和期望结果去对比,符合预期就测试pass,不符合预期结果就测试failed
二、assert
pytest允许您使用标准python断言来验证python测试中的期望和值。例如
def f(): return 3 def test_function(): assert f()==4
运行结果:
从报错信息可以看到断言失败原因:E assert 3 == 4
三、异常信息
接下来再看一个案例,如果想在异常的时候,输出一些提示信息,这样报错后就知道什么原因了
def f(): return 3 def test_function(): a=f() assert a%2==0,"判断a为偶数,当前a的值为:%s"%a
运行结果:
这样当断言失败的时候,会给出自己写的失败原因了
E AssertionError: 判断a为偶数,当前a的值为:3
四、异常断言
为了写关于引发异常的断言,可以使用pytest.raises作为上下文管理器,如下
import pytest def test_zero_division(): with pytest.raises(ZeroDivisionError): 1/0
运行结果:
如果我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError:dision by zero,那我们要断言这个异常,通常是断言异常的type和value值了。
这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero,于是用例可以这样设计。
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)
excinfo是一个异常信息实例,它是围绕实际引发的异常的包装器。主要属性是.type、.value和.traceback
五、常用断言
pytest里面断言实际上就是python里面的assert断言方法,常用的有以下几种
1.assert xx判断xx为真
2.assert not xx判断xx不为真
3.assert a in b 判断b包含a
4.assert a == b 判断a等于b
5.assert a != b 判断a不等于b
import pytest def is_true(a): if a>0: return True else: return False def test_01(): """断言xx为真""" a = 5 b = -1 assert is_true(a) assert not is_true(b) # 一个用例可以支持多个断言 def test_02(): """断言b包含a""" a = "hello" b = "hello world" assert a in b def test_03(): """断言相等""" a = "bibi" b = "bibi" assert a == b def test_04(): """断言不等于""" a = 5 b = 6 assert a != b if __name__ == "__main__": pytest.main(["-s","test_assert4.py"])