一、简介

unittest单元测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。

二、属性介绍

1、unittest模块的各个属性

unittest.TestCase:TestCase类,所有测试用例类继承的基本类。

unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行它们。执行方法的默认顺序是: 根据ASCII码的顺序加载测试用例,数字与字母的顺序为0-9、A-Z、a-z。

unittest.TestSuite():创建测试套件

unittest.TextTextRunner():unittest框架的TextTextRunner类,通过该类的run()方法来运行suite所组装的测试用例,参数是suite测试套件.

unittest.dedaultTestLoaser():defaultTestLoader()类,通过该类下的discover方法,可自动根据测试目录匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover.

unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

@unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.expectedFailure(): expectedFailure()测试标记为失败。

2、TestCase类的属性:

setUp():setUp()方法用于每个测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

tearDown():tearDown()方法用于每个测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

assertEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,相等则测试用例通过。

assertIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中,在b中则测试用例通过。

3、TestSuite类的属性

addTest()addTest()方法是将测试用例添加到测试套件中,一次只能添加一个测试用例,如下方,是将本模块下的MyTest类下的testcasea测试用例添加到测试套件中

suite=unittest.TestSuite()
suite.addTest(MyTest('testcasea'))

addTests():addTests()方法是将多个测试用例添加到测试套件中,参数是可迭代对象,如下方,是将本模块下的MyTest类下的testcasea、testcaseA测试用例添加到测试套件中。

suite=unittest.TestSuite()
suite.addTests([MyTest('testcasea'),MyTest('testcaseA')])

4、TextTextRunner的属性

run():run方法是运行测试套件的测试用例,参数是suite测试套件。

三、示例

import unittest
#定义要校验的函数,函数的功能是传递两个参数,做两个参数的除法计算
def division(a,b):
try:
return round(a/b,1)
except Exception as e:
return '不可计算' #定义测试类,继承unittest.TestCase类
#可以继承unittest.TestCase类的setUp方法和tearDown方法
#可以继承unittest.TestCase类的各种断言方法
class MyTest(unittest.TestCase): ##定义tearDown()做每一个测试用例执行前的初始化工作
def setUp(self):
print('开始测试') #定义测试用例:以“test_”开头命名的方法
#注意,方法的入参为self
#可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断
#可定义多个测试用例 def testcasea(self):
print('testcasea')
res=division(1,2)
self.assertEqual(res,0.5,'算错') def testcaseA(self):
print('testcaseA')
res = division(1, 0)
self.assertEqual(res,'不可计算', '算错') @unittest.skip('暂时跳过测试用例3')
def testcaseB(self):
res = division(1, -2)
self.assertEqual(res,-0.5, '算错') #定义tearDown()做每一个测试用例执行完毕的善后工作
def tearDown(self):
print('测试用例执行完毕') #执行测试用例方案1
#main方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。
#执行顺序是根据测试用例(方法)的名称的ASCII码顺序
unittest.main() #执行测试用例方法2:
#先构造测试集
#实例化测试套件
suite=unittest.TestSuite()
#添加测试用例到测试套件中
#测试用例的执行顺序是根据添加测试用例的顺序,
#如下,会先执行testcasea,再执行testcaseA、再执行testcaseB
suite.addTests([MyTest('testcasea'),MyTest('testcaseA'),MyTest('testcaseB')]) #执行测试用例,实例化TextTestRunner类
#调用run方法,运行测试套件
#执行时,也会根据装饰器判断是否执行或者屏蔽测试用例
runner=unittest.TextTestRunner()
runner.run(suite) # 执行测试用例方案三
#使用defaultTestLoader类的discover()方法自动到指定目录下匹配查找测试用例文件
#并自动将找到的测试用例组装到测试套件中 #定义查找目录
test_dir='./'
disco=unittest.defaultTestLoader.discover(test_dir,pattern='yaml1.py')
runner = unittest.TextTestRunner()
runner.run(disco)

执行方案1和3的运行结果如下:

可以看到先执行的testcaseA、在执行的testcasea,且没有执行testcaseB

开始测试
testcaseA
测试用例执行完毕
开始测试
testcasea
测试用例执行完毕
.s.
----------------------------------------------------------------------
Ran 3 tests in 0.000s OK (skipped=1)

执行方案2的运行结果如下:

可以看到先执行的testcasea、在执行的testcaseA,且testcaseB跳过不执行

开始测试
testcasea
测试用例执行完毕
开始测试
testcaseA
测试用例执行完毕
..s
----------------------------------------------------------------------
Ran 3 tests in 0.000s OK (skipped=1)

参考网站:

https://www.cnblogs.com/yufeihlf/p/5707929.html

单元测试-unittest的更多相关文章

  1. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...

  2. python单元测试unittest

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

  3. [转]python单元测试unittest

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

  4. Flask 单元测试 unittest

    import unittest 单元测试 app = Flask(__name__) -------------------------------------------- import unite ...

  5. Python单元测试unittest【转自https://www.cnblogs.com/feng0815/p/8045850.html】

    [转自https://www.cnblogs.com/feng0815/p/8045850.html] Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一 ...

  6. Python单元测试unittest - 单元测试框架

    一.unittest简介 unitest单元测试框架最初是有JUnit的启发,它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性. 二.unittest相关概念 ...

  7. Python单元测试--unittest(一)

    unittest模块是Python中自带的一个单元测试模块,我们可以用来做代码级的单元测试. 在unittest模块中,我们主要用到的有四个子模块,他们分别是: 1)TestCase:用来写编写逐条的 ...

  8. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出

    部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...

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

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

随机推荐

  1. [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...

  2. ELK收集Nginx自定义日志格式输出

    1.ELK收集日志的有两种常用的方式: 1.1:不修改源日志格式,简单的说就是在logstash中转通过 grok方式进行过滤处理,将原始无规则的日志转换为规则日志(Logstash自定义日志格式) ...

  3. zabbix分布式监控的部署与win被控端

    zabbix是一个分布式监视,管理系统,基于server-clinet架构,可用于监视各种网络服务,服务器和网络机器等状态. server端基于C语言,web管理端Frontend则是基于PHPA制作 ...

  4. net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解

    asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

  5. AtCoder Grand Contest 11~17 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...

  6. 040 Http与RPC

    一直在说,但是没有系统的文档理解过. 1.本质 目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的. 他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HT ...

  7. MarkdownPad 2在win10上安装及破解(含安装包)

    MarkdownPad 2 是一款较不错的Markdown编辑器,可快速将文本转换为美观的HTML/XHTML的网页格式代码,且操作方便,用户可以通过键盘快捷键和工具栏按钮来使用或者移除Markdow ...

  8. 非对称加密算法-RSA算法

    一.概述 1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现 2.java6支持RSA算法 3.RSA算法可以用于数据加密和数字签名 4.RSA算法相对于DES/AES等对 ...

  9. Scala-Unit5-Scala面对对象与模式匹配

    Java中的面向对象:万物皆对象. 我们要封装数据,定义模板等操作,素以我们需要面向对象. ====================================================== ...

  10. 20165220 Java第三周学习总结

    1.教材学习内容总结 类与对象 类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象是类的实例 为个别对象的数据成员指定值的方式是:对象.对象成员 注意“一类一文件” 类在定义时要使用关键词 ...