ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UnitTest断言、参数化、跳过

2021-10-17 21:03:58  阅读:186  来源: 互联网

标签:None 断言 验证 UnitTest second msg 跳过 unittest first


断言

概念:

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

常用的UnitTest断言方法

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

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

标签:None,断言,验证,UnitTest,second,msg,跳过,unittest,first
来源: https://blog.csdn.net/weixin_45490820/article/details/120814833

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有