python中unittest模块是用来做单元测试的。

unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep thebar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

unittest作为单元测试框架以一个标准模块放入python的开发包中,测试框架可以提供用例的组织与执行,提供丰富的验证比较方法和丰富的日志,能够帮助我们更好的组织自动化测试用例。

一、unitest中几个重要的概念

1、Test Case

一个Test Case的实例就是一个测试用例,一个测试用例就是一个完整的测试流程,它包括测试前准备 setUp() ,实现测试过程的代码run(),以及测试完成之后的环境还原tearDown() ;测试单元unit test 就是一个完整的测试用例,通过这个单元测试可以对程序的某个功能进行验证

2、Test Suite

一个功能点的验证往往包含多个测试用例,多个测试用例集合到一起就组成一个测试集 TestSuite ,通过addTest()加载Test Case到 TestSuite中

3、Test Runner

测试用例的执行,我们可以执行单个测试用例也可以执行整个测试集,通过TextTestRunner类提供的run()方法来执行

4、Test Fixture

对一个测试用例从环境的前期搭建到销毁就是一个fixture ,通过覆盖test case 的setUp()和tearDown()方法来实现

二、unittest 编写用例

1、我们先定义一个sumFunc.py文件,给出一个计算两数之和的方法

2、 编写一个unittest的用例test01.py文件:

我们的TestCount类继承类unittest模块中的TestCase类,使用asserEqual方法对sumNum()方法进行断言,而省去类被注释掉的代码,常用的断言方法有:asserEqual(a,b)、assertTrue(a)、assertIs(a,b)、assertIsNone(x)等等

3、组织单元测试用例

首先,我们在sumFunc.py文件中再增加一个subNum()方法用来计算两个数的减法,然后在test01.py文件中新增这个方法的断言验证

然后,我们开始组织用例

上面的例子中创建了TestCount()和TestSub()两个类,分别测试sumFunc.py文件中的sumNum()和subNum()两个功能,通过TestSuite类的addTest()方法把不同的测试类中的测试方法组装到测试集中,最后执行结果如下:

三、Testloader用例识别

从上面简单的例子中可以看到我们的测试集需要添加所有的case去执行,实际项目中我们的case可以按照功能划分有成百上千条用例,这时我们就可以用Testloader类提供discover()方法自动识别测试用例

discover(start_dir, pattern='test*.py', top_level_dir=None)

这样,只要我们的测试case按照pattern给定的规则命名,就能自动的识别到测试用例去run()

四、用例类型

1、在实际应用中我们会需要根据特定的场景和条件选择跳过不去执行某些用例,在unittest中提供了这样的功能:

unitest.skip(reason) #跳过装饰的测试,并给出原因

unitest.skipIf(condition,reason) #跳过装饰的测试,当满足条件时

unitest.skipUnless(condition,reason) #跳过装饰的测试,除非满足条件时

unitest.expectedFailure() #该装饰的测试统一标记为失败

2、上 面我们提到fixtures可以看作是setUp/tearDown和中间的测试用例,除此之外,unit test还有对测试类和测试模块的fixtures

setUpModule/tearDownModule :在整个模块的开始和结束时被执行

setUpClass/tearDownClass :在测试类的开始和结束时被执行

setUp/tearDown :在测试用例的开始和结束时被执行

五、测试报告

在测试执行完成之后我们需要将用例的结果写入到log文件中,简单的我们可以直接写入文件

python runtest.py >> report/log.txt 2>&1

实际项目中我们一般要加入些report插件来更直观美化的呈现测试报告,HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的HTML报告,下载地址:

http://tungwaiyip.info/software/HTMLTestRunner.html

将HTMLTestRunner.py(python 2和python 3有些方法不一致需要修改一点)文件加入到我们的python安装目录中,然后import HTMLTestRunner

fp = open('./result.html', 'wb')

runner = HTMLTestRunner(stream=fp,title='测试报告标题', description='测试报告描述')

runner.run(testunit)

fp.close

1、HTMLTestRunner可以读取到doc string类的注释(‘’‘ ’‘’),所以我们可以给每个测试用例通过添加注释就能在报告中展示每条用例的名称

2、我们可以使用用例执行时间来存储每次报告的文件名称

now = time.strftime("%Y-%m-%d %H_%M_%S")

filename = './' + now + 'result.html'

fp = open(filename,'wb')

3、发送测试报告邮件,python的smtplib模块提供sendmail方法让我们发送邮件

我们需要设置邮箱的服务器、发送邮箱、接受邮箱、邮件主题、邮件附件等等

关于Unittest单元测试框架今天就跟你们分享到这里了,如果对你有帮助的话,欢迎大家评论留言一起交流。最后别忘了点击关注一键三连哦!

python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解相关推荐

  1. python自动化测试框架有哪几种_Python自动化测试-Unittest单元测试框架详解

    python中unittest模块是用来做单元测试的. unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the ...

  2. python安装包的方法与图解_Python下载和安装过程详解(包含所有平台)

    在开发 Python 程序之前,必须先完成一些准备工作,也就是在计算机上安装并配置 Python 解释器. 在 Windows 上安装 Python 在 Windows 上安装 Python 请按如下 ...

  3. python的turtle怎么设置rgb颜色_Python : turtle色彩控制实例详解

    ? 1 turtle.pencolor(* args ) 返回或设置pencolor. 允许四种输入格式: ? 1 pencolor() 将当前的pencolor返回为颜色规范字符串或元组(参见示例) ...

  4. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  5. python中的complex是什么意思_Python 内置函数complex详解,pythoncomplex

    Python 内置函数complex详解,pythoncomplex 英文文档: class complex([real[, imag]]) Return a complex number with ...

  6. python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...

    引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...

  7. python通过connect对象连接数据库对吗_Python连接数据库学习之DB-API详解

    前言 大家都知道在Python中如果要连接数据库,不管是MySQL.SQL Server.PostgreSQL亦或是SQLite,使用时都是采用游标的方式,所以就不得不学习Python DB-API. ...

  8. python面向对象编程指南 脚本之家_python对象及面向对象技术详解

    本文实例讲述了python对象及面向对象技术.分享给大家供大家参考,具体如下: 1 先看一个例子. 本章将讲解这个例子程序: 文件: fileinfo.py: """Fr ...

  9. python中s和t的关系_python中set和frozenset详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元 ...

最新文章

  1. 趣谈HTTP协议中的那些MIME header
  2. ICML2021接受论文列表出炉!1184篇论文都在这了!
  3. 《扩展 jQuery》——6.3 总结
  4. python中ndarray如何生成单独的记事本文件_NumPy-快速处理数据--ndarray对象--数组的创建和存取...
  5. Java Web 开发必须掌握的三个技术:Token、Cookie、Session
  6. C#下的Web应用程序设计过程
  7. 《Python Cookbook 3rd》笔记(3.7):无穷大与 NaN
  8. html5+css3第一次作业_老娘我,饿死也不要陪孩子做手工作业,高考陪考真香!...
  9. locate: command not found updatedb: command not found
  10. java 动态给属性赋值_java中为实体对象的动态属性赋值
  11. jQuery – 6.选择器
  12. XCODE 9:最新功能详尽介绍
  13. Springboot+Vue前后端分离在线答题+题库管理系统
  14. 如何把高版本unity资源导入Laya
  15. 线性拟合1-最小二乘法
  16. win10的linux内核版本,微软决定在Windows10中发布一个完整的Linux内核
  17. Java输入1~12之间的整数,显示该月份的英语单词及这个月属第几季度。
  18. 《Spring Cloud实战指南》快速学习路线图(2022版)
  19. win10录屏有噪音_我的电脑是win10的,用Ev录屏有杂音,之前我调了声卡驱动,就没了,现在重装调了一下又有了...
  20. 水仙花数(调用函数)

热门文章

  1. SDN控制器ONOS架构—Vecloud
  2. 为什么越来越多的企业使用互联网电话(VoIP)?—Vecloud微云
  3. 【搜索引擎】Smartsys部署ES的准备工作
  4. 新闻网大数据实时分析可视化系统项目——14、Spark2.X环境准备、编译部署及运行...
  5. 《memory leak: stackwalk》
  6. 如何获取当前点击元素的某个子元素
  7. Yii AR Model 查询
  8. 应用DIV+CSS编码时容易犯的一些错误
  9. Fedora配置网络DHCP
  10. 周五:IPC连接及远程执行