博客
关于我
Python单元测试unittest实战
阅读量:797 次
发布时间:2023-03-07

本文共 2912 字,大约阅读时间需要 9 分钟。

Python 单元测试入门与实践指南

1. 单元测试基础概念

在开始编写测试用例之前,了解unittest模块的基础结构是必不可少的。unittest模块通过定义了一系列类来封装测试功能,包括TestCaseTestSuiteTestLoaderTestRunner等。

  • TestCase(测试用例):这是最基本的单元测试单元,通常由具体的测试类继承自unittest.TestCase。每个测试用例代表一个独立的测试功能或业务逻辑。

  • TestSuite(测试套件):一个测试套件可以包含多个测试用例(TestCase实例)。通过将各个测试用例组合在一起,可以构建一个完整的测试集,方便批量执行。

  • TestLoader(测试加载器):这个模块负责从指定的位置加载测试用例,并将它们组织到测试套件中。常用的加载器有defaultTestLoaderdiscover方法,可以自动扫描目录下所有符合条件的测试用例。

  • TestRunner(测试运行器):用于执行测试套件中的所有测试用例,并将结果保存到TestResult对象中。运行结果会记录每个测试用例的执行情况,包括成功与否、耗时等详细信息。

2. 编写简单的单元测试用例

以下是一个简单的MyTest类示例,展示了如何编写基本的单元测试用例:

import unittest
class MyTest(unittest.TestCase):
def setUp(self):
print('22222') # 测试用例执行前打印信息
def tearDown(self):
print('111') # 测试用例执行后打印信息
@classmethod
def tearDownClass(cls):
print('4444444') # 所有测试用例执行后打印信息
@classmethod
def setUpClass(cls):
print('33333') # 所有测试用例执行前打印信息
def test_a_run(self):
self.assertEqual(1, 1) # 测试用例1
def test_b_run(self):
self.assertEqual(2, 2) # 测试用例2

3. 常用断言方法

unittest模块提供了丰富的断言方法,用于验证测试结果。以下是常用的断言方法示例:

  • assertEqual(a, b):检查两个值是否相等
  • assertNotEqual(a, b):检查两个值是否不等
  • assertTrue(x):检查布尔值是否为True
  • assertFalse(x):检查布尔值是否为False
  • assertIsNone(x):检查对象是否为None
  • assertIn(a, b):检查对象a是否在集合b中

4. 生成测试报告

为了生成更直观的测试报告,可以使用HTMLTestRunner模块。以下是一个生成HTML格式测试报告的示例:

import HTMLTestRunner
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
print('22222')
def test_run(self):
self.assertEqual(1, 1)
def test_run2(self):
self.assertEqual(1, 1)
def test_run3(self):
self.assertEqual(1, 1)
def test_run1(self):
self.assertEqual(1, 1)
if __name__ == '__main__':
test_suite = unittest.TestSuite()
test_suite.addTest(MyTest('test_run1'))
fp = open('res.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='api测试报告', description='测试情况')
runner.run(test_suite)

5. 执行多个测试文件

如果需要执行多个测试文件,可以使用unittest.defaultTestLoader.discover方法来自动扫描文件夹中的测试用例:

import unittest
import HTMLTestRunner
# 找到当前目录下所有以'test_'开头的Python文件
all_cases = unittest.defaultTestLoader.discover('.', 'test_*.py')
suite = unittest.TestSuite()
for case in all_cases:
suite.addTests(case)
fp = open('res.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='all_tests', description='所有测试情况')
runner.run(suite)

6. 持续集成与Jenkins集成

在持续集成环境中,自动化测试是必不可少的。Jenkins是一个流行的持续集成工具,但它不直接支持HTML格式的测试报告。为了满足Jenkins的需求,可以使用xmlrunner模块来生成XML格式的测试报告:

import unittest
import xmlrunner
class My(unittest.TestCase):
def test1(self, a, b, c):
self.assertEqual(a + b, c)
if __name__ == '__main__':
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(My))
runner = xmlrunner.XMLTestRunner(output='report')
runner.run(test_suite)

运行上述代码后,可以在report目录下找到生成的XML测试报告。Jenkins可以通过解析这些XML文件来展示测试结果。

7. 最后

写一个好的技术文章,关键是要让读者能够轻松理解和跟随你的思路。如果你喜欢这篇文章,别忘了点赞和分享,让更多的开发者受益!

转载地址:http://nhofk.baihongyu.com/

你可能感兴趣的文章
python基础内容_Python基础入门必须了解的
查看>>
Python基础之面向对象2(封装)
查看>>
Python基础之给函数增加元信息
查看>>
python基础之字符编码
查看>>
python基础之多线程与多进程(二)
查看>>
Python基础之基本数据类型一《数字与字符串》
查看>>
python基础之变量---总纲
查看>>
Python基础之列表
查看>>
Python基础之Python环境搭建
查看>>
python基础之--面相对象--OOP基本特性
查看>>
python基础之--迭代器和生成器及异常处理
查看>>
python基础之--包和模块
查看>>
python基础之---面向对象--属性和方法
查看>>
python基础之---运算符
查看>>
python基础之---语句
查看>>
python基础之---正则表达式
查看>>
python基础之---函数式编程
查看>>
python基础之---函数
查看>>
Python基础之(一)基本数据类型
查看>>
Python基础【os】
查看>>