TestLoader
是 unittest
框架中的一个类,用于从测试模块、测试类或测试方法中加载测试用例。使用 TestLoader
可以更方便地发现和加载测试用例,而不需要手动将每个测试方法添加到 TestSuite
中
TestLoader
方法loadTestsFromTestCase(testCaseClass)
: 从指定的测试类中加载所有测试方法loadTestsFromModule(module)
: 从指定的模块中加载所有测试类,并从这些类中加载所有测试方法loadTestsFromName(name, module=None)
: 从指定的名称(可以是模块名、类名或方法名)中加载测试discover(start_dir, pattern='test*.py', top_level_dir=None)
: 在指定目录及其子目录中查找并加载符合模式的所有测试文件通过这种方式,你可以更灵活地管理和运行大量的测试用例
如何使用testloader
import unittest
suite = unittest.TestLoader().discover('./case', 'testcase*')
# run = unittest.TextTestRunner()
#
# run.run(suite)
unittest.TextTestRunner().run(suite)
输出结果:
使用了
unittest
框架来自动发现并运行测试用例
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
对象,并执行其中的所有测试用例在
unittest
框架中,测试夹具(Fixture)用于设置和清理测试环境。测试夹具确保每个测试用例在干净、一致的环境中运行,并且在测试完成后可以进行必要的清理工作
setUp 和 tearDown:
setUp
方法在每个测试方法执行前被调用tearDown
方法在每个测试方法执行后被调用setUpClass 和 tearDownClass:
setUpClass
方法在测试类中的所有测试方法执行前被调用一次tearDownClass
方法在测试类中的所有测试方法执行后被调用一次setUpModule 和 tearDownModule:
setUpModule
方法在模块中的所有测试类执行前被调用一次tearDownModule
方法在模块中的所有测试类执行后被调用一次通过合理使用这些夹具方法,可以确保测试环境的一致性和可重复性,从而提高测试的可靠性和稳定性
如何使用Fixture
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')
输出结果:
这段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
,它测试登录功能的另一个方面:输入错误的用户名、密码和验证码,然后点击登录。同样,这个方法只是打印了相应的操作说明
unittest.main()
将会运行TestLogin
类中定义的所有测试方法,并按照setUpClass
、setUp
、测试方法、tearDown
、tearDownClass
的顺序执行
./case
目录中自动发现所有符合 testcase*
模式的测试文件,并运行这些文件中的所有测试用例setUp
和tearDown
方法在每个测试方法执行前后都会被调用setUpClass
和tearDownClass
方法在整个测试类开始前和结束后只被调用一次test
开头,这样unittest
框架才能识别并运行它们assertEqual
, assertTrue
等)来验证测试的结果是否符合预期,而不是仅仅打印操作说明