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
随机推荐
- 小白学Python(17)——pyecharts 日历图 Calendar
Calendar-2017年微信步数情况 import datetime import random from pyecharts import options as opts from pyecha ...
- (前篇:NIO系列 推荐阅读) Java NIO 底层原理
出处: Java NIO 底层原理 目录 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步 ...
- js中reduce()的牛掰所在 本质作用:实现数值累计,筛选过滤,类似递归
先看w3c官说 array.reduce(function(total, currentValue, currentIndex, arr), initialValue); /* total: ...
- gevent简介
gevent是基于协程的Python网络库. 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续).协程,则只使用一个线程,在一个线程中规定 ...
- 理解Promise (1)
new Promise 需要传递一个执行器 (函数) 函数有两个参数 resolve reject promise 承诺 默认的状态是pengding 调用 resolve 表示成功 reject 表 ...
- map接口、hashmap常用方法
注意:map中键不能重复(是否重复是根据equals方法判断),否则新的会覆盖为旧的 范例: public class TestMap { public static void main(String ...
- MySQL数据库5事务、视图、触发器、函数、数据库的备份
目录 一.事务(important) 1.1什么是事务? 1.2解决办法 1.2.1事务的语法 1.2.2使用事务解决转账问题代码演示 1.2.3rollback 1.3事务的特性(important ...
- Test 6.29 T2 染色
问题描述 于是 CJK 轻轻松松就切了第一题."好,那么来看看第二题吧." JesseLiu 大手一挥,CJK 眼前立刻出现了一棵有 n 个节点的树."现在,你将要为这颗 ...
- 【leetcode】1029. Two City Scheduling
题目如下: There are 2N people a company is planning to interview. The cost of flying the i-th person to ...
- LeetCode--044--通配符匹配(java)*
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完全匹配才算 ...