前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest+requests+allure实现接口自动化测试系列(8)-接口之间的数据依赖

pytest+requests+allure实现接口自动化测试系列(8)-接口之间的数据依赖

作者头像
搁浅同学
发布2022-07-21 15:01:59
9560
发布2022-07-21 15:01:59
举报

接着上一篇分享

我们做接口测试的时候,肯定会遇到接口间数据依赖的问题,就是上一次接口的数据,是下一个接口的请求参数,最常见的是登录时,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的值啦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 暴走的软件测试Tester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档