测牛学堂:软件测试进阶之接口自动化测试基础:python封装接口测试数据驱动

116 阅读1分钟

接口对象封装之数据驱动

在实际接口测试中,测试的参数是通过json文件的方式给到的,所以我们要实现接口测试的数据驱动,也叫参数化。
使用python自带的unittest单元测试框架进行接口参数化测试时,因unittest不具备参数化测试,所以需要借助Parameterized第三库进行测试
Parameterized可以进行大量数据的测试,分离测试数据和测试脚本
一旦实现了参数化测试,那么后期调试测试用例时,可以不需要看代码,只需要修改测试数据即可。
安装包: pip install parameterized
实现思路: 1导包 from parameterized import parameterized
2在通用的测试方法上面添加 装饰器 @parameterized.expand()
3给expand()传入[(),(),()]格式的数据(这个是parameterized规定的格式,json不满足需要我们自己转化)
4修改测试方法,添加形参,个数,顺序,实现形参和实参一一对应
5 在测试方法中使用形参即可。

代码实现:

1 转化json格式数据

# 模拟josn数据
josn_data = [
    {
        "req_body": {"userName": "admin", "password": "a12345"},
        "message": "登录成功"
    }
]
# 转换格式
def  read_json_data():
    list_data = []
    for item in josn_data:
        list_data.append(tuple(item.values()))
    return list_data

2 使用parameterized实现参数化:

    # 测试 登录成功
    @parameterized.expand(read_json_data())
    def test01_login(self,req_body,message):
        url = 'testUrl'
        res = LoginApi.login(session=self.session, url=url, login_data=req_body)
        # 断言
        common_assert(self, res, message)

完整代码:

import unittest
from login import LoginApi

import requests
from parameterized import parameterized
# 模拟josn数据
josn_data = [
    {
        "req_body": {"userName": "admin", "password": "a12345"},
        "message": "登录成功"
    }
]
# 转换格式
def  read_json_data():
    list_data = []
    for item in josn_data:
        list_data.append(tuple(item.values()))
    return list_data

# 封装断言方法
def common_assert(self, res, msg):
    self.assertIn(msg, res.json().get('message'))


class TestLogin(unittest.TestCase):
    session = None

    @classmethod
    def setUpClass(cls) -> None:
        cls.session = requests.Session()

    # 测试 登录成功
    @parameterized.expand(read_json_data())
    def test01_login(self,req_body,message):
        url = 'testUrl'
        res = LoginApi.login(session=self.session, url=url, login_data=req_body)
        # 断言
        common_assert(self, res, message)