013- unittest单元测试框架
unittest单元测试框架
重要的概念
1. TestCase
TestCase 是最小的测试单元,用于检查特定输入集合的特定返回值。unittest提供了TestCase基类,我们创建的测试类需要继承该基类,它可以用来创建新的测试用例
2. TestSuite
测试套件是测试用例、测试套件或两者的集合,用于组装一组要运行的测试。unittest提供了TestSuite类来创建测试套件
3. Test Runner
Test Runner是一个组件,用于协调测试的执行并向用户提供结果。unittest提供了TextTestRunner类运行测试用例
4. TestFixture
TestFixture代表执行一个或多个测试所需的环境准备,以及关联的清理动作。uinttest提供了setUp( )/tearDown( )、setUpClass( )/tearDownClass( )
TestSuite
调用TestSuite类下面的addTest( )来添加测试用例。因为一次只能添加一条用例,所以需要指定测试类及测试方法
suit = unittest.TestSuite()
suit.addTest(Calculator("test_add"))
suit.addTest(Calculator("test_sub"))
1. 通过测试套件添加顺序可以控制测试用例的执行顺序
2. 当一个测试文件中有很多测试用例时,并不是每次都要执行所有的测试用例,因而可以通过测试套件和运行器可以灵活的控制要执行的测试用例
discover方法
unittest提供了defaultTestLoader类中的discover( )方法,可以从多个文件中查找测试用例
discover(start_dir,pattern="test*.py",top_level_dir=None )
1. start_dir:待测试的模块名或测试用例目录
2. pattern="test*.py":测试用例文件名的匹配原则。此处匹配文件名以"test"开头的“.py”类型的文件,星号“*”表示任意多个字符
3. top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,则默认为None
import unittest
# 定义测试用例的目录为当前目录中的test_case目录
test_dir = r"./test_case"
suit = unittest.defaultTestLoader.discover(test_dir,pattern="test*.py") if __name__ == "__main__":
runner = unittest.TextTestRunner()
runner.run(suit)
如果将discover( )方法中的start_dir 参数定义为“./test_case目录,那么只能加载test_a.py文件中的测试用例。如果想让unittest查找test_case/下子目录中的测试文件,需要在每个子目录下放一个__init__.py文件。__init__.py文件的作用是将一个目标标记成一个标准的Python模块
跳过测试和预期失败
在运行测试时,有时需要直接跳过某些测试用例,或则当测试用例符合某个条件时跳过测试,又或者直接将测试用例设置为失败。unittest提供了实现这些需求的装饰器
unittest.skip(reason)
无条件的跳过装饰的测试,需要说明跳过测试的原因
unittest.skipIf(condition,reason)
如果条件为真,则跳过装饰的测试
unittest.skipUnless(condition,reason)
当条件为真时,执行装饰的测试
unittest.expectedFailure()
不管执行结果是否失败,都将测试标记为失败
import unittest class Mytest(unittest.TestCase):
@unittest.skip("直接跳过测试")
def test_skip(self):
print("aaa") @unittest.skipIf(3 > 2 ,"条件为真,跳过测试")
def test_skipIf(self):
print("bbb") @unittest.skipUnless(3 > 2,"条件为真,执行用例")
def test_skipUnless(self):
print("ccc") @unittest.expectedFailure
def test_expectedFailure(self):
self.assertEqual(2,3) if "__name__" == "__main__":
unittest.main()
执行结果
Skipped: 直接跳过测试 Skipped: 条件为真,跳过测试
ccc Ran 4 tests in 0.006s OK (skipped=2, expected failures=1)
单元测试部分代码:
1. 创建一个calculator.py文件
class Calculator: def __init__(self,a,b):
self.a = int(a)
self.b = int(b) def add(self):
return self.a + self.b def sub(self):
return self.a - self.b def mul(self):
return self.a * self.b def div(self):
return self.a / self.b
2. 通过unittest单元测试框架编写测试用例
import unittest
from Calculator import Calculator class TestCalculator(unittest.TestCase):
def test_add(self):
c = Calculator(3,5) # type(c):<class 'Calculator.Calculator'>
result = c.add() # type(result):<class 'int'>
self.assertEqual(result,8) def test_sub(self):
c = Calculator(13,5)
result = c.sub()
self.assertEqual(result, 8) def test_mul(self):
c = Calculator(2,3)
result = c.mul()
self.assertEqual(result,5) def test_div(self):
c = Calculator(6,3)
result = c.div()
self.assertEqual(result,2) if __name__ == "__main__":
unittest.main()
3. 创建测试套件跟测试运行器
import unittest
from Calculator import Calculator class TestCalculator(unittest.TestCase):
# 测试用例前置动作
def setUp(self):
print("test start:")
# 测试用例后置动作
def tearDown(self):
print("test end:") def test_add(self):
c = Calculator(3,5) # type(c):<class 'Calculator.Calculator'>
result = c.add() # type(result):<class 'int'>
self.assertEqual(result,8) def test_sub(self):
c = Calculator(13,5)
result = c.sub()
self.assertEqual(result, 8) def test_mul(self):
c = Calculator(2,3)
result = c.mul()
self.assertEqual(result,5) def test_div(self):
c = Calculator(6,3)
result = c.div()
self.assertEqual(result,2) if __name__ == "__main__":
# 创建测试套件
suit = unittest.TestSuite()
suit.addTest(Calculator("test_add"))
suit.addTest(Calculator("test_sub"))
suit.addTest(Calculator("test_mul"))
suit.addTest(Calculator("test_div"))
# 创建测试运行器
runner = unittest.TextTestRunner()
runner.run(suit)
013- unittest单元测试框架的更多相关文章
- unittest单元测试框架总结
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试框架详解
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- unittest单元测试框架
unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...
- unittest单元测试框架简单说明
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- unittest单元测试框架总结(转载)
转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...
- 四. 引入unittest单元测试框架
1. 安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...
- unittest 单元测试框架断言方法
unittest单元测试框架的TestCase类下,测试结果断言方法:Assertion methods 方法 检查 版本 assertEqual(a, b) a == b assertNotEqu ...
- unittest 单元测试框架
引入 unittest 框架 相想使用unittest 框架,首先要引入unittest 包 import unittest class Baidu(unittest.TestCase): Baidu ...
随机推荐
- Maven父子工程配置文件详解
项目骨架搭建成功之后. 因为父工程管理子工程.子工程相当于继承于子工程,所以子工程可以调用父工程里面的东西.那么就可以将jar包对应的配置文件书写到父工程的pom.xml文件中,注意:父工程的打包方式 ...
- spring事务管理几种方式
前段时间对spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- ArrayList 和linkedList 插入比较
从学Java开始, 就一直大脑记着 arrayList 底层是数组 ,查询快, 插入慢, 有移动的动作.linkedList 底层链表, 插入快 查询慢,今天写了例子跑了跑, 果然. public ...
- <day001>存储到Mysql、mongoDB数据库+简单的Ajax请求+os模块+进程池+MD5
任务1:记住如何存储到Mysql.mongoDB数据库 ''' 存储到Mysql ''' import pymysql.cursors class QuotePipeline(object): def ...
- <Python基础>列表的基本操作
s = 'abCDeFg aBcDea' s1 = s.split('D',3) #以s1列表为例 print(s1) #增 s1.append('foxabc') #返回值None,直接增到列表的最 ...
- Walk Through Squares HDU - 4758 AC自动机+简单状压DP
题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...
- Lost's revenge HDU - 3341 AC自动机+DP(需要学会如何优雅的压缩状态)
题意: 给你n个子串和一个母串,让你重排母串最多能得到多少个子串出现在重排后的母串中. 首先第一步肯定是获取母串中每个字母出现的次数,只有A T C G四种. 这个很容易想到一个dp状态dp[i][A ...
- Kill- Linux必学的60个命令
1.作用 kill命令用来中止一个进程. 2.格式 kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] 3.参数 -s:指定发送的信号. ...
- node vue 微信公众号(三)启用本地服务器
1.下载nginx http://nginx.org/en/download.html 2.启动服务 3.配置natapp服务,并启动
- BZOJ 2281 消失之物
ftiasch 有 N 个物品, 体积分别是 W1, W2, -, WN. 由于她的疏忽, 第 i 个物品丢失了. "要使用剩下的 N – 1 物品装满容积为 x 的背包,有几种方法呢?&q ...