Python自带一个单元测试框架,unittest模块,用它来做单元测试,它里面封装好了一些校验返回结果的方法和一些用例执行前的初始化操作

在说unittest之前,先说几个概念:

TestCase:测试用例

TestSuite:多个测试用例集合在一起

TestLoader:用来加载TestCase到TestSuite

TestRunner:执行测试用例,测试的结果保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

import unittest

class MyTest(unittest.TestCase):  # 继承unittest.TestCase
def tearDown(self):
# 每个测试用例执行之后做操作
print('111') def setUp(self):
# 每个测试用例执行之前做操作
print('22222') @classmethod
def tearDownClass(self):
# 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
print('4444444')
@classmethod
def setUpClass(self):
# 必须使用@classmethod 装饰器,所有test运行前运行一次
print('33333') def test_a_run(self):
self.assertEqual(1, 1) # 测试用例 def test_b_run(self):
self.assertEqual(2, 2) # 测试用例 if __name__ == '__main__':
unittest.main()#运行所有的测试用例

 下面是一些常用的断言,也就是校验结果

        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模块unittest的更多相关文章

  1. Python之unittest测试代码

    前言 编写函数或者类时,还可以为其编写测试.通过测试,可确定代码面对各种输入都能够按要求的那样工作. 本次我将介绍如何使用Python模块unittest中的工具来测试代码. 测试函数 首先我们先编写 ...

  2. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  3. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...

  4. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  5. python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...

  6. 老李分享:开发python的unittest结果输出样式

    老李分享:开发python的unittest结果输出样式   Python的unittest结果命令行输出,格式比较乱.为了提高格式输出的可读性,实现可以不同的颜色标识.所以准备扩展Python的un ...

  7. [转]python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单 ...

  8. 【转】python模块分析之collections(六)

    [转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...

  9. 【转】python模块分析之typing(三)

    [转]python模块分析之typing(三) 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度 ...

随机推荐

  1. Java基础——面试、笔试

    网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&page=2 参考资料:(java方面的一些面试 ...

  2. ftp CentOS7安装

    1.安装ftp服务yum install vsftpd 2.修改ftp配置文件(/etc/vsftpd/vsftpd.conf)ascii_upload_enable=YESascii_downloa ...

  3. python操作mysql,redis

    import pymysqlip ="127.0.0.1"#数据库地址user = 'username'#数据库用户名password="pwd"#数据库密码d ...

  4. ubuntu 7z解压

    安装方法:     sudo apt-get install p7zip 解压文件:     7z x manager.7z -r -o /home/xx 解释如下: x 代表解压缩文件,并且是按原始 ...

  5. 虚拟机使用桥接模式连接网络并且设置静态ip

    1.桥接模式连接网络 虚拟机连接网络一共有四种模式,我这里只介绍桥接模式,毕竟坑了我几个小时 设置有线连接,我本来用的无线连接完成微信点餐系统,后来换了有线因为有线连接不会分配ip,和本地电脑使用同一 ...

  6. 【BZOJ3811/UOJ36】 玛里苟斯

    Description 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,…,an}. 等概率随机取 S 的一个子集 A={ai1,… ...

  7. [BZOJ3456]城市规划:DP+NTT+多项式求逆

    写在前面的话 昨天听吕老板讲课,数数题感觉十分的神仙. 于是,ErkkiErkko这个小蒟蒻也要去学数数题了. 分析 Miskcoo orz 带标号无向连通图计数. \(f(x)\)表示\(x\)个点 ...

  8. SWPU2019 伟大的侦探

    01editor 选择 EBCDIC编码得到压缩包的密码 这里用到的是福尔摩斯里面的跳舞的小人加密 结果是:iloveholmesandwllm

  9. Oracle-分配用户只读存储过程权限

    系统新来了系统运维人员,要求创建数据库账号,只分配对表,视图,存储程序有只读权限 因为表和视图权限接触比较频繁,所以今天花点时间整理下关于存储过程的权限 关于ORACLE账号的权限问题,一般分为两种权 ...

  10. Oracle开发:normal ,sysdba,sysoper区别

    Oracle将用户分成两类:[system]和[sys] [system]用户只能用normal身份登陆em.(可以看成公司的普通成员) [sys]用户具有“SYSDBA”(可以看成公司的CEO)或者 ...