所在位置:首页 → 软件测试 → 测试框架 → 3.unitest 参数化(数据驱动)

3.unitest 参数化(数据驱动)

发布: 更新时间:2022-08-20 22:50:22

通过参数的方式来传递数据,从而实现数据和脚本分离。并且可以实现用例的重复执行。(在书写用例方法的时候,测试数据使用变量代替,在执行的时候进行数据传递)

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

什么是数据驱动?

执行测试用例的过程,本质上是执行的不同数据,不同输入输出的过程。所以,在计算机中,我们可以使用预先设定好的数据文件,来执行测试用例,实现覆盖测试点。

参数化引入案例

参数化实现

项目代码中路径

import os

# __file__ 特殊的变量,表示当前代码文件名
# path1 = os.path.abspath(__file__)   当前文件的绝对路径
# path2 = os.path.dirname(path1)      当前文件的目录路径
# BASE_DIR = os.path.dirname(os.path.abspath(__file__))

BASE_DIR = os.path.dirname(__file__)

if __name__ == '__main__':
    print(BASE_DIR)

案例

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

json 文件:data/add_data_1.json

[
  {
    "a": 1,
    "b": 2,
    "expect": 3
  },
  {
    "a": 11,
    "b": 22,
    "expect": 33
  },
  {
    "a": 12,
    "b": 23,
    "expect": 35
  },
  {
    "a": 14,
    "b": 25,
    "expect": 39
  }
]

读取json文件:common/read_data.py

def build_add_data_2():
    with open(BASE_DIR + '/data/add_data_1.json') as f:
        data_list = json.load(f)  # [{}, {}, {}]  ----> [(), ()]

        new_list = []
        for data in data_list:  # data 字典
            # 字典中的值,是否都需要
            new_list.append(tuple(data.values()))

        return new_list

代码文件

import unittest
from common.read_data import build_add_data_2   #数据来源
from tools import add     #被测试代码
from parameterized import parameterized    #参数化库

class TestAdd(unittest.TestCase):
    @parameterized.expand(build_add_data_2())
    def test_add(self, a, b, expect):
        print(f'a:{a}, b:{b}, expect:{expect}')
        self.assertEqual(expect, add(a, b))

if __name__ == '__main__':
    unittest.main()
标签:,
文章排行