接口自动化:如何实现接口依赖(上一个接口的返回值是下一个接口的请求参数)?简单版

358 阅读1分钟

背景

需求:接口自动化:上一个接口的返回值是下一个接口的请求参数

接口关联实现步骤

  1. 在setup 或setUpClass 当中访问前置依赖接口(可访问一个或多个)
  2. 在test_测试函数中替换需要的数据
  • 在data_case获取请求数据
  • 并进行数据的预处理数据替换数据类型转换
  • json转成字典,因为request库需要字典格式的发送
  1. 通过request发送请求
  2. 进行多值断言

具体例子

充值接口的请求参数前置依赖登录接口获取token和member id

实现

1.excel中准备测试数据,需要替换的token和member id用#xx# 标记 图片.png

  1. 代码实现
import requests
import json
import pytest
from jsonpath import jsonpath
...

# 1.获取excel中的数据
data = read_excel(path_config.case_path , 'recharge')

# 测试数据
class TestRecharge(APICase):

    @classmethod
    def setup_class(cls) -> None:
        # 1.1访问登录接口,获取返回值
        resp_data = api.login()
        # 1.2从返回值当中提取member id:resp["data"]["id"]
        cls.member_id = jsonpath(resp_data, '$..id')[0]
        # 1.3从返回值当中提取数据:resp["data"]["token_info"]["token"]
        cls.token = jsonpath(resp_data, '$..token')[0]

    @classmethod
    def teardown_class(cls) -> None:
        pass

    @pytest.mark.parametrize('case_data',data)
    def test_recharge(self, case_data):
        # 2.1获取 case_data 当中的数据
        headers_string = case_data['headers']
        json_string = case_data['json']
        # 2.2数据的预处理:数据替换,
        if "#token#" in headers_string:
            headers_string = headers_string.replace("#token#", self.token)
        if "#member_id#" in json_string:
            json_string = json_string.replace("#member_id#", str(self.member_id))
        # 2.3数据转化成字典格式headers, json, expected
        headers = json.loads(headers_string)
        json_data = json.loads(json_string)
        expected = json.loads(case_data['expected'])
        # 3.发送充值请求
        resp = requests.request(
            method=case_data['method'],
            url=setting.host + case_data['url'],
            json=json_data,
            headers=headers
        )
        # 4.获取充值的返回值,进行断言
        json_response = resp.json()
        try:
            for key, value in expected.items():
                # key: code,  value: 0
                # key: msg, value :  ok
                self.assertEqual(value, json_response[key])
        except AssertionError as e:
            log.error(f"测试用例通过:{case_data}")
            raise e