简单聊一聊关于UnitTest的二三事(二)

上一篇 / 下一篇  2021-05-31 16:01:34 / 个人分类:单元测试

四、TestSuite-测试套件
首先新建一个UnitTest类,编写测试用例,文件名为unit_for_testA.py,代码如下:
# 导包
import unittest

class UnitForTestA(unittest.TestCase):
    # 前置条件
    def setUp(self) -> None:
        print('this is AsetUp')

    # 后置条件
    def tearDown(self) -> None:
        print('this is AtearDown')

    # 定义测试用例
    def test_1(self):
        print('this is Atest1!!!')

    def test_2(self):
        print('this is Aest2!!!')

    def test_3(self):
        print('this is Atest3!!!')

再新建一个类存放套件,文件名为TestSuite_demo.py,直接在UnitTest类中运行无法生效。
下面创建一个测试套件(unittest.TestSuite()),并分别用五种不同的方法给该测试套件添加测试用例。
(1)添加测试用例的第一种方法--单个添加(addTest)
# 导入unittest的包
import unittest
# 导入存放测试用例的类
from unittest_demo.unit_for_testA import UnitForTestA

# 创建一个测试套件
suite = unittest.TestSuite()
# 添加测试用例的第一种方法
suite.addTest(UnitForTestA('test_1'))
suite.addTest(UnitForTestA('test_2'))
suite.addTest(UnitForTestA('test_3'))

# 基于Ruunner来运行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

(2)添加测试用例的第二种方法--批量添加(addTests)
# 导入unittest的包
import unittest
# 导入存放测试用例的类
from unittest_demo.unit_for_testA import UnitForTestA

# 创建一个测试套件
suite = unittest.TestSuite()

# 添加测试用例的第二种方法
cases = [UnitForTestA('test_1'), UnitForTestA('test_2'), UnitForTestA('test_3')]
suite.addTests(cases)

# 基于Ruunner来运行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

(3)添加测试用例的第三种方法--根据路径下的文件名匹配(defaultTestLoader.discover)
该添加测试用例的方法也为批量执行,代码中指定的目录下,如果文件名称满足筛选条件,则所有满足条件的文件中的所有测试用例都会被执行,为了看清效果,我们再建一个UnitTest类,编写测试用例,文件名为unit_for_testB.py,代码如下:
# 导包
import unittest

class UnitForTestB(unittest.TestCase):
    # 前置条件
    def setUp(self) -> None:
        print('this is BsetUp')

    # 后置条件
    def tearDown(self) -> None:
        print('this is BtearDown')

    # 定义测试用例
    def test_1(self):
        print('this is Btest1!!!')

    def test_2(self):
        print('this is Best2!!!')

    def test_3(self):
        print('this is Btest3!!!')

目录结构如图:

此时在测试套件类(TestSuite_demo.py)中,根据路径下的文件名添加测试用例的代码为:
# 导入unittest的包
import unittest

# 创建一个测试套件
suite = unittest.TestSuite()

# 添加测试用例的第三种方法
test_dir = './'  # 指定的路径下所有与文件名相匹配的文件下的测试用例(批量执行)
discover = unittest.defaultTestLoader.discover(start_dir=test_dir, pattern='unit_for_test*.py')

# 基于Ruunner来运行测试套件
runner = unittest.TextTestRunner()
runner.run(discover)

运行结果如下图,由图可见,在当前目录下的两个文件中的用例都执行了。
start_dir:需要执行的文件路径;
pattern:需要匹配的文件名称,其中unit_for_test*.py匹配所有以unit_for_test开头的python文件;

(4)添加测试用例的第四种方法--根据类名去读取(单个类)(TestLoader().loadTestsFromTestCase())
# 导入unittest的包
import unittest

# 导入存放测试用例的类
from unittest_demo.unit_for_testA import UnitForTestA

# 创建一个测试套件
suite = unittest.TestSuite()

# 添加测试用例的第四种方法
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(UnitForTestA))

# 基于Ruunner来运行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

(5)添加测试用例的第五种方法--根据名称去添加(TestLoader().loadTestsFromName())
# 导入unittest的包
import unittest

# 创建一个测试套件
suite = unittest.TestSuite()

# 添加测试用例的第五种方法
suite.addTests(unittest.TestLoader().loadTestsFromName('unit_for_testA.UnitForTestA'))

# 基于Ruunner来运行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

五、跳过用例
在执行用例的时候,不是每个用例都必须跑一次,unittest提供了跳过一些跳过用例不执行的方法,在用例前加装饰器,具体有:
(1)@unittest.skip:直接跳过本条用例不执行;
(2)@unittest.skipUnless(1 > 2, '1>2是假的'):当条件为假时,跳过该用例不执行;
(3)@unittest.skipIf(1 < 2, '1<2是真的'):当条件为真时,跳过该用例不执行。

TAG:

 

评分:0

我来说两句

Open Toolbar