求指教pytest+yaml接口自动化参数提取并替换参数问题:
如图所示,接口返回的json数据是多层嵌套
图片中的参数已经提取成功,在下个接口中进行替换时不知该如何使用这个参数
提取表达式:$.data.settlementData[0].settlementDetailWorkIds[0],可以成功提取到参数
在使用的时候如何替换
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您的描述,提取表达式 $.data.settlementData[0].settlementDetailWorkIds[0] 已经成功提取了 settlementDetailWorkIds 的值,该值为 132。
接下来,在接口请求中使用该值进行参数替换,可以按照以下步骤进行:
1.在 Pytest 测试用例中,先使用 PyYAML 库读取 YAML 文件中的参数,并将提取的值添加到参数池中,例如:
import yaml
def test_my_api():
with open("data.yaml", "r") as f:
data = yaml.safe_load(f)
extracted_value = 132
data["detailworkIds"] = extracted_value
# 将提取的值添加到参数池中
# 发送接口请求并进行断言
2.在接口请求的数据部分,使用字符串格式化或 f-string 等方式,将参数池中的值进行替换,例如:
import requests
def test_my_api():
with open("data.yaml", "r") as f:
data = yaml.safe_load(f)
extracted_value = 132
data["detailworkIds"] = extracted_value
response = requests.post(
url="http://example.com/my_api",
json={
"mobile": data["mobile"],
"settlementData": {
"settlementDetailId": data["detailId"],
"settlementDetailWorkIds": [data["detailworkIds"]],
"settlementDetailIds": data["detailIds"],
"settlementId": data["settlementId"],
"smsCode": data["smsCode"]
}
}
)
assert response.status_code == 200
在上述代码中,使用 data["detailworkIds"] 来代表提取的值,将它添加到请求数据的 settlementDetailWorkIds 字段中,这样就完成了参数的替换。
希望这些代码可以帮助您解决问题!
您好,pytest和yaml结合进行接口自动化测试是一个不错的选择,可以帮助您提高测试效率和可维护性。关于参数提取并替换参数的问题,可以通过以下步骤来实现:
在yaml文件中定义接口的请求参数和预期结果,如下所示:
yaml
Copy code
# 请求参数
request:
url: https://api.example.com/user
method: POST
headers:
Content-Type: application/json
body:
name: test
age: 18
# 预期结果
expected_response:
status_code: 200
body:
message: success
data:
name: test
age: 18
在pytest中编写测试用例,使用PyYAML库读取yaml文件中的请求参数和预期结果,如下所示:
python
Copy code
import yaml
def test_user():
with open("user.yaml", encoding="utf-8") as f:
data = yaml.safe_load(f)
# 发送请求
response = requests.request(**data["request"])
# 验证响应结果
assert response.status_code == data["expected_response"]["status_code"]
assert response.json() == data["expected_response"]["body"]
如果需要替换参数,可以在yaml文件中使用占位符,如下所示:
yaml
Copy code
# 请求参数
request:
url: https://api.example.com/user/${user_id}
method: POST
headers:
Content-Type: application/json
body:
name: ${user_name}
age: ${user_age}
# 预期结果
expected_response:
status_code: 200
body:
message: success
data:
name: ${user_name}
age: ${user_age}
在pytest中,可以使用pytest的fixture机制和pytest的config对象来动态替换占位符,如下所示:
python
Copy code
@pytest.fixture(params=[{"user_id": "1", "user_name": "test1", "user_age": 18},
{"user_id": "2", "user_name": "test2", "user_age": 20}])
def user_info(request):
return request.param
def test_user(user_info, config):
with open("user.yaml", encoding="utf-8") as f:
data = yaml.safe_load(f)
# 替换占位符
data["request"]["url"] = data["request"]["url"].format(**user_info)
data["request"]["body"]["name"] = data["request"]["body"]["name"].format(**user_info)
data["request"]["body"]["age"] = data["request"]["body"]["age"].format(**user_info)
data["expected_response"]["body"]["name"] = data["expected_response"]["body"]["name"].format(**user_info)
data["expected_response"]["body"]["age"] = data["expected_response"]["body"]["age"].format(**user_info)
# 发送请求
response = requests.request(**data["request"])
# 验证响应结果
assert response.status_code == data["expected_response"]["status_code"]
assert response.json() == data["expected_response"]["body"]
在上述代码中,使用pytest