断言方法
1、执行自动化测试中最重要的就是判断用例是否执行通过。python UnitTest单元测试框架提供了一整套内置的断言方法
⑴如果断言成功,则无影响,代码继续执行,标识该测试用例为成功状态
⑵如果断言失败,则抛出一个AssertionError,并标识该测试用例为失败状态
⑶如果用例执行过程中发生异常,则当做错误来处理
2、在UnitTest框架中定义了以下几类断言方法:
⑴基本的Boolean断言,即:要么True,要么False的验证
⑵简单比较断言,例如比较a,b两个变量的值
⑶复杂断言
3、基本断言应该是最常使用的断言方式:基本的断言方法提供了测试结果是True还是False
4、所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回
5、UnitTest框架内置的断言方式有:
断言方法 | 断言描述 | 备注 |
---|---|---|
assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail | arg1 = arg2 |
assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail | arg1 != arg2 |
assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail | bool(expr) IS true |
assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail | bool(expr) IS false |
assertIs(arg1, arg2, msg=None) | 验证arg1、arg2是同一个对象,不是则fail | arg1 is arg2 |
assertIsNot(arg1, arg2, msg=None) | 验证arg1、arg2不是同一个对象,是则fail | arg1 not is arg2 |
assertIsNone(expr, msg=None) | 验证expr是None,不是则fail | expr is one |
assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail | expr not is one |
assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail | arg1 in arg2 |
assertNotIn(arg1, arg2, msg=None) | 验证arg1不是arg2的子串,是则fail | arg1 not in arg2 |
assertIsInstance(obj, cls, msg=None) | 验证obj是cls的实例,不是则fail | IsInstance(obj,cls) |
assertNotIsInstance(obj, cls, msg=None) | 验证obj不是cls的实例,是则fail | not IsInstance(obj,cls) |
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() |
断言是否相等
1、方法名:assertEqual(arg1, arg2, msg=None)
2、断言第一个参数与第二个参数是否相等,如果不相等则测试失败
⑴msg为可选参数,用于定义测试失败时打印的信息
例1:
import unittest
class InputTest(unittest.TestCase):
def setUp(self):
#用于测试用例执行前的初始化工作
number = input("请输入一个整数:")
self.number = int(number)#这个感觉跟__init__里面的变量差不多
def test_case_1(self):
self.assertEqual(self.number,10,msg="your input is not 10")
def tearDown(self):
pass
if __name__ == "__main__":
unittest.main()
"""
#输入正确时的输出:
请输入一个整数:10
Ran 1 test in 1.889s
OK
#输入错误时的输出
self.assertEqual(self.number,10,msg="your input is not 10")
Ran 1 test in 1.716s
FAILED (failures=1)
"""
断言是否为True
1、方法名:assertTrue(expr, msg=None)
**例2:**判断一个数是否为质数
# 判断一个数是否为质数(测试代码)
def is_prime(n):
list = []
if n <= 1:
return False
else:
for number in range(1, n + 1):
if n % number == 0:
list.append(number)
else:
pass
if len(list) == 2:
return True
else:
return False
# 单元测试代码
import unittest
class Is_prime(unittest.TestCase):
def setUp(self):
print("测试开始")
def test_is_prime(self):
self.assertTrue(is_prime(97), msg="Is not prime")
def tearDown(self):
print("测试结束")
if __name__ == "__main__":
unittest.main()
"""
测试开始
测试结束
Ran 1 test in 0.001s
OK
"""
断言是否包含
1、方法名:assertIn(arg1, arg2, msg=None)
例3:
import unittest
class Is_In(unittest.TestCase):
def setUp(self):
print("测试开始")
def test_is_in_case(self):
a = "hello1"
b = "hello,world"
self.assertIn(a,b,msg="a is not in b")
def tearDown(self):
print("测试结束")
if __name__ == "__main__":
unittest.main()
"""
raise self.failureException(msg)
AssertionError: 'hello1' not found in 'hello,world' : a is not in b
"""
例3_2:
import requests
import unittest
class Response(unittest.TestCase):
def setUp(self):
print("测试开始")
def tearDown(self):
print("测试结束")
def test_response_case_1(self):
method = "get"
url = "http://www.baidu.com/"
response = requests.request(method=method,url=url)
response.encoding = "utf-8"
response_txt = response.text
self.assertIn("百度一下",response_txt,msg="百度主页打开错误")
if __name__=="__main__":
unittest.main()
注:
1、测试用例的名字必须以test开头,否则unittest框架会找不到测试用例
2、从上面的例子可以看出,unittest框架不仅可以调用其他函数进行断言测试,也可以直接在测试用例中进行断言验证(实际是一样的)