ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UnitTest 框架

2022-06-19 09:33:45  阅读:181  来源: 互联网

标签:框架 UnitTest import test suite my unittest def


一、要素

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有