当前位置: 首页 > news >正文

36 UnitTest框架 - 参数化

目录

一、参数化环境准备

1、方式一:在终端(cmd)安装parameterized

2、方式二:在Pycharm中安装parameterized

二、参数化

1、什么事参数化?

2、参数化引入案例

(1)需求

(2)代码实现

(3)发现问题

3、参数化的作用

4、参数化的使用方式

5、案例:参数化+断言实现测试多组数据

三、练习


一、参数化环境准备

  • unittest测试框架,本身不支持参数化,但是可以通过安装unittest扩展插件parameterized来实现参数化

  • Python中插件(包/模块)的安装,使用pip工具,PIP是一个python包管理工具,提供了对python包的查找、下载、安装、卸载等功能

1、方式一:在终端(cmd)安装parameterized

  • 安装命令:pip install parameterized

  • 通过pip list查看python中的所有包,包含parameterized即说明安装成功;或通过File->Setting->Project:pythonproject->Python Interpreter查看parameterized是否安装成功;或直接在文件中导parameterized查看是否安装成功(有时需重启Pycharm才能导包)

2、方式二:在Pycharm中安装parameterized

二、参数化

1、什么事参数化?

  • 将测试数据定义到json文件使用

  • 写在用例脚本中

2、参数化引入案例

(1)需求

  • 定义一个实现加法操作的函数,并对该函数进行测试

  • 要求对多组测试数据进行测试

(2)代码实现

(3)发现问题

  • 一条测试数据就需要定义一个测试函数,代码冗余度太高

  • 如果一个测试函数中测试多条数据,最终只会有一个测试结果

3、参数化的作用

  • 通过参数的方式来传递测试数据,从而实现测试数据和用例脚本分离,并实现用例的重复执行

  • 其实就是在书写用例方法时,用变量代替测试数据,在执行时再将测试数据传递给变量

4、参数化的使用方式

  • 导包 ---> from parameterized import parameterizd

  • 使用@parameterized.expand装饰器为测试方法中的参数进行参数化

5、案例:参数化+断言实现测试多组数据

# add.py中定义的add函数
def add(x,y):return x+y
'''
1、导包
2、将测试方法中的测试数据用变量表示
3、组织测试数据,格式[(),(),()],一个元组就是一组测试数据
4、参数化,在测试方法上用装饰器@parameterized。expand(测试数据)
5、运行(直接在测试类或测试方法上运行,使用suite运行,使用unittest.main运行)
'''import unittest
from unittest_csh.add import add
from parameterized import parameterizeddata = [(1, 0, 1), (2, 0, 2), (3, 0, 4)]class TestAdd(unittest.TestCase):@parameterized.expand(data)def test_add01(self, x, y, expected):print('x={} y={} expected={}'.format(x, y, expected))result = add(x, y)self.assertEqual(result, expected)if __name__ == '__main__':unittest.main()

三、练习

需求:

    将测试数据定义为json文件,读取json文件,完成参数化

实现思路:

    从json文件中读取数据,通过参数化的方式传到用例方法中,实现一个用例测试多组数        据,通过suite执行用例

  • 定义add函数
# 定义在add.py文件中的函数
def add(x,y):return x+y
  • 定义json文件
[{"x": 1,"y": 0,"expected": 1},{"x": 2,"y": 0,"expected": 2},{"x": 3,"y": 0,"expected": 4}
]
  • 读取json文件,编写测试用例
import unittest
from unittest_csh.add import add
from parameterized import parameterizedimport json
# 读取json文件中的测试数据
def data_link():with open('add_data.json',encoding='utf-8') as f:data_list = json.load(f)#print(type(data_list)) #<class 'list'>#print(data_list) #[{'x': 1, 'y': 0, 'expected': 1},{}]new_list = []for data in data_list:   #data 字典x = data.get('x')y = data.get('y')expect = data.get('expect')new_list.append((x,y,expect))return new_list   # new_list = [(1,0,1),(),()]class TestAdd01(unittest.TestCase):@parameterized.expand(data_link())def test_add001(self,x,y,expect):result = add(x,y)print('x={} y={} expected={}'.format(x,y,expect))self.assertEqual(expect,result)
  • 执行测试用例
import unittest
from unittest_csh.addtest_adddata import TestAdd01suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAdd01))
runner = unittest.TextTestRunner()
runner.run(suite)
http://www.lryc.cn/news/44073.html

相关文章:

  • Qt源码阅读(四) 事件循环
  • 银行数字化转型导师坚鹏:银行数字化领导力提升之道
  • Vue2 -- 自定义单选内容的单选框组件
  • 让PyTorch训练速度更快,你需要掌握这17种方法
  • LeetCode-309. 最佳买卖股票时机含冷冻期
  • AUTOSAR知识点Com(七):CANSM初认知
  • 递归:斐波那契数列、递归实现指数型枚举、递归实现排列型枚举
  • oracle模糊查询时字段内容包含下划线的解决办法
  • C++:explicit关键字
  • 【C5】bmc wtd,post
  • 200.Spark(七):SparkSQL项目实战
  • 区块链系统:挖矿原理
  • 【博弈】【清华冬令营2018模拟】取石子
  • 嵌入式:BSP的理解
  • Linux主机Tcpdump使用-centos实例
  • 线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
  • SpringMVC
  • C++模板基础(二)
  • 什么是linux内核态、用户态?
  • day8—选择题
  • ngx错误日志error_log配置
  • 1.11、自动化
  • 函数的定义与使用及七段数码管绘制
  • 怎么压缩pdf文件大小?pdf文件太大如何压缩?
  • 阿里云Linux服务器登录名ecs-user和root选择问题
  • 【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦
  • Oracle用户密码过期,修改永不过期
  • welearn 视听说1-4
  • 【git】将本地项目同步到远程
  • 10-链表练习-LeetCode82删除排序链表中的重复元素II