python:Unittest_断言方法

断言方法

python unintest单元测试框架提供了一整套内置的断言方法。
1、如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态

2、如果异常,则当做错误来处理
注意:以上两种方式的区别

3、如果成功,则标识该测试为成功状态

在unittest框架中定义了哪几类断言方法:
1、基本的Boolean断言,即:要么True,要么False的验证

2、简单比较断言,例如比较a,b两个变量的值

3、复杂断言

 

基本断言方法

基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。

断言方法       断言描述 备注
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):断言第一个参数与第二个参数是否相等,如果不相等则测试失败。msg为可选参数,用于定义测试失败时打印的信息

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)
"""

注:
有上面的例子可以看出,当输入的数与预期的值不一致时,就会返回我们定义的msg信息

例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
if __name__ == "__main__":

    print(is_prime(99))
#求1-100内的质数
"""
list = []
for i in range(2,101):
    for j in range(2,i):
        if i%j ==0:
            break
    else:#注意这里的else与第二个for的缩进一致,都属于第一个for循环代码块
        list.append(i)

print(list)
"""

例2_1:

from Module.Unittest_Module.is_prime import is_prime
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
"""

例2_2:

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
"""

例2_3:

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框架不仅可以调用其他函数进行断言测试,也可以直接在测试用例中进行断言验证(实际是一样的)


 

你可能感兴趣的:(python3)