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(测试数据)

  • 运行(直接在TestCase使用右键执行、或使用suite运行)

下面是组织测试数据的3种方式

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 parameterized

data = [(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()

三、练习1

需求:

    将测试数据定义为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 parameterized

import 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))  
        #简单写法:new_list.append(tuple(data.values()))   
        #字典.values():可快速取到字典中所有的值
         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 TestAdd01

suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAdd01))
runner = unittest.TextTestRunner()
runner.run(suite)
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值