参数化
1、为什么要参数化
解决冗余代码问题
2、什么是参数化
说明:根据需求,动态获取参数
3、参数化应用场景
场景:解决相同业务逻辑,不同测试数据问题。实现:通过安装unittest扩展插件parameterized来实现
步骤:
1、导包:from parameterized import parameterized
2、修饰测试函数 @parameterized.expand(列表类型数据)
3、在测试函 数中使用变量接收,传递过来的值
语法:
1、单个参数:值为列表[1,2,3]
2、多个参数:值为列表嵌套元祖 如:[(1,2,3),(2,3,4)]
3、在测试函数中的参数设置变量应用参数值,注意:变量数量必须和数据值的个数相同
参数化函数执行代码:
data包下data.py文件代码
def get_data():
return [(1,2,3),(2,3,5),(3,4,7),(4,5,9)]
TestCase包下TestCase.py文件下代码:
# 导包
import unittest
from parameterized import parameterized
# 创建要测试的函数
from data.data import get_data
def add_data(x,y):
return x + y
# 创建测试类
class TestAdd(unittest.TestCase):
# 创建测试函数
# 使用参数化标记
@parameterized.expand(get_data())
def testAdd(self,x,y,expant):
result = add_data(x,y)
self.assertEqual(result,expant)
print(result)
执行结果:
Ran 4 tests in 0.011s
OK
3
5
7
9
Process finished with exit code 0
跳过用例
1、直接将测试函数标记成挑过(直接跳过)
@unittest.skip(’说明’)
场景:一般适合功能为实现完成用例
执行代码:
# 导包
import unittest
from parameterized import parameterized
# 创建要测试的函数
from data.data import get_data
def add_data(x,y):
return x + y
# 创建测试类
class TestAdd(unittest.TestCase):
# 创建测试函数
# 使用参数化标记
@parameterized.expand(get_data())
def testAdd01(self,x,y,expant):
result = add_data(x,y)
self.assertEqual(result,expant)
print(result)
@unittest.skip("此功能下个版本上线")
def testAdd02(self):
"""
此功能下个版本上线
"""
pass
执行结果:
3
5
7
9
Skipped: 此功能下个版本上线
Ran 5 tests in 0.012s
OK (skipped=1)
2、根据条件判断测试函数是否跳过(条件满足跳过)
@unittest.skipIf(条件, ‘原因’)
场景:一般判断条件满足,就不执行;如:达到制定版本,此功能失效
执行代码:
# 导包
import unittest
from parameterized import parameterized
# 创建要测试的函数
from data.data import get_data
VERSION = 30
def add_data(x,y):
return x + y
# 创建测试类
class TestAdd(unittest.TestCase):
# 创建测试函数
# 使用参数化标记
@parameterized.expand(get_data())
def testAdd01(self,x,y,expant):
result = add_data(x,y)
self.assertEqual(result,expant)
print(result)
@unittest.skip("此功能下个版本上线")
def testAdd02(self):
"""
此功能下个版本上线
"""
pass
@unittest.skipIf(VERSION > 25 , "此功能已失效")
def testAdd02(self):
"""
此功能已失效
"""
print("testAdd02")
执行结果:
3
5
7
9
Skipped: 此功能已失效
Ran 5 tests in 0.006s
OK (skipped=1)
提示:
两种方式都可以修饰方法,也可以修饰测试类
生成HTML测试报告(掌握)
HTML报告:根据TextTestRunner改编而来
操作:
1、导包
2、定义测试套件
3、实例化HTMLTestRunner类,并调用run方法执行测试套件
步骤:
1、复制HtmlTestRunner.py文件到指定目录
2、导包:from HTMLTestRunner import HTMLTestRunner
3、获取报告存放文件流,并实例化HTMLTestRunner类
suite = unittest.defaultTestLoader.discover(“./”,pattern = “test02*.py”)
4、执行run方法
with open (“../erport/report.html”,”wb”) as f:#注意:生成html报告,必须使用wb,以二进制形式写入
HTMLTestRunner(stream = f).run(suite)
执行代码和文件结构:
import time
from tool.HTMLTestRunner import HTMLTestRunner
import unittest
# 执行测试套件
suite = unittest.defaultTestLoader.discover("./TestCase",pattern="test*.py")
# 写入问文件,并执行,生成html报告
with open("./report/{}.html".format(time.strftime('%Y_%m_%d_%H_%M_%S')),"wb") as f:
# 实例化 HTMLTestRunner类,并执行
HTMLTestRunner(stream=f,verbosity= 2,title="XX项目测试报告",description="操作系统:Linux").run(suite)
执行结果:
ok testAdd01_0 (testcase.TestAdd)
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
ok testAdd01_1 (testcase.TestAdd)
TimeElapsed: 0:00:00
ok testAdd01_2 (testcase.TestAdd)
ok testAdd01_3 (testcase.TestAdd)
生成报告示例:
open 与with open(极力推荐)区别:
1、共同点:打开文件
2、不同点:with open = 执行打开操作 + 关闭操作
作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。