一、入门
1、新建测试文件
打开pycharm→左上角新建项目→选择项目路径→选择python解释器→创建→点击新建好的项目,右键新建python文件→测试文件(py文件)命名必须以test开头
2、创建测试用例
定义测试类:导入unittest模块→创建一个测试类,并且继承unittest中的TestCase类
定义测试方法:就是python中的实例方法,必须以test开头
3、运行测试文件
①在py文件右键运行文件
②pycharm对自带的测试运行可视化按钮
③命令行:在pycharm终端输入
python 文件名.py
4、入门代码
import unittestclass TestDemo(unittest.TestCase):def test_01_login(self): # 1、这测试方法名字也必须用test开头;2、这是python中的实例方法,self指向当前实例对象。print("------这是测试登录的用例------")def test_02_register(self):print("------这是测试注册的用例------")if __name__ == "__main__": # 判断是否直接运行的本文件,如果直接运行的本文件才会运行unittest.main(),因为本文件可能会被作为模块被其他文件导入unittest.main() # unittest.main() 会自动发现和运行当前模块中所有的测试用例。它会搜索文件中所有符合 test* 命名规则的测试方法(如 test_example),并执行它们,报告测试结果。
'''
__name__ 是一个特殊的变量,它表示当前模块的名称。'''
二、使用断言实现对测试用例结果的判断
1、断言
三、通过装饰器控制测试用例是否需要执行
TestCase自带很多不同的装饰器,实现控制我们测试用例的运行过程。
在实际的工作中,用例可能存在很多,但是这些用例有可能不是所有的用例都需要被运行,有的用例需要根据不同的情况来判断是否需要运行。利用TestCase自带的装饰器来实现用例运行的过程的控制。
【补充】unittest运行结果的说明:
. 表示测试通过;F表示测试失败;s表示跳过了,没有参数测试;x表示预期失败;u表示意外成功。
四、测试夹具在测试用例中的使用
夹具(Fixture)的作用可以把我们测试运行前的设置测试环境和运行结束后的清理工作相关的代码抽离出来,单独放到夹具中区运行。夹具主要用于准备一些必要的资源(如数据库连接、文件、网络服务等),可以方便代码的组织和维护,减少重复的代码。
先运行 初始化的夹具(setUp或setUpClass或setUpModule),再运行 测试用例,最后运行 测试运行结束后的夹具(tearDown或tearDownClass或earDownModule)。初始化的夹具 和 测试运行结束后的夹具 不一定要成对出现,其中哪一个都可以单独使用。
unittest 在运行测试时的执行流程:
①测试方法开始执行:首先运行测试方法。
②setUp() 被调用:在每个测试方法执行前,setUp() 被调用,用于初始化测试环境。
③执行测试代码:测试方法的主体代码被执行。
④tearDown() 被调用:测试方法执行后,tearDown() 被调用,用于清理测试环境。
⑤显示测试结果:在 tearDown() 完成后,测试框架会显示结果,如 .、F 或 E,以表示测试的成功、失败或错误。
⑥setUpClass() 和 tearDownClass():如果使用了类级别的夹具 ,它们分别会在所有测试方法运行前后各调用一次,通常会用于资源初始化和清理。
⑦setUpModule() 和 tearDownModule():如果使用了模块级别的夹具它们分别会在所有测试该模块类运行前后各调用一次。
【模块】通常就是一个.py文件
1、setUp()
setUp() 方法在每个测试方法执行之前被调用。它用于创建或初始化测试所需的资源。
如果某些资源或状态在多个测试方法中共享,你可以在 setUp() 中进行初始化。
2、tearDown()
tearDown() 方法在每个测试方法执行之后被调用。它用于清理测试过程中的副作用,如关闭文件、数据库连接、清理缓存等。
3、setUpClass() 和 tearDownClass()
setUpClass() 和 tearDownClass() 是类级别的夹具方法,用于在整个测试类的所有测试方法之前和之后执行一次操作。
这两个方法是类方法,需要使用 @classmethod 装饰器。
4、setUpModule() 和 tearDownModule()
setUpModule() 和 tearDownModule() 用于模块级别的夹具,在模块内的所有测试类之前和之后分别执行一次操作。
5、代码示例
test_04.py
import unittest
# 模块级别夹具
def setUpModule():print("setUpModule: 在整个模块开始之前执行一次,进行模块级别初始化")def tearDownModule():print("tearDownModule: 在整个模块结束之后执行一次,进行模块级别的清理")class MyTestCase(unittest.TestCase):# 类级别夹具@classmethoddef setUpClass(cls):print("setUpClass: 在所有测试方法之前调用一次,进行类级别的初始化")@classmethoddef tearDownClass(cls):print("tearDownClass: 在所有测试方法之后调用一次,进行类级别的清理")# 方法级别夹具def setUp(self):print("setUp: 在每个测试方法之前调用,进行方法级别的初始化")self.test_data = {"name": "John", "age": 30}def tearDown(self):print("tearDown: 在每个测试方法之后调用,进行方法级别的清理")self.test_data = Nonedef test_name(self):print("测试 test_name")# self.assertEqual(self.test_data["name"], "John")self.assertEqual(1,1)def test_age(self):print("测试 test_age")#self.assertEqual(self.test_data["age"], 30)self.assertEqual(1, 1)if __name__ == "__main__":unittest.main()
使用命令行 运行测试文件:python test_04.py 后的结果
五、清理函数让测试用例更加自由