0
点赞
收藏
分享

微信扫一扫

Pyhton:unittest应知应会

fbd4ffd0717b 2022-05-04 阅读 77
单元测试

unit-test即单元测试 ,单元可以是一个函数、方法、类、功能模块或者子系统,总的来说,单元就是人为规定的最小的被测功能模块。

单元测试一般是由程序员自己来完成,现在很多公司会要求程序员做代码覆盖率自查。当然也有很多公司不做单元测试。

unittest 是python官方自带的测试框架。简单记录一下unittest的用法

unittest基本使用——testCase:

1.准备一个函数,用来做测试

"""
登录校验
:param username:用户名
:param password: 密码
:return dict type

"""


# 登陆校验
def login_check(username=None, password=None):
    if username == None or password == None:
        return {'code': '400', 'msg': '用户名或密码不能为空'}
    else:
        if username == "admin" and password == "123456":
            return {'code': '200', 'msg': '登录成功'}
        else:
            return {'code': '400', 'msg': '用户名或密码错误'}

2.设计几条测试用例:

编号入参期望结果实际结果
1.账号密码都正确

username=admin

password=123456

code:200
2.账号正确,密码错误

username=admin

password=123

code:400
3.账号为空

username=' '

password=123456

code:400
4.密码为空

username=admin

password=' '

code:400

3.编写unittest测试类:

-1.定义一个测试用例类,必须继承unittest模块中的TestCase

-2.类中,一个test开头的方法就是一条测试用例

import unittest

import login


class TestLogin(unittest.TestCase):

    def test_login_pass(self):
        expected = {'code': 200, 'msg': '登录成功'}
        res = login.login_check('admin', '123456')
        self.assertEqual(res, expected)

    def test_login_fail(self):
        expected = {'code': '400', 'msg': '用户名或密码错误'}
        res = login.login_check('admin', '123')
        self.assertEqual(res, expected)

    def test_login_name_None(self):
        expected = {'code': '400', 'msg': '用户名或密码不能为空'}
        res = login.login_check(None, '123456')
        self.assertEqual(res, expected)

unittest基本使用——TestSuite

TestSuite用来装一个或多个测试用例 ,TestSuite也可以嵌套TestSuite。


import unittest

#1.创建一个套件
suite = unittest.TestSuite()

#2.创建一个用例加载器
loader = unittest.TestLoader()

#3.加载用例到套件
#可以addtest添加单个测试方法,也可一discover将整个目录下的测试用例加入进来
suite.addTest(loader.discover('test_login_case'))

#上述3行 简写一行替代
#unittest.defaultTestLoader.discover('test_login_case')

#4创建一个用例运行程序
runner = unittest.TextTestRunner()

#5。运行
runner.run(suite)

unittest基本使用——TestFixture

setUP():or tearDown(): 在执行测试之前执行  or 在执行测试之后执行 

setUpClass():or  tearDownClass():在执行每个测试类的前  or 后执行一次

import unittest
 
class TestAddCount(unittest.TestCase):

@classmethod  # 指明这是个类方法以类为维度去执行的
    def setUpClass(cls):
        print("===开始执行测试===")
@classmethod  # 指明这是个类方法以类为维度去执行的
    def tearDownClass(cls):
        print("===结束执行测试===")


    def setUp(self):
        print("===setUp===")
 
    def test_a1(self):
        print("执行第一个测试用例")
 
    def test_a2(self):
        print("执行第二个测试用例")

    def test_a3(self):
        print("执行第三个测试用例")
 

    def tearDown(self):
        print("===tearDown===")
 
if __name__ == "__main__":
    unittest.main()
 
"""
===setUp===
执行第一个测试用例
===tearDown===
===setUp===
执行第二个测试用例
===tearDown===
===setUp===
执行第三个测试用例
===tearDown===
"""

unittest 基本概念:

Test Case:基本类,一个testCase类,一个testCase就是一个测试用例

Test Suite:多个测试用例集合在一起。

Test Fixture:测试用例环境的搭建和销毁。测试前环境的搭建SetUp,执行用例Run,测试后环境还原TearDown

Test Runner: 用来执行测试用例。

unitest的工作原理

通过unittest类调用分析,可将框架的工作流程概况如下:

    ⑴编写TestCase,
    ⑵由TestLoader等加载TestCase到TestSuite
    ⑶然后由TestRunner来运行TestSuite
    ⑷最后将运行的结果保存在TTestResult中

举报

相关推荐

0 条评论