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

unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。

unittest有四个比较重要的概念是test fixture, test case, test suite, test runner, 。

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

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

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

通过dir(unittest),我们可以看到unittest全部的属性和方法,他们的关系如下图所示。

unittest主要类关系

正常调用unittest的流程是,TestLoader 自动将测试用例TestCase中加载到TestSuite里,TextTestRunner调用TestSuite的run方法,顺序执行里面的TestCase中以test开头的方法,并得到测试结果TestResult。在执行TestCase过程中,先进行SetUp()环境准备,执行测试代码,最后tearDown()进行测试的还原。

其中TestLoader在加载过程中,进行添加的TestCase是没有顺序的。一个TestCase里如果存在多个验证方法的话,会按照方法中test后方首字母的ascii码从小到大排序后执行。

可以通过手动调用TestSuite的addTest、addTests方法来动态添加TestCase,这样既可以确定添加用例的执行顺序,也可避免TestCase中的验证方法一定要用test开头。

下面写一个简单的单元测试用例

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测试用例怎么写_Python单元测试unittest的具体使用示例相关推荐

  1. python测试代码怎么写_Python 单元测试

    Test your software, or your users will. "Test ruthlessly. Don't make your users find bugs for y ...

  2. python单元测试示范卷_Python单元测试--Unittest

    原标题:Python单元测试--Unittest 什么是单元测试 单元测试是用来对最小可测试单元(如一个函数.一个类或者一个模块)进行检查和验证.尤其是在对代码进行修改或重构后,可以快速准确的定位出现 ...

  3. python语言案例教程 单元测试_python单元测试unittest实例详解

    本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情 ...

  4. python单元测试教程_python单元测试unittest 输出测试报告HTMLTestRunner

    建立unittest步骤: 1.先导入模块unittest及要测试的函数 2.再创建一个继承unittest.TestCase的类,类命名要包含Test 3.在类中创建一个方法,命名为test_开头 ...

  5. 素数python函数怎么写_python如何判断一个数是否是素数

    先来看下什么是质数: 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数). 简单来说就是,只能除以 ...

  6. python测试用例管理模块_Python的单元测试模块如何检测测试用例?

    所以我环顾四周在我的Python27 / Lib目录- unittest.main实际上是一个类的别名,unittest.TestProgram.那么,你会怎么样构造一个这样的一个实例,它的__ini ...

  7. python selenium po模式_Python+Selenium+Unittest实现PO模式web自动化框架

    1)效率高 :PO模式的逻辑层方法有具体定义,元素发生变化修改逻辑层,业务层不变.这样看来结构简单清晰,舒服更符合人类习惯, 普通方式就是继续堆case. 2) 复用多收益大: 同样这里如果逻辑复用越 ...

  8. python 测试用例管理 生成_python自动生成接口测试用例

    在python中Template可以将字符串的格式固定下来,重复利用. 同一套测试框架为了可以复用,所以我们可以将用例部分做参数化,然后运用到各个项目中. 代码如下: coding=utf-8 ''' ...

  9. python测试函数怎么写_Python - 函数

    函数,function,是一段代码的集合体.是Python为了代码最大程度的重用.减小代码冗余而提供的最基本的程序结构. Python是一门面向对象的编程语言,对函数进行分类和封装,由对象实现对方法的 ...

最新文章

  1. 万字长文详解Docker架构原理及功能使用!
  2. Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方式
  3. phpcms v9 的表单向导功能的使用方法
  4. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1050:骑车与走路
  5. Python修饰器的函数式编程
  6. python爬虫之逆向破解_Python爬虫进阶之APP逆向(二)
  7. MySQL巧妙利用help_topic表把以逗号分隔的字符串转换成行
  8. 俄罗斯 IT 存储空间告急,未来 2 月或将耗尽?
  9. FFmpeg 在ubuntu 中编译出so
  10. Ubuntu 下如何查看已安装软件版本
  11. 开源的读取Excel文件组件-ExcelDataReader
  12. 一线城市的繁荣vs年轻人的梦想?
  13. 鼠标钩子WH_MOUSE_LL
  14. Blob和File对象API与兼容性问题
  15. CodeForces - 1144C Two Shuffled Sequences【优先队列】
  16. 完成一个STM32的USART串口通讯程序
  17. 浅谈游戏业务遭遇攻击的防护措施
  18. 操作系统中颠簸(thrashing)解决办法
  19. 【转载】__declspec(dllimport) __declspec(dllexport)
  20. CRect类(矩形类)

热门文章

  1. tea java 代码,TeaVM编译器如何将Java应用程序转换为Javascript,以及如何使用MicroK8管理嵌入...
  2. powerbi 线性回归_Power BI二月新增图表及课程福利
  3. c#.net配置mysql数据库连接池_C#MySQL连接池
  4. 新rust怎么拆除围墙_小区围墙半夜被人拆了,破坏者竟是开发商!记者采访被推出门...
  5. Django中提供了6种缓存方式,你会几种?
  6. Python教程:shift函数实现数据偏移的方法
  7. 一篇文章对Python匿名函数配合容器函数的使用理解
  8. Python判断字符串是否为字母或者数字
  9. python对象的 init 和 del 方法
  10. python中,如何将多行进行输出,同时将行尾的换行符去掉