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
随机推荐
- idea 创建java web项目ssm-gradle
环境准备:jdk1.8+tomcat8+idea+gradle 1.创建项目SSM 使用gradle创建项目,按照提示如下 image.png 输入项目名称,组名 image.png im ...
- iOS10、Chrome、微信7.0无法定位
问题 在做一个项目的时候,需要使用高德地图进行定位,测试的时候没有问题,在微信中打开的时候,无法进行定位,进过查询资料,得知微信升级7.0做了安全限制,然后使用http的定位不能正常使用,有这种限 ...
- NLP 自然语言处理之综述
(1) NLP 介绍 NLP 是什么? NLP (Natural Language Processing) 自然语言处理,是计算机科学.人工智能和语言学的交叉学科,目的是让计算机处理或"理解 ...
- 什么是shader?
一.什么是shader? shader是一段GLSL(openGL着色语言)小程序,运行在GPU(图形处理器),而非CPU使用GLSL语言编写,看上去像c或c++,但却是另外一种不同的语言.使用sha ...
- react依赖注入之mapStateToProps&&mapDispatchToProps
今天看前辈写的代码,看到mapStateToProps&&mapDispatchToProps处,不明白,于是又是各种找资料,在CSDN博客中发现一篇好文,摘抄到此,方便自己阅读! 原 ...
- Android App渗透测试工具汇总
网上搜集了一些App安全学习教程及工具,项目地址:https://github.com/Brucetg/App_Security 一. drozer简介 drozer(以前称为Mercury)是一款A ...
- Git关联JIRA的issue
指导文章 http://www.51testing.com/html/30/n-3724930.html http://{$host_url}/help/user/project/integratio ...
- nyoj 119: 士兵杀敌(三) 【RMQ模板】
题目链接 贴个板子.. #include<bits/stdc++.h> using namespace std; int n,q; ],d1[][],d2[][]; void RMQ_in ...
- 对provide/inject的研究
1.组件中通过provider来提供变量,然后在子组件中通过inject来注入变量. 2.在父组件中定义: provide () { return { secondPageTableRoot: { t ...
- 阿里云推出SRT+杜比全景声直播方案,低成本打造高质量直播观感体验
超过200个国家和地区共5144万人观看:浙江卫视.东方卫视55城总收视达2.39,稳居同时段市场第一:优酷直播间63%观看晚会的用户参与了互动:微博68.2亿的主话题阅读量:2019天猫双11狂欢夜 ...