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中