python学习笔记:unittest单元测试
单元测试:开发自测时写的代码
unittest基本原理:
♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用。
♦unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
unitest的目录结构一般如下:重要

unittest 测试
def cal(a,b):
return a+b
#
# res = cal(1,9)
# if res == 3:
# print('成功')
# else:
# raise Exception('测试失败') # unittest python中的单元测试框架
import unittest class MyTest(unittest.TestCase): #继承TestCase
def test_a(self): #函数的名字必须以test开头
res = cal(1,2)
self.assertEqual(3,res,msg='预期结果和实际结果不一致') def test_b(self):
res = cal(9,3)
self.assertEqual(3,res,msg='预期结果和实际结果不一致') unittest.main() #运行测试用例
unittest常用的断言
断言语法 解释
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)
unittest 测试产生报告
两种生成测试报告的方式:
1、安装BeautifulReport模块
2、把HTMLTestRunner.py 放到pyCharm的External Libraries中
import unittest
import HTMLTestRunner
import BeautifulReport class MyTest(unittest.TestCase):
def test_reg(self):
'''注册''' #加这一行会在报告中显示用例描述
print('reg')
self.assertEqual(1,1) def test_log(self):
'''登录'''
print('log')
self.assertEqual(1,1) def test_buy(self):
self.assertEqual(1,2,msg='购买失败') def test_z(self):
self.assertIn(1,[1,2,3]) def test_assert(self):
res = False
self.assertFalse(res,) #下面这一坨是用HTMLTestRunner,产生不好看的测试报告
f = open('report.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(f,title='lhtest',description='XX接口测试') #实例化一个runner,帮你跑测试用例
suit = unittest.makeSuite(MyTest) #MyTest类变成测试集合
runner.run(suit) #下面这一坨是用BeautifulReport,产生不好看的测试报告
suite = unittest.makeSuite(MyTest) #变成测试集合
report = BeautifulReport.BeautifulReport(suite)
report.report(filename='bfreport.html',description='接口测试报告') # 测试集合:testsuite 多个用例放在一起
# unittest 1、函数名必须是test开头,unittest才会帮你执行
# 2、用例运行的顺序是按照函数的首字母排序的,a-z
# testrunner 运行测试用例的
# testloader 查找测试用例的
如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:
import unittest,HTMLTestRunner
suite = unittest.TestSuite()#创建测试套件
all_cases = unittest.defaultTestLoader.discover('.','test_*.py')
#找到某个目录下所有的以test开头的Python文件里面的测试用例
for case in all_cases:
suite.addTests(case)#把所有的测试用例添加进来
fp = open('res.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
runner.run(suite)
#运行测试
参数化
安装nose-parameterized模块
import unittest
from parameterized import parameterized def login(username,password):
print(username,password)
print('=============')
return 1 class MyTest(unittest.TestCase):
@parameterized.expand(
[
['xiaodong','','success'],
['yangfan','','fail'],
['hailong','','success'],
['liurongxin','','success'],
]
)
def test_login(self,username,passwd,check):
'正常登陆'
res = login(username,passwd)
self.assertEqual(check,res) unittest.main()
setUp、tearDown、setUpClass、tearDownClass
① setup():每个用例执行前运行
② teardown():每个用例执行后运行
③ setUpClass():必须使用@classmethod 装饰器,所有用例执行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有用例执行后运行一次
import unittest class MyTest(unittest.TestCase):
def setUp(self):#每条用例执行之前会执行setup
print('这是setup')
def tearDown(self):#每条用例执行之后都会执行teardown
print('这是teardown')
@classmethod
def setUpClass(cls):#这个类里面的所有用例执行之前,最先执行它,最前面
print('这是setupclass')
@classmethod
def tearDownClass(cls):#这个类里面所有的用例执行完之后执行它,最后面
print('tearDownClass') def test_reg(self):
print('============我是用例1================') def test_login(self):
print('============我是用例2================') if __name__ == '__main__':
unittest.main()
运行结果:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK 这是setupclass
这是setup
============我是用例1================
这是teardown
这是setup
============我是用例2================
这是teardown
tearDownClass
python学习笔记:unittest单元测试的更多相关文章
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
- Python学习笔记(十三)
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门0 安装dangjo
经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Pythoner | 你像从前一样的Python学习笔记
Pythoner | 你像从前一样的Python学习笔记 Pythoner
随机推荐
- [C] Re-execute itself from elf file.
Re-execute itself from elf file. #define _GNU_SOURCE #include <sched.h> #include <stdio.h&g ...
- SQL SERVER SP命令及实现跨数据库查询
1.数据库: (1)sp_helpdb:报告有关指定数据库或所有数据库的信息. 例:sp_helpdb --显示所有数据库信息(名称.大小等) 例:sp_helpdb Recruitment ...
- python编程基础之简单购物车
#good文件夹内容[ ['Iphone7', 5800], ['Coffee', 30], ['疙瘩汤', 10], ['Python Book', 99], ['Bike', 199], ['Vi ...
- hr员工数据分析(实战)
hr员工数据分析项目实战 (数据已脱敏) 背景说明 某公司最近公司发生多起重要员工意外离职.部分员工工作缺乏积极性等问题,受hr部门委托,开展数据分析工作. 经与hr部门沟通,确定以下需求: 制定数据 ...
- Jupyter配置工作路径
在修改之前,C:\Users\Administrator\ .jupyter 目录下面只有一个“migrated”文件. 打开命令窗口(运行->cmd),进入python的Script目录下输入 ...
- UNIX网络编程总结四
socket: 为了执行网络I/O,一个进程做的第一件事就是调用socket函数. family指明协议族,type指明类型,除非在原始套接口,protocol一般为0,并非所有的family,typ ...
- BZOJ1135 LYZ(POI2009) Hall定理+线段树
做这个题之前首先要了解判定二分图有没有完备匹配的Hall定理: 那么根据Hell定理,如果任何一个X子集都能连大于等于|S|的Y子集就可以获得完备匹配,那么就是: 题目变成只要不满足上面这个条件就能得 ...
- pandas数据读取(DataFrame & Series)
1.pandas数据的读取 pandas需要先读取表格类型的数据,然后进行分析 数据说明 说明 pandas读取方法 csv.tsv.txt 用逗号分割.tab分割的纯文本文件 pd.read_csv ...
- Test 3.27 T3 矩阵
Description 给一个 n*n 的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入 k n(n<2000)和一个 n*n 的地图 Output 输 ...
- SQL Server 中用While循环替代游标Cursor的解决方案
在编写SQL批处理或存储过程代码的过程中,经常会碰到有些业务逻辑的处理,需要对满足条件的数据记录逐行进行处理,这个时候,大家首先想到的方案大部分是用“游标”进行处理. 举个例子,在订单管理系统中,客服 ...