unittest是Python中自带的一个单元测试模块,常常用它来做单元测试,它里面封装了用例的初始化操作和执行,以及返回结果的校验等操作。

在学习unittest框架之前需要先了解几个知识点:

  • TestCase测试用例
  • TestSuit测试用例集,也就是多个测试用例的集合,称之为TestSuit
  • TestLoader加载testcase到testsuit中
  • TestRunner是用来执行测试用例的,将用例的测试结果保存到TestResult中,包括所有测试用例执行之后的统计情况,成功失败等等信息

下面就通过一个具体的例子来看看unittest是怎么实现的

import unittest
def cacl(a,b):
return a/b
class MyTest(unittest.TestCase):#类名需要以大写字母开头
def setUp(self):
print("每个用例执行之前都会执行")
def tearDown(self):
print("每个用例执行之后都会执行")
@classmethod
def setUpClass(cls):
print("所有用例执行之前运行")
@classmethod#类方法
def tearDownClass(cls):
print("所有用例执行之后运行")
def test_a(self):
res = cacl(1,2)
self._testMethodDoc="正案例"#用于生成报告时用例描述的显示
self.assertEqual(0.5,res,'success')#断言
def test_b(self):
'''反案例'''#用于生成报告是用例描述的第二种显示方式
res = cacl(1,2)
self.assertNotEqual(0.5, res, 'failed')
if __name__ == '__main__':
unittest.main()#可以运行所有以test开头的用例,用例的执行顺序按照test后面的ascii码值的大小顺序,值小的先执行

下面是一些常用的断言

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

上面是实现用例执行的一种方式,那如何生成测试报告呢,那就需要引入python的另一个模块HtmlTestRunner或者pip源上面下载BeautifulReport扩展包,这两个模块都需要自己安装,执行的测试用例结果以及一些统计信息会记录到一个html文件中

安装HtmlTestRunner:直接将HTMLTestRunner.py这个文件放在python的环境变量的目录中即可,任何一个环境变量目录都可以,lib、site-packages等

安装BeautifulReport:将BeautifulReport文件夹放入site-packages目录中,这是因为底层框架将目录信息固定了

首先创建TestSuit测试套件测试用例集

if __name__ == '__main__':
test_suit = unittest.TestSuite()#创建一个用例集合用例套件
#方式1
test_suit.addTest(MyTest("test_a"))#将类中的一个用例添加到测试集合中
#方式2
test_suit.addTest(unittest.makeSuite(MyTest))#向测试套件中添加MyTest中所有的用例
#方式3
#如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:
   all_case = unittest.defaultTestLoader.discover("case","*.py")#获取case目录(可以是相对路径或者绝对路径或者目录名),如果case变成“.”代表当前目录下的所有文件
# 下所有*.py(支持模糊匹配)文件下的所有用例
[test_suit.addTests(case) for case in all_case]#循环将所有用例添加到测试套件中

HTMLTestRunner生成测试报告

import HTMLTestRunner#引入扩展包
f = open("test.html","wb")#写报告之前需要先以二进制的写形式打开文件这样就不用指定字符集
testrunner = HTMLTestRunner.HTMLTestRunner(stream=f,title="测试集title",description="测试集描述")
testrunner.run(test_suit)#执行测试报告并生成测试报告

BeautifulReport生成测试报告(这种方式生成的报告更加的美观)

链接:BeautifulReport底层框架的解析以及html报告页面元素的更改

import BeautifulReport as br#引入包,之后设置一下别名
br = br.BeautifulReport(test_suit)#将用例集加入到对象中
br.report(description="beautifulreport",filename="brtest",log_path="")#执行用例统计结果,并生成测试报告
#filename是测试报告的名称,log_path可以指定测试报告的存储目录,这个参数可选

我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,Jenkins不认识,就在Jenkins里面显示不出来。那咱们就要产生一些Jenkins认识的测试报告,Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,安装直接 pip install xmlrunner即可,代码如下:

import xmlrunner
runner = xmlrunner.XMLTestRunner(output='report')#指定报告放的目录
runner.run(test_suite)

简单的单元测试unittest实例的更多相关文章

  1. python单元测试unittest实例详解

    转自:http://blog.csdn.net/five3/article/details/7104466 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也 ...

  2. Web Service单元测试工具实例介绍之SoapUI

    原文  Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组 ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. Visual Studio 2015的安装和简单的单元测试

    何为单元测试 绝大多数的软件都是由多人合作完成的,大家的工作相互有依赖关系.软件的很多错误都来源于程序员对模块功能的误解.疏忽或不了解其他模块的变化.如何能让自己负责的模块功能的定义尽量的明确,模块内 ...

  5. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  6. mongodb 简单部署方案及实例

    mongodb 简单部署方案及实例 转载:http://my.oschina.net/zhuzhu0129/blog/53290 第一节 准备工作 一 安装mongodb  我这里选用rehl 5.6 ...

  7. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  8. 一个简单的jQuery插件开发实例

    两年前写的一个简单的jQuery插件开发实例,还是可以看看的: <script type="text/javascript" src="jquery-1.7.2.m ...

  9. [WCF REST] 一个简单的REST服务实例

    Get:http://www.cnblogs.com/artech/archive/2012/02/04/wcf-rest-sample.html [01] 一个简单的REST服务实例 [02] We ...

随机推荐

  1. python面试的100题(8)

    企业面试题 15.python新式类和经典类的区别? (在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性 ...

  2. (转)json格式转换成javaBean对象的方法

    把json格式转换成javaBean才可以.于是查了一下资料,网上最多的资料就是下面的这种方式: Java code? 1 2 3 4 5 6 7 8 9 String str = "[{\ ...

  3. [ASP.NET]Web网站与Web应用程序区别

    [ASP.NET]Web网站与Web应用程序区别   本文链接:https://blog.csdn.net/a954553391/article/details/86403521 前言:在项目开发中, ...

  4. 【StarUML】 活动图

    StarUML中的活动图本质上是流程图,活动图相对来说,更加专业,它有对信号的处理,对状态动作.数据区别表示,使得更清晰地了解控制流的走向. 1.基本元素 a.活动状态图(Activity).动作状态 ...

  5. SSH通道 Xshell

    SSH是每一台Linux电脑的标准配置. SSH是一种网络协议,用于计算机之间的加密登录(安全的). 1.  登录远程主机    $ ssh user@host    2.  SSH的默认端口是22, ...

  6. HTML学习(11)表格

    HTML表格由<table>标签定义,下面是一个2行3列的表格: <table> <tr> <td>11</td> <td>12 ...

  7. Python记通用列表操作之切片!

    ______________________________________除使用索引(indexing)来访问单个元素外,还可使用切片 (slicing) 来访问特定范围内的元素. 切片适用于提取序 ...

  8. 机器学习基础梳理—(accuracy,precision,recall浅谈)

    一.TP TN FP FN TP:标签为正例,预测为正例(P),即预测正确(T) TN:标签为负例,预测为负例(N),即预测正确(T) FP:标签为负例,预测为正例(P),即预测错误(F) FN:标签 ...

  9. makecert生成证书

    是要命令 makecert -r -pe -n "cn=musetowc" -$ commercial -a sha1 -b 01/01/2020 -e 01/01/2050 -c ...

  10. Apollo安装教程

    最近一直在研究Apollo的安装问题,浪费了几天时间,所有特意来记录一下安装心得. UBUNTU 14.04安装 这个我是把自己的笔记本全部转换为ubuntu系统,操作相对简单,大家可以自行查找,另外 ...