unittest框架
一.unittest简介
unitest是python内置的单元测试框架,但是它不仅适用于单元测试
unittest最核心的四个概念就是:
1.TestrCase:一个Testcase的实例就是一个测试用例,所有用例类继承的基本类
2.TestSuite:多个测试用例集合在一起
3.TestLoader是用来加载Testcase到Testsuite中的
4.TextTestRunner:用来执行测试用例的
二.使用方法,举个实例,建议数据分离
1.引入unitest
import unittest
编写一个Login类,因为是运用了之前的图书登陆类,所有我这里的类是Lib
代码如下:
1 class Lib: 2 def login_check(username,password): 3 ''' 登录校验的函数 4 :param username:账号 5 :param password: 密码 6 :return: ''' 7 if 6<=len(password)<=18: 8 if username=='admin' and password=='123456': 9 return {'code':0,'msg':'登录成功'} 10 elif username == None: 11 return {'code': 1, 'msg': '用户名不能为空'} 12 elif password == None: 13 return {'code': 1, 'msg': '密码不能为空'} 14 else: 15 return {'code':1,'msg':'账号密码不正确'} 16 else: 17 return {'code':1,'msg':'密码长度在6-18之间'}
TestCase类编写的测试用例
代码如下:
1 import unittest #单元测试框架 2 from 图书管理系统.b图书 import Lib #引入Lib 3 #编写测试用例 就是测试类中的方法 4 #执行测试用例,就是运行测试类中的方法而已 5 from ddt import ddt,data,unpack 引入ddt,对数据进行处理 6 test_data=[("admin","123456",'登录成功'), 7 ('admin','123456','登陆成功')] 8 @ddt 9 class Login_test(unittest.TestCase): 10 #每一条方法就是一条测试用例 11 # 方法名 就是用例的标题 必须用test_搭头 12 13 def setup(self): 14 #执行每条测试用例之前都得执行他 前置条件 15 pass 16 def tearDown(self): 17 #还原测试环境 每条测试用例后 都执行他 18 pass 19 @data(*test_data) 20 @unpack 将test_data里的数据做分离 21 def test_login_success(self): #账号密码都正确,登陆成功 22 #测试步骤 23 #记录结果 24 result = Lib.login_check("admin","123456") 25 #比较结果 26 #实际结果 27 expect = '登录成功' 28 self.assertEquals(result['msg'],expect) 29 def test_login_usernameFailure(self): #用户名不正确,登陆失败 30 # 预期结果 31 expect = '账号密码不正确' 32 #实际结果 33 result = Lib.login_check("小明","123456") 34 self.assertEquals(expect,result['msg'])
运行测试用例
代码如下:
1 import unittest 2 import os 3 from HTMLTestRunner import HTMLTestRunner 4 5 from os模块.test_case import login_test 6 #选择要执行的测试用例 7 # 将这些用例 放入一个集合 8 # 运行该集合即可 9 a = unittest.TestSuite() 10 #生成一个测试集合对象,用来储存要运行的测试用例 11 #加用例的过程 实际就是将方法加入集合中 12 l = unittest.TestLoader() 13 a.addTest(l.loadTestsFromTestCase(login_test.Login_test)) 14 r = unittest.TextTestRunner() 15 r.run(a)
执行结果
三.unitest常用断言,就是判断
断言语法以及解释
assertEqual(a, b) 判断a==b
assertNotEqual(a, b) 判断a!=b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)
作者:小汤o