python内置模块之unittest测试(五)
系列文章
单元测试模块unittest
- unittest的四个核心的概念:
TestLoader:加载或分发测试任务的调度器;
TestCase:测试用例的对象;
TestSuite:多个测试用例的容器;
TextTestRunner:执行测试用例的工作者;
TextTestResult:测试结果保存的对象;
fixture:搭建一个测试环境;
# 使用断言方法
assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass
assertIsNotNone 存在,则pass
- 如果断言错误,就会报assertionError错误;
简单测试实例
# mytest.py
def add(a, b):
return a+b
def minus(a, b):
return a-b
def multi(a, b):
return a*b
def divide(a, b):
return a/b
# test.py
import unittest
from mytest import *
class MathTest(unittest.TestCase):
'''测试main模块'''
def test_add(self):
'''测试add函数'''
self.assertEqual(2,add(1,1))
def test_minus(self):
'''测试minus函数'''
self.assertEqual(2,minus(3,1))
def test_multi(self):
'''测试multi函数'''
self.assertEqual(15,multi(3,5))
def test_divide(self):
'''测试divide函数'''
self.assertEqual(2,divide(10,5))
if __name__ == '__main__':
unittest.main(verbosity=1)
执行test.py文件获得测试的结果。
知识点
每个继承TestCase的类都是一个测试用例,其中的每一个以test开头的方法都是一个测试实例;
测试的实例必须以test开头,否则无法被识别;在方法下面加注释后,在测试的结果终端可以显示;
测试的执行时没有顺序的,完后后标志:成功是 .,失败是 F,出错是 E,跳过是 S。
unittest.main中的verbosity方法可以控制报告的详细程度,设为 0,则不输出每一用例的执行结果;如果设为 2,则输出详细的执行结果,默认为1;
setUP()和tearDown()
- 如果需要在测试前做一些准备工作,测试后一些扫尾的工作,使用setUp和tearDown函数;
import unittest
class MathTest(unittest.TestCase):
'''测试main模块'''
def setUp(self):
"""测试前的准备工作"""
pass
def tearDown(self):
"""测试后的工作"""
pass
- 上述两个方法会在每个testcase执行的前后执行,如果想所有的测试实例只执行一次准备和结尾的工作,使用:
import unittest
class MathTest(unittest.TestCase):
'''测试main模块'''
@classmethod
def setUpClass(cls):
"""测试前的准备工作"""
pass
@classmethod
def tearDownClass(cls):
"""测试后的工作"""
pass
多个测试模块的集成
- 如果有多个测试文件,每个都去手动执行的方式是不现实的,可以使用TestSuite。
# test_suite.py
import unittest
from mytest import MathTest
if __name__ == '__main__':
# 创建一个TestSuite的容器
suite = unittest.TestSuite()
# 添加测试用例,指定按照添加的顺序来
tests = [MathTest("test_add"), MathTest("test_minus"), MathTest("test_divide")]
# 在容器中加入
suite.addTests(tests)
# 可以加入单个
# suite.addTest(MathTest("test_minus"))
# 有时候我们并不关注执行的顺序
tests2 = unittest.TestLoader().loadTestsFromTestCase(MathTest)
tests1 = unittest.TestLoader().loadTestsFromTestCase(MathTest)
# 以列表的形式加入,tests1和tests2是一个容器,容器可以嵌套容器
suite.addTests([test1,test2])
# 一般结果默认输出到终端,可以设置输出到文件
with open('UnittestTextReport.txt', 'a',encoding='utf-8') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(suite)
跳过某些测试
- 在测试的testcase添加装饰器;
unittest.skip(reason):无条件跳过,reason可以用来写跳过的原因。
unittest.skipIf(condition, reason):当condition为True是跳过;condition可以是一个函数,类等任何对象;
unittest.skipUnless(condition, reason):当condition为False是跳过;
class MathTest(unittest.TestCase):
'''测试main模块'''
@unitteat.skip('skip this add')
def test_add(self):
'''测试add函数'''
self.assertEqual(2,add(1,1))
python内置模块之unittest测试(五)的更多相关文章
- Python 下的unittest测试框架
unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...
- python单元测试框架-unittest(五)之跳过测试和预期失败
概要 @unittest.skip(reason): skip(reason)装饰器:直接跳过测试,并说明跳过测试的原因. @unittest.skipIf(reason): skipIf(condi ...
- 【转】python模块分析之unittest测试(五)
[转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...
- python利用unittest测试框架组织测试用例的5种方法
利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...
- Python接口测试实战3(下)- unittest测试框架
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试之unittest框架(五)
Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- python内置模块之collections(六)
前言 collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python ...
- Python单元测试框架unittest使用方法讲解
这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下 概 ...
随机推荐
- 修改 wordpress 后台管理员登录地址
拷贝根目录下的 wp-login.php文件命名为wp-login.php.backup,把原文件重命名为managewp.phpsed -i "s/wp-login.php/managew ...
- LOJ #6270. 数据结构板子题 (离线+树状数组)
题意 有 \(n\) 个区间,第 \(i\) 个区间是 \([l_i,r_i]\) ,它的长度是 \(r_i-l_i\) . 有 \(q\) 个询问,每个询问给定 \(L,R,K\) ,询问被 \([ ...
- idea使用docker-maven-plugin插件将项目编译为docker镜像到远程linux服务器 原
在使用idea开发时,直接docker-maven-plugin插件,把项目编译成docker镜像,然后通过docker:push推送到linux服务器,非常简单,快捷,也避免了手动打包,然后拷贝wa ...
- [luogu4513]小白逛公园
题目描述 在小新家附近有一条"公园路",路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的风景给每个公园打了分-.-.小新 ...
- 【bzoj3938】 Robot
http://www.lydsy.com/JudgeOnline/problem.php?id=3938 (题目链接) 题意 给出数轴上$n$个点,有$m$个操作,在时间$t$让一个点以一定的速度移动 ...
- A1038. Recover the Smallest Number
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- csp20151203画图 解题报告和易错地方
Solution: dfs 对于dfs: //遇到map[u][v]==c,则不用再搜 //因为通过(u,v)到达的其它点(p,q), //之前从(u,v)开始肯定能到达(p,q),(p, ...
- 走进Java中的持有对象(容器类)【二】Collection
概述 通过前文的学习,我们对容器的分类及常用容器类的作用有了基本的认识.本文将针对Collection容器的功能与使用进行细致分析. 基本操作 Collection集合抽象出的目的是为存放独立元素的序 ...
- 多线程之间的通信(等待唤醒机制、Lock 及其它线程的方法)
一.多线程之间的通信. 就是多个线程在操作同一份数据, 但是操作的方法不同. 如: 对于同一个存储块,其中有两个存储位:name sex, 现有两个线程,一个向其中存放数据,一个打印其中的数据. ...
- 上传znbsite
1.将本地文件打包为zip: 2.备份服务器上的classes文件夹下面的配置文件: 3.上传zip,释放到tomcat下: 4.覆盖classes文件夹中的配置文件,启动tomcat: