unittest相关内容

一、unittest介绍与使用

1.作用

用于单元测试(功能函数,类)、用例的管理、用例的加载、用例的执行、测试报告的生成。

2.组件

TestCase:定义测试用例

TestSuite:测试套件,用于管理测试用例

TestRunner:运行测试用例

TestLoader:加载测试用例

Fixture:想当于钩子,用户测试用例执行前后进行执行。

3.为什么要使用Unittest框架?

能够组织多个用例去执行

提供丰富的断言方法

能够生成测试报告(由于生成的测试报告简陋,我们选择其他插件实现)

4.Fixture

Fixture是一个概述,对一个测试用例环境的初始化和销毁就是一个Fixture。以开发视角去理解,Fixture就像是Flask框架中的钩子,特定的方法,在测试用例执行前后进行执行。

Fixture存在控制级别:不同的级别决定了执行的作业范围和时机

方法级别:在执行测试类中的每一个测试用例之前,都会执行一遍setUp()方法,执行完每一条测试用例,都会执行一遍tearDown()方法。

类级别:在整个测试类里面所有的测试用例执行之前,执行一次setUpClass(cls),所有的用例执行完之后,统一执行一次tearDownClass(cls) 。

模块级别:

-初始化(前置处理):def setUpModule() --> 首先自动执行

-销毁(后置处理):def tearDownModule() --> 最后自动执行

运行于整个模块的始末,即:整个模块只会运行一次 setUpModule 和 tearDownModule

 

5.运行用例

      首先在pycharm中新建文件夹及文件,在mytest文件中,用Fixture方法级别写入:

# 导包
import unittest
 
# 待测函数
def two_he(a,b):
    return a + b
 
# 测试类:方法-->测试用例
# 注意事项:
#         -测试类,必须继承unittest.TestCase
#         -测试用例:就是方法,方法必须以test开头
class BdTestClass(unittest.TestCase):
    def setUp(self):
        print("sutup方法执行啦!")
        print("test_1")
 
    def tearDown(self):
        print("tearDown方法执行啦!")
        print("test_2")
 
    # 测试用例
    def test_1(self):
        # 调用待测函数
        two_he(1,2)
 
    def test_2(self):
        two_he(7,5)

 

 在two文件中写入:

# 导包
import unittest
 
# 待测函数
def th_he(a,b,c):
    return a + b
 
# 测试类:方法-->测试用例
# 注意事项:
#         -测试类,必须继承unittest.TestCase
#         -测试用例:就是方法,方法必须以test开头
class ShTestClass(unittest.TestCase):
    # 测试用例
    def test_1(self):
        # 调用待测函数
        th_he(1,2,3)
 
    def test_2(self):
        th_he('abc',5,6)

 

最后在main函数中写入:

# 1、导包
# 2、创建测试类,写测试用例
# 3、加载用例:
    # 3.1 实例化一个测试套件用于加载测试用例:suite = unittest.TestSuite()
    # 3.2 加载用例
                    # -addTest(模块名.类名("方法名"))
                    # -addTest(unittest.makeSuite(mytest.BdTestClass))
                    # -suite = unittest.TestLoader().discover('路径','文件名+通配符')
# 4、执行测试用例
    # 4.1 借助一个runner对象:runner = unittest.TextTestRunner()
    # 4.2 runner对象调用run方法,传递测试套件(suite)来执行
 
import unittest
from project03.myinfrom.case import mytest
 
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(mytest.BdTestClass))
 
# suite = unittest.TestLoader().discover('D:/p6课堂练习/project03/myinfrom/case','*test.py')
runner = unittest.TextTestRunner()
runner.run(suite)

 

方法级别运行结果:

unittest相关内容

 

在mytest文件中,用Fixture类级别写入:

# 导包
import unittest
 
# 待测函数
def two_he(a,b):
    return a + b
 
# 测试类:方法-->测试用例
# 注意事项:
#         -测试类,必须继承unittest.TestCase
#         -测试用例:就是方法,方法必须以test开头
class BdTestClass(unittest.TestCase):
    # def setUp(self):
    #     print("sutup方法执行啦!")
    #     print("test_1")
    #
    # def tearDown(self):
    #     print("tearDown方法执行啦!")
    #     print("test_2")
    @classmethod
    def setUpClass(cls):
        print('setUpclass running!')
 
    @classmethod
    def tearDownClass(cls):
        print('tearDownclass running!')
 
    # 测试用例
    def test_1(self):
        # 调用待测函数
        two_he(1,2)
 
    def test_2(self):
        two_he(7,5)

 

类级别用不到two文件

最后在main函数中写入:

# 1、导包
# 2、创建测试类,写测试用例
# 3、加载用例:
    # 3.1 实例化一个测试套件用于加载测试用例:suite = unittest.TestSuite()
    # 3.2 加载用例
                    # -addTest(模块名.类名("方法名"))
                    # -addTest(unittest.makeSuite(mytest.BdTestClass))
                    # -suite = unittest.TestLoader().discover('路径','文件名+通配符')
# 4、执行测试用例
    # 4.1 借助一个runner对象:runner = unittest.TextTestRunner()
    # 4.2 runner对象调用run方法,传递测试套件(suite)来执行
 
import unittest
from project03.myinfrom.case import mytest
 
# suite = unittest.TestSuite()
# suite.addTest(unittest.makeSuite(mytest.BdTestClass))
 
suite = unittest.TestLoader().discover('D:/p6课堂练习/project03/myinfrom/case','*test.py')
runner = unittest.TextTestRunner()
runner.run(suite)

 

类级别运行结果为:

unittest相关内容

 

    6.总结:

必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;

setUp,tearDown:如果一个类中有多个测试用例,每执行一个测试用例之前会调用一次setup,之后会调用一次tearDown;

setUpClass,tearDownClass:如果一个类中有多个测试用例,执行所有测试用例之前只会调用一次setUpClass之后只会调用一次tearDownClass;

setUpModule,tearDownModule:只在import导入这个模块时会调用一次setUpModule,模块使用完成之后会调用一次tearDownModule;

setUpXXX:一般做初始化工作;

tearDownXXX:一般做结束工作;

 

上一篇:openstack的glance镜像服务


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