Python之单元测试

17 篇文章 0 订阅
3 篇文章 0 订阅

Python之单元测试

典型的单元测试步骤
  1. 创建测试计划
  2. 编写测试用例,准备测试数据
  3. 编写测试脚本
  4. 编写被测代码,代码完成后执行测试脚本
  5. 修正代码缺陷,重新测试直到代码修正结束

让测试驱动开发

一、Python的单元测试框架PyUnit(unittest)

  • 是Python的标准库

1. 测试固件(test fixtures)

  • 测试相关的准备工作和清理工作
    • setUp():完成初始化工作
    • tearDown():资源释放
# 被测试类 myClass.py
class MyClass(object):
	def add(self, a, b):
		return a+b
	def sub(self, a, b):
		return a-b
  • 测试用例, testMyClass.py
import unittest

from myClass import MyClass

class MyClassTest(unittest.TestCase):
	def setUp(self):
		print("Runnging setUp")
		self.myclass = MyClass()
	def tearDown(self):
		print("Running tearDown")
		self.mycalss = None
	
	def testAdd(self):
		self.assertEqual(self.myclass.add(1, 3), 4)
	def testSub(self):
		self.assertEqual(self.myclass.sub(1, 3), -2)

执行结果
在这里插入图片描述

2. 测试用例(test case)

上述实验就是一个测试用例

  • TestCase子类的实例作为测试用例

3. 测试用例集(test suite)

将多个测试用例组织,放在TestSuite中,自动在一次测试中全部完成

if __name__ == '__main__':
	# 构建测试集
	suite = unittest.TestSuite()
	suite.addTest(MyClassTest("testAdd"))
	suite.addTest(MyClassTest("testSub"))

4. 测试运行器(test runner)

if __name__ == '__main__':
	# 构建测试集
	suite = unittest.TestSuite()
	suite.addTest(MyClassTest("testAdd"))
	suite.addTest(MyClassTest("testSub"))

	# 执行测试
	runner = unittest.TextTestRunner()
	runner.run()

执行结果
在这里插入图片描述

缺点
  • setUp()和tearDown()只是在TestCase层面上提供,每个测试用例执行,都会运行一遍,如果模块很多时,创建环境和清理环境会带来大量工作
  • 没有插件机制进行扩展,比如增加测试覆盖统计特性就很困难

二、 nose

1. 优点

  • 定义了插件机制,默认自带coverage插件
  • 会自动发现测试用例,并执行
  • 与unittest测试用例兼容
  • 配置和清理函数可以放在__init__.py、模块、测试用例中,解决了不同层次的测试需要的配置和清理需求
  • 与setuptools的集成更友好,提供了Nose.collector作为通过的测试套件,可针对不同项目编写不同套件

2. 使用

因为是第三方库,需要先安装
pip install nose

简单样例:

import nose

def test_nose():
	pass

if __name__ == "__main__":
	nose.runmodule()

执行结果
在这里插入图片描述

3. 缺点

  1. gitlab上上一次维护是2016年了,作为第三方库,emmm。。。
    在这里插入图片描述
  2. nose2继承nose,但是node2不支持nose的全部功能

三、pytest

1. 优点

  • assert断言失败时会输出详细信息
  • 能自动发现测试模块和函数
  • 完全兼容unittest,基本兼容nose
  • 插件丰富,且可自定义扩展
  • 入门简单,各种文档也比较多
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值