python-unittest模块-测试套件和执行器

一、简介:

suite  测试套件: 相当于测试用例的集合

runner 执行器:相当于 测试执行器,用于去执行测试用例(套件)

 

二、直接上例子

1、执行某个测试类的普通用法

在一个模块中,在主函数 中直接执行执行,执行的是这个测试类下面的所有测试方法

import unittest

# 测试类继承unittest.TestCase
class MytestCase1(unittest.TestCase):

    # 测试方法,以test开头
    def test_1(self):
        print('test1-1')
        b = 0
        self.assertTrue(b)
  
    def test_2(self):
        print('test1-2')
        b = 1
        self.assertTrue(b)
  

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

 

2、执行测试类方法除了上面 通过主函数去执行,还可以通过,suite 套件去执行,

测试类1: demo1.py

import unittest

# 测试类继承unittest.TestCase

class MytestCase1(unittest.TestCase):

    
    def test_1(self):
        print('test1-1')
        b = 0
        self.assertTrue(b)

    def test_2(self):
        print('test1-2')
        b = 1
        self.assertTrue(b)

测试类2 demo2.py

import unittest

# 测试类继承unittest.TestCase

class MytestCase2(unittest.TestCase):

    def test_1(self):
        print('test2-1')
        b = 1
        self.assertTrue(b)

    def test_2(self):
        print('test2-2')
        b = 0
        self.assertTrue(b)

    def test_3(self):
        print('test2-3')
        b = 1
        self.assertTrue(b)

    def test_4(self):
        print('test2-4')
        b = 0
        self.assertTrue(b)

 

通过测试套件 指定执行某个测试类下的某一个测试方法(一次添加一个):

suit_demo1.py

# '''
# 通过测试套件suite 的方式指定 具体执行哪些类方法
# 注意测试套件必须,必须编写在单独的某块中,通过在这个模块中导入测试类和测试方法,再去执行
# '''
import unittest
from demo1 import MytestCase1
from demo2 import MytestCase2

# 实例化测试套件
suite = unittest.TestSuite()


# 指定执行某个模块中的测试方法,单个单个添加
suite.addTest(MytestCase1('test_1'))
suite.addTest(MytestCase2('test_1'))
suite.addTest(MytestCase2('test_2'))


# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

 

通过测试套件 指定执行某个测试类下的某些2测试方法(一次添加多个):

suit_demo2.py

'''
将用例定义成一个 list传入测试套件去执行
注意:
list tuple 是有序的
set dict 是无序的
'''
import unittest
from demo1 import MytestCase1
from demo2 import MytestCase2

# 实例化测试套件
suite = unittest.TestSuite()

''' 测试类的测试方法作为参数'''
# 指定执行某个模块中的测试方法,addTests 添加多个
suite.addTests([MytestCase1('test_1'),MytestCase1('test_2'),MytestCase2('test_3'),MytestCase2('test_4')])

# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

简化代码,将测试方法封装到一个变量中,便于阅读:

'''
将用例定义成一个 list变量 传入测试套件去执行
注意:
list tuple 是有序的
set dict 是无序的
'''
import unittest
from demo1 import MytestCase1
from demo2 import MytestCase2

# 实例化测试套件
suite = unittest.TestSuite()

# 将用例定义 成一个list变量,使代码更加清晰
# 在python 中 list 和tuple 是有序的,
# case = [
#         MytestCase1('test_1'),
#          MytestCase1('test_2'),
#          MytestCase2('test_3'),
#          MytestCase2('test_4')
#         ]


# 在python 中 集合 和dict 是无序的 
case1 = {
        MytestCase1('test_1'),
         MytestCase1('test_2'),
         MytestCase2('test_3'),
         MytestCase2('test_4')
        }


# 指定执行某个模块中的测试方法,addTests 添加多个
suite.addTests(case1)


# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

 

执行某个测试类下的所有测试方法  装载器--loadTestsFromTestCase

'''
使用装载器,指定执行某个测试类下的所有测试方法
'''
import unittest
from demo1 import MytestCase1
from demo2 import MytestCase2

# 实例化测试套件
suite = unittest.TestSuite()

'''通过装载器 ,类名作为参数,执行这个测试类的所有测试方法 '''
# 传入某个模块中的测试类,执行这个测试类的所有类方法
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(MytestCase1))

# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

 

执行某个测试模块下的某个测试类方法 装载器 --loadTestsFromName()   --loadTestsFromName()

'''
使用装载器,指定执行某个模块下的测试类的测试方法
'''
import unittest
from unittestsuite_demo.demo1 import MytestCase1
from unittestsuite_demo.demo2 import MytestCase2

# 实例化测试套件
suite = unittest.TestSuite()

# 传入模块.类名,执行这个测试类的所有类方法-单数
suite.addTests(unittest.TestLoader().loadTestsFromName('demo2.MytestCase2'))

# 传入模块.类名,执行这个测试类的所有类方法-复数
suite.addTests(unittest.TestLoader().loadTestsFromNames(['demo2.MytestCase2','demo1.MytestCase1']))



# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

 

执行某个模块下的所有测试类方法  装载器--loadTestsFromModule()

'''
使用装载器,指定执行某个模块下的所有测试类方法'''
import unittest
import demo1

# 实例化测试套件
suite = unittest.TestSuite()

'''通过装载器 ,模块作为参数,执行这个模块下的所有测试类方法 '''
#传入模块,直接执行这个模块下的所有测试类的测试方法
suite.addTests(unittest.TestLoader().loadTestsFromModule(demo1))

# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(suite)

 

执行指定目录下 去执行某些模块         (注意模块名字命名符合一定的规则)

'''
通过装载器指定执行某个文件夹下的所有模块(.py文件)
'''
import unittest,os

# 定义当前模块所在目录,用于后面从当前模块所处目录下去查找模块
# module_path = os.getcwd()
module_path='./'

discover= unittest.defaultTestLoader.discover(start_dir=module_path,pattern='demo*.py')

# 实例化执行器
runner = unittest.TextTestRunner()
runner.run(discover)

 

上一篇:直播内容抢先看 | 符合安全要求的软件测试解决方案


下一篇:使用Aimersoft Video Suite在 Mac 上下载所有格式的视频?