点击上方“Python自动化社区”,选择“加为星标”
第一时间关注 Python 自动化技术干货!
1. 前言
测试金字塔中,单元测试 处于测试的最底层,开发测试成本最低,产生的效率最高,因此,单元测试在软件测试中的地位最为重要。
Python 中常用的单元测试框架包含:unittest 和 pytest。
今天先聊聊 unittest 单元测试框架。
2. 功能介绍
unittest 单元测试框架可以通过编写测试用例,来完成平常的自动化测试工作,包含:App 端、Web 端、接口自动化测试。
pycharm 内置 unittest,该测试框架内置了丰富的断言方法,帮助我们更加灵活的生成测试日志。
测试日志内容包含:测试 case 执行总时间、成功和失败的测试用例数。
unittest 可以使用 TestLoader 通过查找匹配的文件,执行里面所有的测试用例。
不仅如此,unittest 也内置了 常用的装饰器、Fixture、帮助我们在自动化测试过程中处理一些业务逻辑场景。
3. 组成
unittest 包含 4 个重要的概念,分别是:Test Case、Test Suite、Test Runner、Test Fixture
Test Case,又名:测试用例,是一个独立且最小的测试框架,用于检测特定输入集合的特定的返回值。
unittest 只需要自定义一个类,继承于 TestCase 类,然后就可以在内部编写测试用例了。
Test Suite,测试套件,用于组装一组要运行的测试用例,使用 TestSuite 类创建测试套件。
Test Runner 是 unittest 中的一个组件,用来执行测试用例并展示测试的结果,包含:文本和图形界面。
使用 unittest 提供的 TextTestRunner 类运行测试用例,可以使用 HTMLTestRunner 生成 HTML 格式的测试报告。
Test Fixture 基于模块运行的,一般在测试用例执行之前和执行完成之后,特定初始化或者清理一些对象。
4. 断言
unittest 框架内置大量的断言方法,具体可以查看该框架中 unittest.TestCase 实现的方法。
常用的断言方法包含:assertEqual()、assertTrue()、assertFalse()、assertIs()、assertIn()、assertIsInstance,根据需要选中一种进行断言即可。
5. 基本使用
使用 unittest 编写单元测试用例按下面 3 步:
第 1 步,需要编写一个类继承自 unittest.TestCase 类
# 导入依赖
import unittest
# 自定义类,继承于 TestCase
class TestFoo(unittest.TestCase):
pass
第 2 步,编写测试方法,方法名必须以:test 字符串开头,然后在方法内部编写测试逻辑,最后使用 断言 来输出结果
# 测试方法
def test_fun(self):
"""
编写测试方法
:return:
"""
# 1、编写测试逻辑
# 2、断言
self.assertEqual(result, "Hello World")
第 3 步,在 main 执行函数中,使用 unittest.main() 执行测试用例
if __name__ == '__main__':
# 运行所有的测试用例
unittest.main()
需要注意的是,如果一个测试类中定义了多个测试用例,执行顺序按照测试用例对应的测试方法名的 ASCII 值升序 来运行。
6. 套件使用
也可以使用另外一种方式,将多个测试用例加入到 TextSuite 测试套件中
首先,我们编写多个测试用例。
import unittest
class TestFoo(unittest.TestCase):
def test_fun1(self):
pass
def test_fun2(self):
pass
def test_fun3(self):
pass
然后,新建一个测试运行器:TextTestRunner,使用测试运行器来运行测试套件
if __name__ == '__main__':
# 创建测试套件
suit = unittest.TestSuite()
# 新增测试用例
suit.addTest(TestFoo("test_fun1"))
suit.addTest(TestFoo("test_fun2"))
suit.addTest(TestFoo("test_fun3"))
# 创建测试运行器
runner = unittest.TextTestRunner()
# 运行测试套件,执行顺序可控
runner.run(suit)
这样就保证了测试用例的执行顺序按照加入的顺序来执行了。
下一节将对 unittest 进阶的功能进行讲解。
喜欢本教程系列的同学
欢迎长按下图订阅!
⬇⬇⬇