其他分享
首页 > 其他分享> > UnitTest 框架

UnitTest 框架

作者:互联网

一、要素

TestCase:测试用例 TestSuite:测试套件(多条测试用例集合在一起) TestRunner:执行测试用例和测试套件 TestLoader:用来加载 TestCase 到 TestSuite 中,即加载满足条件的测试用例,并把测试用例封装成测试套件。 Fixture:对一个测试用例环境的初始化和销毁就是一个Fixture
二、使用过程

定义测试用例:

1、导包:import unittest;

2、定义测试类:新建测试类必须继承 unittest.TestCase;

3、定义测试方法:测试方法名称命名必须以 test 开头;

4、调用 unittest.main() 执行测试用例 ;

集合测试用例:

1、实例化: suite = unittest.TestSuite()

      (suite:为 TestSuite 实例化的名称)

2、添加用例:

  方法1:suite.addTest(ClassName("MethodName"))

      (ClassName:为类名;MethodName:为方法名)

  方法2:suite.addTest(unittest.makeSuite(ClassName))

      (搜索指定 ClassName 内 test 开头的方法并添加到测试套件中) 。

执行测试用例和测试套件:

1、实例化: runner = unittest.TextTestRunner()

2、执行: runner.run(suite) # suite:为测试套件名称

 

a.py

# 导包
import unittest
# 定义测试类

class my_test01(unittest.TestCase):
    # 定义测试方法
    def test_01(self):
        print("my_test01 的 test01")

    def test_02(self):
        print("my_test01 的 test02")

b.py

# 导包
import unittest
# 定义测试类

class my_test02(unittest.TestCase):
    def test_01(self):
        print("my_test02 的 test01")

    def test_02(self):
        print("my_test02 的 test02")

c.py

import unittest
import a
import b

# TestSuite实例化
suite = unittest.TestSuite()
# 添加用例
# suite.addTest(ClassName("MethodName"))
# 添加 my_test01 类中的test02方法
suite.addTest(a.my_test01("test_02"))
# suite.addTest(unittest.makeSuite(ClassName))
# 添加 my_test02 类中所有 test 开头的方法
suite.addTest(unittest.makeSuite(b.my_test02))
# TextTestRunner实例化
runner = unittest.TextTestRunner()
# 执行
runner.run(suite)

 

TestLoader:

用法:suite = unittest.TestLoader().discover(test_dir, pattern='test*.py')

      test_dir: 为指定的测试用例的目录;

      pattern:为查找的.py 文件的格式;

TestSuite与TestLoader区别:

1、TestSuite 需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法); 2、TestLoader 搜索指定目录下指定开头.py 文件,并添加测试类中的所有的测试方法,不能指定添加测试方法;

 

三、Fixture

Fixture 是一个概述,对一个测试用例环境的初始化和销毁就是一个 Fixture 。

1、方法级别

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

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

运行于测试方法的始末,即运行一次测试方法就会运行一次 setUp 和 tearDown

 

2、类级别

初始化(前置处理): @classmethod def setUpClass(cls): --> 首先自动执行

销毁(后置处理): @classmethod def tearDownClass(cls): --> 最后自动执行

运行于测试类的始末,即每个测试类只会运行一次 setUpClass 和tearDownClass

 

3、模块级别

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

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

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


 

四、断言


 

五、参数化

导包:from parameterized import parameterized;

使用@parameterized.expand 装饰器可以为测试函数的参数进行参数化;

方法一:

import unittest
from parameterized import parameterized

def my_sum(a, b):
    return a + b

class my_test(unittest.TestCase):
    @parameterized.expand([(1, 2 ,3), (2, 3, 5), (2, 4, 6)])
    def test_01(self, x, y, z):
        r = my_sum(x, y)
        self.assertEqual(r, z)

方法二:

import unittest
from parameterized import parameterized

def my_sum(a, b):
    return a + b

# 构建测试数据
data = [(1, 1, 2), (1, 0, 1), (0, 0, 0)]

class my_test(unittest.TestCase):
    @parameterized.expand(data)
    def test_01(self, x, y, z):
        r = my_sum(x, y)
        self.assertEqual(r, z)

方法三:

import unittest
from parameterized import parameterized

def my_sum(a, b):
    return a + b

# 构建测试数据
def build_data():
    return [(1, 2 ,3), (2, 3, 5), (2, 4, 6)]

class my_test(unittest.TestCase):
    @parameterized.expand(build_data)
    def test_01(self, x, y, z):
        r = my_sum(x, y)
        self.assertEqual(r, z)

 

六、跳过

# 直接将测试函数标记成跳过

@unittest.skip('代码未完成')

# 根据条件判断测试函数是否跳过

@unittest.skipIf(condition, reason)

 


 

七、生成HTML测试报告

1、TextTestRunner

1、导入unittest包;

2、生成测试套件 suite = unittest.TestLoader().discover("./", "test*.py") ;

3 、以只写方式打开测试报告文件f = open("test01.txt", "w",encoding="utf-8");

4、实例化 HTMLTestRunner 对象:runner = unittest.TextTestRunner(stream=f,verbosity=2)

参数说明:stream 为 open 函数打开的文件流;verbosity 为不同模板编号

5、执行:runner.run(suite);

6、关闭文件;

import unittest 
suite = unittest.TestLoader().discover("./", "test*.py") 
f = open("test01.txt", "w", encoding="utf-8") 
runner = unittest.TextTestRunner(stream=f, verbosity=2) 
runner.run(suite) 
f.close() 

2、HTMLTestRunner

1、复制 HTMLTestRunner.py 文件到项目文件夹;

2、导入 HTMLTestRunner、unittest 包;

3、生成测试套件 suite = unittest.TestLoader().discover("./", "test*.py") ;

4、以只写方式打开测试报告文件 f = open("test01.html", "wb") ;

5、实例化 HTMLTestRunner 对象: runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器")

参数说明:stream:open 函数打开的文件流;title:[可选参数],为报告标题;description:[可选参数],为报告描述信息;比如操作系统、浏览器等版本;

6、执行:runner.run(suite);

7、关闭文件;

import unittest 
from HTMLTestRunner import HTMLTestRunner 
suite = unittest.TestLoader().discover("./", "test*.py") 
f = open("test01.html", "wb") 
runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器") 
runner.run(suite) 
f.close()

 

 

标签:框架,UnitTest,import,test,suite,my,unittest,def
来源: https://www.cnblogs.com/mtoy/p/16389908.html