今天这篇技术文章要分享的是pytest框架当中的断言。会从以下几个方面来分享:
一、断言的概念
简单来讲就是实际结果和期望结果去对比,符合预期结果那就测试通过,不符合预期那就测试失败。
二、pytest框架断言常用的方法
在pytest框架里面,断言主要是用到assert
assert xx 判断xx为真
assert not xx 判断xx不为真
assert a in b 判断b包含a
assert a == b 判断a等于b
assert a != b 判断a不等于b
三、pytest框架的断言与unittest框架的断言有什么区别
在pytest框架里面,断言只用一种方式assert就可以实现了,简单方便。
unittest框架里面,断言分了好几种类型:
1、基本的布尔断言,即:要么正确,要么错误的验证
断言方法 断言描述
assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail
assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail
assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail
assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail
assertIsNone(expr, msg=None) 验证expr是None,不是则fail
assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail
assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail
assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail
assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail
assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail
2.比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值)
assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
assertNotAlmostEqual (first, second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7
注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta
assertGreater (first, second, msg = None)
验证first > second,否则fail
assertGreaterEqual (first, second, msg = None)
验证first ≥ second,否则fail
assertLess (first, second, msg = None)
验证first < second,否则fail
assertLessEqual (first, second, msg = None)
验证first ≤ second,否则fail
assertRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
assertNotRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
3.复杂断言(一般用的比较少,像断言两个列表、元组等) (省略)
从上面也可以看出来,unittest框架的断言的确是比pytest框架要复杂很多。
四、pytest框架断言的使用
除了上面说的常用的断言方法:
assert xx 判断xx为真
assert not xx 判断xx不为真
assert a in b 判断b包含a
assert a == b 判断a等于b
assert a != b 判断a不等于b
还可以这么用:
1、想知道断言失败时的一些关于失败的原因等说明信息,assert也能满足该功能。
assert 断言的内容,”断言的说明”
2、一些测试用例中,比如异常测试用例,测试的结果必然是失败会报出异常的。这时候用例的期望结果就是该异常。
对于异常的断言,Pytest的语法是:with pytest.raises(异常类型)
最后给大家附上代码:
# #!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author : 九九
# @FileName: test_assert.py
# @Software: PyCharm
import pytest
# 定义一个测试类
class TestAssert():
# 定义一个功能
# 传一个变量,判断变量是否为偶数,如果为偶数则用例通过,否则用例失败
def func1(self,a):
if a%2==0:
return True
else:
return False
# 定义一个测试用例
def test_func1(self):
assert self.func1(3)
# 定义一个测试用例,验证包含断言的方法
def test_in(self):
# 定义一个列表
list_demo=[1,2,3,4,5,6]
# 验证数字3是不是在list_demo里面,如果在,则用例通过,否则用例失败
assert 3 in list_demo
# 定义一个测试用例,验证断言的不包含方法
def test_notin(self):
list_demo = [1, 2, 3, 4, 5, 6]
# 验证数字7不包含在list_demo里面,如果不包含,则用例通过,否则用例失败
assert 5 not in list_demo
# 定义一个测试用例,验证断言的判断相等的方法
def test_ass(self):
name="九九"
assert name=="九","变量的名字,和最终预期的名字不一致,所以失败"
# 定义一个测试用例,验证异常信息断言
def test_zero_division(self):
# 断言异常
with pytest.raises(ZeroDivisionError) as exc:
1/0
# 判断异常的类型是否和预期一致
assert exc.type==ZeroDivisionError
# 断言异常的value值和预期是否一致
assert "division by sss" in str(exc.value)
更多关于软件测试培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。