Loading

Python测试用例-unittest-基础

1. 一个简单的测试用例脚本

import unittest


class TestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.abc = 1
        print(f"setUpClass: cls.abc={cls.abc}")

    def setUp(self) -> None:
        print(f"setUp: self.abc={self.abc}")

    def tearDown(self) -> None:
        print(f"tearDown: self.abc={self.abc}")

    def test_task_1(self):
        self.abc += 1
        print("test_task 1 done !")

    def test_task_2(self):
        self.abc += 1
        print("test_task 2 done !")

    @classmethod
    def tearDownClass(cls) -> None:
        print(f"tearDownClass: cls.abc={cls.abc}")


if __name__ == '__main__':
    unittest.main()

运行过程:(根据print看不出先后,可以通过debug打断点全部走一下流程)
setUpClass -> setUp -> test_task_1 -> tearDown -> setUp -> test_task_2 -> tearDown -> tearDownClass
运行结果:
setUpClass: cls.abc=1
setUp: self.abc=1
test_task 1 done !
tearDown: self.abc=2
setUp: self.abc=1
test_task 2 done !
tearDown: self.abc=2
tearDownClass: cls.abc=1

说明:

  1. setUpClasstearDownClass在测试用例类TestCase开始和结束时候运行一次,按需编码,必须加@classmethod,作为类方法实现
  2. setUptearDown在测试用例类TestCase中的每一个测试用例method的开始和结束都会运行一次,以正常的对象方法实现
  3. setUpClasstearDownClass 中的变量可以传递到用例方法中使用
  4. setUptearDown中的变量一样可以传递到用例方法中使用
  5. 结合3和4,需要注意的是,每次setUp都会重置初始化传递的变量值

2. 使用unittest.TestLoader()方法搜集测试用例并运行

image

常见用法

使用unittest.TestLoader()的多种方法搜集测试用例套件suite,然后unittest.TextTestRunner().run(suite)

# -*- coding:utf-8 -*-
# FileRelativePath: scripts/unit_test/cases/main.py
import unittest
from unit_test.cases.test_demo_1 import SelfTestCase1
from unit_test.cases import test_demo_1

def main():
    loader = unittest.TestLoader()
    # 通过指定搜索路径和py文件关键字加载到测试套件中
    suite = loader.discover(".", "test_*.py")
	
    runner = unittest.TextTestRunner()
    runner.run(suite)


if __name__ == '__main__':
    main()

测试用例suite的其他搜集方法

通过类名加载到测试套件中
suite = loader.loadTestsFromTestCase(SelfTestCase1)

通过模块名加载到测试套件中
suite = loader.loadTestsFromModule(test_demo_1)

通过'字符串'加载到测试套件中
name是一个string,格式为"module.class.method"
当module参数存在时:
name可为"class":执行某个类的所有测试方法
name为"class.method":执行某个类的测试方法
当module参数不存在时:
name可为"module.class.method":执行某个测试类的具体测试方法
name可为"module.class":执行某个测试类的所有测试方法
name可为"module":执行某个测试模块的的所有测试类的测试方法
suite = loader.loadTestsFromName("name", module=None)

通过多个'字符串'加载到测试套件中
suite = loader.loadTestsFromNames(["name1", "name2"], module=None)

posted @ 2023-07-26 21:53  MrSu  阅读(55)  评论(0编辑  收藏  举报