前言
断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?
简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed
assert
pytest允许您使用标准Python断言来验证Python测试中的期望和值。例如,你可以写下
#test.sa.py def f(): return 3 def test_a(): assert f()==4
断言f()函数的返回值,接下来会看到断言失败,E assert 3==4,因为返回的值是3,判断等于4.所以失败了。
异常信息
接下来再看一个案例,如果想在异常的时候,输出一些提示信息,这样报错后,就方便查看是什么原因了。
#test.sa.py def f(): return 3 def test_a(): a=f() assert a%2==0,"判断a为偶数?a的值:{}".format(a)
运行结果
这样当断言失败的时候,会给出自己写的失败原因了E AssertionError: 判断a为偶数?a的值:3
异常断言
为了写关于引发异常的断言,可以使用pytest.raise作为上下文管理器,如下
#test.sa.py import pytest def test_z(): with pytest.raises(ZeroDivisionError): 1/0 #1/2#报错
运行结果
如果我们要断言它抛出的异常是不是预期的,比如执行:1/0,预期结果是抛出异常:ZeroDivisionError:division by zero,那我们要断言这个异常,通常是断言异常的type和value值了。
这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero,于是用例可以这样设计。
#test.sa.py import pytest def test_z(): with pytest.raises(ZeroDivisionError) as excinfo: 1/0 # 断言异常类型type assert excinfo.type==ZeroDivisionError #断言异常value值 assert "division by zero" in str(excinfo.value) #assert "dd" in str(excinfo.value)#断言失败
excinfo是一个异常信息实例,它是围绕实际引发的异常的包装器。主要属性是.type 、.value和.traceback
注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需要转str
在上下文管理器窗体中,可以使用关键字参数消息指定自定义失败消息:
报错,不晓得怎么办?
常用断言
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
#test.sa.py import pytest def is_true(a): if a>0: return True else: return False def test_10(): a=5 b=-1 assert is_true(a)#真 assert is_true(b) #假 def test_20(): a="he" b="h he" assert a in b#真 #assertIn(a,b)#报错#unittest中语法 def test_30(): a="py" b="py" assert a==b#真 #assertEqual(a,b)#报错,assertEqual未定义 def test_40(): a=5 b=6 assert a!=b#真 if __name__=="__main__": #pytest.main(["-s","test_sa.py"]) pytest.main(["-s","test_case1.py"])#和上面执行结果一样
原文:https://www.cnblogs.com/canglongdao/p/13400115.html