python学习笔记9-单元测试unittest
Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
下面写一个简单的单元测试用例
import unittest
from BeautifulReport import BeautifulReport
def calc(x,y):
return x+y
class TestCalc(unittest.TestCase):
def test_pass_case(self): #用例一定要以test开头
print('这个通过用例')
res=calc(1,2)
self.assertEqual(3,res)
def setUp(self):#执行每个用例前的操作
print('我是setup..')
def tearDown(self):#执行每个用例后的操作
print('我是teardown') @classmethod
def setUpClass(cls):#执行这个类所有case前的操作
print('我是setupclass')
@classmethod
def tearDownClass(cls):#执行完这个类所有case后的操作
print('我是teardownclass') def test_a(self):
print('a') def test_fail_case(self):
print('这是失败的测试用例')
res=calc(9,8)
self.assertEqual(98,res) if __name__=='__main__':
#unittest.main() #单独执行这个类中的case # suite=unittest.TestSuite()
# suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCalc))
# runner = unittest.TextTestRunner(verbosity=2)
# runner.run(suite) suite = unittest.TestSuite()
suite.addTests(unittest.makeSuite(TestCalc))#这个类里面的所有测试案例
result=BeautifulReport(suite)
result.report(filename='测试报告',description='描述',log_path='.')
一些常见的断言:
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
那如何生成一个测试报告呢,需要加入另外一个模块了,HTMLTestRunner,这个模块需要自己安装,使用执行测试用例就会生成一个html的测试报告,里面会有每个测试用例的执行结果,代码如下:
import HTMLTestRunner
import unittest
class MyTest(unittest.TestCase):#继承unittest.TestCase
def tearDown(self):
#每个测试用例执行之后做操作
print('111')
def setUp(self):
#每个测试用例执行之前做操作
print(22222)
def test_run(self):
# self.assertEqual(1,1)
self.assertIs(1,1)
#测试用例
def test_run2(self):
# self.assertEqual(1,1)
self.assertIs(1,1)
#测试用例
def test_run3(self):
# self.assertEqual(1,1)
self.assertIs(1,1)
#测试用例
def test_run1(self):
# self.assertEqual(1,1)
self.assertIs(1,1)
#测试用例
if __name__ == '__main__':
test_suite = unittest.TestSuite()#创建一个测试集合
test_suite.addTest(MyTest('test_run1'))#测试套件中添加测试用例
#test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法
fp = open('res.html','wb')#打开一个保存结果的html文件
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='api测试报告',description='测试情况')
#生成执行用例的对象
runner.run(test_suite)
#执行测试套件
如果我们有很多个模块,每个模块下面都写了很多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)
#运行测试
我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,Jenkins不认识,就在Jenkins里面显示不出来。那咱们就要产生一些Jenkins认识的测试报告,Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,安装直接 pip install xmlrunner即可,代码如下:
import unittest
import xmlrunner
#导入这个模块
class My(unittest.TestCase): def test1(self,a,b,c):
self.assertEqual(a+b,c) if __name__=='__main__':
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(My))
runner = xmlrunner.XMLTestRunner(output='report')#指定报告放的目录
runner.run(test_suite)
然后咱们运行,可以看到在report目录下已经产生了xml格式的报告了,而且还自动把日期加上了

python学习笔记9-单元测试unittest的更多相关文章
- python自动化测试学习笔记-8单元测试unittest模块
官方参考文档:http://docs.python.org/2.7/library/unittest.html unittest是一个python版本的junit,junit是java中的单元测试框架 ...
- python学习笔记(十五)-unittest单元测试的一个框架
unittest 单元测试的一个框架什么框架 一堆工具的集合. TestCase TestSuite 测试套件,多个用例在一起 TestLoader是用来加载TestCase到TestSuite中的 ...
- python学习笔记(十四): unittest
Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 在说unittest之前,先说几个概念: TestC ...
- python学习笔记(excel+unittest)
准备先利用之前整理的python自带的unittest框架 整合excel 实现接口自动化测试功能 先看看excel表格设置: 下来是对excel获取的代码: #!/usr/bin/env pytho ...
- 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 ...
随机推荐
- html 類 class
為html元素設置類,相同的類使用相同的樣式.一般元素都能使用,可以在<div>和<span>中使用,同一個class可以被個<div>或<span>使 ...
- matplotlib之scatter自动绘制散点
# 使用matplotlib.pyplot.scatter绘制散点 import matplotlib.pyplot as plt from pylab import mpl # 设置默认字体,解决中 ...
- Bootstrap滚动监控器
前面的话 滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.滚动导航条下面的区域并关注导航项的变化,下拉菜单中的条目也会自动高亮显示.本文将详细介绍Bootstrap滚动监控器 基本用法 滚动 ...
- linux ACL权限
利用这两个指令就可以了: getfacl:获取某個文件的 ACL 设置 setfacl:设置某個文件的 ACL 规范 [root@study ~]# setfacl [-bkRd] [{-m|-x} ...
- BZOJ2653middle——二分答案+可持久化线段树
题目描述 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右端点在 ...
- mysql format函数对数字类型转化的坑
原值param = 1234.5678 format(param, 2) (不建议) 结果,字符串类型,123,4.57 会导致你图表char 生成失败,直接变0 convert(para ...
- MT【236】必要性探路
$\dfrac{lnx}{x+1}+\dfrac{1}{x}>\dfrac{lnx}{x-1}+\dfrac{k}{x}$对于任意$x>0$成立,求$k$的范围. 解答:由题意,对任意$x ...
- 洛谷 P1490 买蛋糕 解题报告
P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...
- 牛客练习赛40 C 小A与欧拉路(树的直径)
链接:https://ac.nowcoder.com/acm/contest/369/C 题目描述 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点 ...
- Python文件和异常
程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...