
引言
文章目录
一、TestLoader
1.1 概念
TestLoader 是 unittest 框架中的一个类,用于从测试模块、测试类或测试方法中加载测试用例。使用 TestLoader 可以更方便地发现和加载测试用例,而不需要手动将每个测试方法添加到 TestSuite 中
1.1.1 常见的 TestLoader 方法
loadTestsFromTestCase(testCaseClass): 从指定的测试类中加载所有测试方法loadTestsFromModule(module): 从指定的模块中加载所有测试类,并从这些类中加载所有测试方法loadTestsFromName(name, module=None): 从指定的名称(可以是模块名、类名或方法名)中加载测试discover(start_dir, pattern='test*.py', top_level_dir=None): 在指定目录及其子目录中查找并加载符合模式的所有测试文件
1.2 题目
如何使用testloader
1.3 代码
import unittest
suite = unittest.TestLoader().discover('./case', 'testcase*')
# run = unittest.TextTestRunner()
#
# run.run(suite)
unittest.TextTestRunner().run(suite)
输出结果:

1.4 代码解释
-
导入
unittest模块:import unittest- 这行代码导入了
unittest模块,它是 Python 标准库中用于编写和运行单元测试的框架
- 这行代码导入了
-
使用
TestLoader发现测试用例:suite = unittest.TestLoader().discover('./case', 'testcase*')unittest.TestLoader()创建了一个TestLoader对象discover方法用于在指定的目录中查找符合模式的测试文件,并将这些文件中的测试用例加载到一个TestSuite中start_dir='./case':指定开始搜索的目录,这里是当前目录下的case子目录pattern='testcase*':指定匹配的文件名模式,这里匹配所有以testcase开头的.py文件(例如testcase1.py,testcase2.py等)
suite是一个TestSuite对象,包含了从case目录中发现的所有测试用例
-
运行测试套件:
# run = unittest.TextTestRunner() # run.run(suite) unittest.TextTestRunner().run(suite)- 注释掉的部分展示了另一种创建
TextTestRunner对象并运行测试套件的方法 unittest.TextTestRunner().run(suite)直接创建TextTestRunner对象并运行suite中的测试用例TextTestRunner是默认的测试运行器,它会在控制台上输出测试结果run方法执行测试套件,并返回一个TestResult对象,该对象包含了测试的结果信息
- 注释掉的部分展示了另一种创建
1.4.1 详细说明
-
TestLoader的discover方法:discover方法会递归地搜索指定目录及其子目录中的测试文件,并根据给定的模式加载这些文件中的测试用例- 例如,假设
./case目录下有以下结构:./case/ ├── __init__.py ├── testcase1.py ├── testcase2.py └── subdir/ ├── __init__.py └── testcase3.py discover方法会找到testcase1.py,testcase2.py和subdir/testcase3.py中的所有测试用例,并将它们添加到TestSuite中
-
TextTestRunner的run方法:TextTestRunner是一个测试运行器,它负责执行测试套件并在控制台上输出结果。run方法接收一个TestSuite对象,并执行其中的所有测试用例- 测试结果会显示在控制台上,包括每个测试方法的名称、是否通过以及详细的错误信息(如果有的话)
二、Fixture
2.1 概念
-
setUp 和 tearDown:
setUp方法在每个测试方法执行前被调用tearDown方法在每个测试方法执行后被调用
-
setUpClass 和 tearDownClass:
setUpClass方法在测试类中的所有测试方法执行前被调用一次tearDownClass方法在测试类中的所有测试方法执行后被调用一次
-
setUpModule 和 tearDownModule:
setUpModule方法在模块中的所有测试类执行前被调用一次tearDownModule方法在模块中的所有测试类执行后被调用一次
2.2 题目
如何使用Fixture
2.3 代码
import unittest
class TestLogin(unittest.TestCase):
def setUp(self):
print('输入网址......')
def tearDown(self) -> None:
print('关闭当前页面......')
@classmethod
def setUpClass(cls) -> None:
print('------1. 打开浏览器')
@classmethod
def tearDownClass(cls) -> None:
print('------5. 关闭浏览器')
def test_1(self):
print('输入正确用户名密码验证码,点击登录 1')
def test_2(self):
print('输入错误用户名密码验证码,点击登录 2')
输出结果:

2.3 代码解释
这段python代码是使用unittest框架编写的单元测试用例,专门用于测试登录功能。代码中定义了一个测试类TestLogin,该类继承自unittest.TestCase
import unittest
这行代码导入了python标准库中的unittest模块,它是一个用于编写和运行测试的框架
class TestLogin(unittest.TestCase):
这行代码定义了一个名为TestLogin的类,用于包含登录功能的测试用例,它继承自unittest.TestCase
def setUp(self):
print('输入网址......')
setUp方法是一个特殊的方法,它在每个测试方法执行之前都会被调用。在这个方法中,打印了“输入网址…”,这可能表示设置测试环境或初始化测试所需的步骤
def tearDown(self) -> None:
print('关闭当前页面......')
tearDown方法也是一个特殊的方法,它在每个测试方法执行之后都会被调用。在这个方法中,打印了“关闭当前页面…”,这可能表示清理测试环境或执行测试后的清理工作
@classmethod
def setUpClass(cls) -> None:
print('------1. 打开浏览器')
setUpClass是一个类方法,它使用@classmethod装饰器标记。这个方法在所有测试方法执行之前只被调用一次。在这里,它打印了“------1. 打开浏览器”,表示在测试开始前打开浏览器的操作
@classmethod
def tearDownClass(cls) -> None:
print('------5. 关闭浏览器')
tearDownClass也是一个类方法,它同样使用@classmethod装饰器标记。这个方法在所有测试方法执行之后只被调用一次。它打印了“------5. 关闭浏览器”,表示在所有测试完成后关闭浏览器的操作
def test_1(self):
print('输入正确用户名密码验证码,点击登录 1')
这是一个测试方法,名为test_1,它测试登录功能的一个方面:输入正确的用户名、密码和验证码,然后点击登录。在这个方法中,它只是打印了相应的操作说明
def test_2(self):
print('输入错误用户名密码验证码,点击登录 2')
这是另一个测试方法,名为test_2,它测试登录功能的另一个方面:输入错误的用户名、密码和验证码,然后点击登录。同样,这个方法只是打印了相应的操作说明
三、思考
3.1 TestLoader
- 从
./case目录中自动发现所有符合testcase*模式的测试文件,并运行这些文件中的所有测试用例 - 测试结果会直接输出到控制台
- 这是一种非常方便的方式来管理和运行大量的测试用例,而无需手动指定每个测试类或方法
3.2 Fixture
setUp和tearDown方法在每个测试方法执行前后都会被调用setUpClass和tearDownClass方法在整个测试类开始前和结束后只被调用一次- 测试方法名必须以
test开头,这样unittest框架才能识别并运行它们 - 在实际的测试用例中,通常会有更多的断言(如
assertEqual,assertTrue等)来验证测试的结果是否符合预期,而不是仅仅打印操作说明










