UnitTest断言、参数化、跳过

断言

概念:

让程序代替人为判断测试程序执行结果是否符合预期结果的过程

常用的UnitTest断言方法

序号 断言方法 断言描述
1 assertTrue(expr, msg=None) 验证expr是true, 如果为false, 则fail
2 assertFalse(expr, msg=None) 验证expr是false, 如果为true, 则fail
3 assertEqual(expected, actual,
msg=None)
验证expected==actual, 不等则fail 【掌
握】
4 assertNotEqual(first, second,
msg=None)
验证first != second, 相等则fail
5 assertIsNone(obj, msg=None) 验证obj是None, 不是则fail
6 assertIsNotNone(obj, msg=None) 验证obj不是None, 是则fail
7 assertIn(member, container,
msg=None)
验证是否member in container【掌握】
8 assertNotIn(member, container,
msg=None)
验证是否member not in container

使用方式

断言方法已经在unittest.TestCase类中定义好了, 而且我们自定义的测试类已经继承了
TestCase, 所以在测试方法中直接调用即可。

import unittest
def add(x, y):
return x + y
class TestAssert(unittest.TestCase):
def test01(self):
num = add(1, 2)
self.assertEqual(3, num)
def test02(self):
num = add(1, 2)
is_ok = num == 3
self.assertTrue(is_ok)

 python自带断言:

""
    目标断言扩展:
        两种实现方式:
            1. 使用unittest框架中的断言
            2. 使用python自带断言
"""
# 使用python自带断言 判断两个字符串是否相等
# assert "hello" == "hello"
# 不相等
# assert "hello" == "hello1" "出错啦啦啦!!!这俩不相等"

# 第二个字符串是否包含第一个字符串
# assert "h" in "hello"
# assert "ha" in "hello"

# 判断是否为True
# assert True
# assert False
# 0 为False ; 1为True
# assert 0
# assert 1

UnitTest断言方法(全)

序号 断言方法 断言描述
1 assertEqual(arg1, arg2,
msg=None)
验证arg1=arg2, 不等则fail 【常用】
2 assertNotEqual(arg1, arg2,
msg=None)
验证arg1 != arg2, 相等则fail
3 assertTrue(expr, msg=None) 验证expr是true, 如果为false, 则fail 【常用】
4 assertFalse(expr,msg=None) 验证expr是false, 如果为true, 则fail 【常用】
5 assertIs(arg1, arg2,
msg=None)
验证arg1、 arg2是同一个对象, 不是则fail
6 assertIsNot(arg1, arg2,
msg=None)
验证arg1、 arg2不是同一个对象, 是则fail
.c
7 assertIsNone(expr,
msg=None)
验证expr是None, 不是则fail
as
8 assertIsNotNone(expr,
msg=None)
验证expr不是None, 是则fail
it
9 assertIn(arg1, arg2,
msg=None)
验证arg1是arg2的子串, 不是则fail
w
10 assertNotIn(arg1, arg2,
msg=None)
验证arg1不是arg2的子串, 是则fail
11 assertIsInstance(obj, cls,
msg=None)
验证obj是cls的实例, 不是则fail
12 assertNotIsInstance(obj, cls,
msg=None)
验证obj不是cls的实例, 是则fail
13 assertAlmostEqual (first,
second, places = 7, msg =
None, delta = None)
验证first约等于second。 palces: 指定精确到小数点
后多少位, 默认为7
14 assertNotAlmostEqual (first,
second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数
点后多少位, 默认为7 注: 在上述的两个函数中,
如果delta指定了值, 则first和second之间的差值必须
≤delta
15 assertGreater (first, second,
msg = None)
验证first > second, 否则fail
16 assertGreaterEqual (first,
second, msg = None)
验证first ≥ second, 否则fail
17 assertLess (first, second,
msg = None)
验证first < second, 否则fail
18 assertLessEqual (first,
second, msg = None)
验证first ≤ second, 否则fail
19 assertRegexpMatches (text,
regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。
regexp: 通常使用re.search()
20 assertNotRegexpMatches
(text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。
regexp: 通常使用re.search() 说明: 两个参数进行
比较(>、 ≥、 <、 ≤、 约等、 不约等)
21 assertListEqual(list1, list2,
msg = None)
验证列表list1、 list2相等, 不等则fail, 同时报错信息
返回具体的不同的地方
22 assertTupleEqual (tuple1,
tuple2, msg = None)
验证元组tuple1、 tuple2相等, 不等则fail, 同时报错
信息返回具体的不同的地方
23 assertSetEqual (set1, set2,
msg = None)
验证集合set1、 set2相等, 不等则fail, 同时报错信息
返回具体的不同的地方
24 assertDictEqual (expected,
actual, msg = None
验证字典expected、 actual相等, 不等则fail, 同时报
错信息返回具体的不同的地方

参数化 

通过参数的方式来传递数据, 从而实现数据和脚本分离。 并且可以实现用例的重复执行。

unittest测试框架,本身不支持参数化, 但是可以通过安装unittest扩展插件parameterized来实现。

安装

pip install parameterized

使用方式

导包: from parameterized import parameterized
使用@parameterized.expand(列表)装饰器可以为测试函数的参数进行参数化 

import unittest
from parameterized import parameterized

"""
    目标:parameterized 插件应用
    步骤:
        1. 导包 from parameterized import parameterized
        2. 修饰测试函数 @parmeterized.expand(列表类型数据)
        3. 在测试函数中使用变量接收,传递过来的值。
        
    语法:
        1. 单个参数:值为列表
        2. 多个参数:值为列表嵌套元组 如:[(1,2,3),(2,3,4)]
"""


# 定义测试类 并 继承
class Test01(unittest.TestCase):
    # 单个参数使用方法
    # @parameterized.expand(["1", "2", "3"])
    # def test_add_one(self, num):
    #     print("num:", num)

    # 多个参数使用方法 写法1
    # @parameterized.expand([(1, 2, 3), (3, 0, 3), (2, 1, 3)])
    # def test_add_more(self, a, b, result):
    #     print("{}+{}={}:".format(a, b, result))

    # data = [(1, 2, 3), (3, 0, 3), (2, 1, 3)]
    # 写法2
    # @parameterized.expand(data)
    # def test_add_more(self, a, b, result):
    #     print("{}+{}={}:".format(a, b, result))


    # 写法 3 推荐
    def get_data(self):
        return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]

    @parameterized.expand(get_data())
    def test_add_more(self, a, b, result):
        print("{}+{}={}:".format(a, b, result))

 跳过

 对于一些未完成的或者不满足测试条件的测试函数和测试类, 可以跳过执行

使用方式

# 直接将测试函数、类标记成跳过
@unittest.skip(reason)--一般用于未实现功能

# 根据条件判断测试函数、类是否跳过
@unittest.skipIf(condition, reason)--条件满足就不执行

""
    目标:unittest skip 与 skipif功能
    语法:
        @unittest.skip("原因")
        @unittest.skipIf(条件,原因)
"""

# 导包
import unittest

version = 30


# 新建测试类
# @unittest.skip("Test01方法功能暂未实现")
@unittest.skipIf(version > 25, "版本大于25了,跳过此用例!")
class Test01(unittest.TestCase):
    # 新建测试方法 1
    # @unittest.skip("test01方法功能暂未实现")
    def test01(self):
        # print("test01")
        """此方法功能暂未完T成"""
        pass

    # 新建测试方法 2
    # @unittest.skipIf(version > 25, "版本大于25了,跳过此用例!")
    def test02(self):
        print("test02")
上一篇:Unittest


下一篇:unittest单元测试框架