接着上一篇分享
我们做接口测试的时候,肯定会遇到接口间数据依赖的问题,就是上一次接口的数据,是下一个接口的请求参数,最常见的是登录时,token是每个接口都需要传递的参数
下面的是两个接口的的数据,使用过jmeter的同学应该知道jmeter变量引用的方式是{变量名},我参照jmeter的用法,也是通过{变量名}进行变量引用
代码语言:javascript复制 - testCase:
description: login success
name: login
method: post
uri: "https://api2.mubu.com/v3/api/user/phone_login"
headers:
Content-Type: application/json
payload:
phone: "13528872dsds"
password: "Aa12345678"
callbackType: 0
extract:
token: $.data.token
validate:
- equal_to:
$.code: 0
- equal_to:
$.code: 0
- testCase:
description: profile
name: profile
method: post
uri: "https://api2.mubu.com/v3/api/user/profile"
headers:
Content-Type: application/json
jwt-token: ${token}
payload: {}
validate:
- equal_to:
$.code: 0
- equal_to:
$.code: 0
如何实现?
需要两个步骤
1.读取数据时,先找出所有符合${变量名}格式的字符
2.从EnvData获取对应变量名的值替换对应的字符串
在utils.py新增函数handle_request_data,代码如下:
代码语言:javascript复制 @staticmethod
def handle_request_data(request_data: dict):
"""
:param request_data: 请求的数据
:return: 返回替换后的request_data
"""
request_data = json.dumps(request_data)
regex = r"${. ?}"
regex_obj = re.compile(regex)
replace_values = regex_obj.findall(request_data)
for val in replace_values:
key = val[2:-1] # 截取变量名
request_data = request_data.replace(val, getattr(EnvData, key))
return json.loads(request_data)
实验下,编写的函数是否起作用,我们修改下测试用例,示例代码如下:
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
from common.request_handler import request_handler
from common.yamlRead import read_yaml
from common.logger import logger
from common.utils import Utils
class Testrequests:
@pytest.mark.parametrize('test_data', read_yaml('../testData/login.yml'))
def test_requests(self, test_data):
request_data = test_data['testCase']
request_data = Utils.handle_request_data(request_data)
method = request_data['method']
headers = request_data['headers']
url = request_data['uri']
data = request_data['payload']
logger.debug(request_data)
response = request_handler(method, url, headers, data)
if 'extract' in request_data:
Utils.extract(request_data['extract'], response)
执行测试用例,查看第一个用例的请求数据是否带上第一个接口的token
执行结果,可以看到第一个接口的请求数据jwt-token已经被替换成token的值啦!