通过json传递请求参数,如何处理动态参数和接口依赖

嗨,大家好,我是兰若姐姐,今天给大家讲一下如何通过json传递请求参数,如何处理动态参数和接口依赖

1. 使用配置文件和模板

在 test_data.json 中,你可以使用一些占位符或模板变量,然后在运行测试之前,通过代码生成具体的请求参数。比如:

test_data.json:

json 复制代码
{
    "Aapi": {
        "param1": "value1",
        "param2": "{Bapi_response_param}"
    }
}

在测试代码中,使用模板引擎(如 Jinja2)或字符串替换来生成最终的请求数据:

python 复制代码
import json
import requests

def get_data(template_path, context):
    with open(template_path, 'r') as file:
        template = file.read()
    return template.format(**context)

# Step 1: Call Bapi
response_b = requests.get('<http://example.com/bapi>')
b_data = response_b.json()

# Step 2: Prepare Aapi data using Bapi response
context = {
    "Bapi_response_param": b_data['desired_param']
}
a_data = get_data('test_data.json', context)

# Step 3: Call Aapi
response_a = requests.post('<http://example.com/aapi>', data=json.dumps(a_data))
print(response_a.json())

2. 写脚本处理参数依赖

在复杂情况下,可以直接在测试脚本中处理参数依赖:

python 复制代码
import requests

# Step 1: Call Bapi and get its response
response_b = requests.get('<http://example.com/bapi>')
b_data = response_b.json()
b_param = b_data['desired_param']

# Step 2: Use Bapi response data to prepare Aapi request
a_request_data = {
    "param1": "value1",
    "param2": b_param
}

# Step 3: Call Aapi
response_a = requests.post('<http://example.com/aapi>', json=a_request_data)
print(response_a.json())

3. 使用专用测试管理工具

有些测试框架或工具(例如 Postman, Karate, Robot Framework 等)提供了很好地处理依赖和动态数据的方法。这些工具通常允许你直接在测试步骤中引用变量和依赖的接口返回值。例如,在 Postman 中,你可以在一个请求中设置环境变量,然后在另一个请求中读取这些变量。

4. 封装为公共函数

将这些逻辑封装成公共函数,便于在多个测试用例间复用。例如:

python 复制代码
import requests

def call_bapi():
    response = requests.get('<http://example.com/bapi>')
    return response.json()

def call_aapi(b_param):
    data = {
        "param1": "value1",
        "param2": b_param
    }
    response = requests.post('<http://example.com/aapi>', json=data)
    return response.json()

# Usage
b_data = call_bapi()
a_response = call_aapi(b_data['desired_param'])
print(a_response)

5. 使用测试上下文或全局变量

如果测试大量依赖共享的状态,可以使用上下文或全局变量来存储并传递依赖数据。例如:

python 复制代码
class TestContext:
    def __init__(self):
        self.b_param = None

context = TestContext()

# Step 1: Get Bapi response and set context
response_b = requests.get('<http://example.com/bapi>')
context.b_param = response_b.json()['desired_param']

# Step 2: Use context in Aapi call
def call_aapi():
    data = {
        "param1": "value1",
        "param2": context.b_param
    }
    response = requests.post('<http://example.com/aapi>', json=data)
    return response.json()

# Run the test
a_response = call_aapi()
print(a_response)

总结

处理参数依赖和动态数据,需要结合实际情况选择合适的策略。通过使用模板、脚本处理、测试工具或者封装公共函数等方法,可以有效应对这些需求。希望这些方法对你有所帮助!

相关推荐
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003965 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
A黄俊辉A5 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技5 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时5 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++