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

pytest+requests+allure实现接口自动化测试系列(7)-数据提取并保存

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

接着上一篇分享

这次主要分享的是响应数据的提取和保存,在做接口测试的时候,我们肯定会遇到需要接口直接数据调用,比如A接口需要用到B接口响应的数据,但是我们需要做的是设计提取值的规则和保存下来。

先看之前测试数据设计结构

  - testCase:
      description: login success
      name: login
      method: post
      uri: /v3/api/user/phone_login
      headers:
        Content-Type: application/json
      payload:
        phone: "13528872802"
        password: "123456abc"
        callbackType: 0
      extract:
        token: $.data.token
      validate:
         - equal_to:
            $.code: 0
         - equal_to:
            $.code: 0
  - testCase:
      description: login fail
      name: login
      method: post
      uri: /v3/api/user/phone_login
      headers:
        Content-Type: application/json
      payload:
        phone: "1352887280xxxx"
        password: "123456abcaaaaa"
        callbackType: 0
      validate:
        - equal_to:
            $.code: 0
        - equal_to:
            $.code: 0

extract下面就是需要提取的值,token表示保存的变量名,$.data.token是要从响应的提取值的jsonpath的路径。我们提取和保存需要用到的值主要用到python的两个函数

setattr(obj,name,value)
getattr(obj,name)

setattr设置一个对象里面,getattr是从一个对象里面获取一个变量

首先新建一个文件envData.py,新建一个类

#!/usr/bin/python
# -*- coding: utf-8 -*-
class EnvData:
    pass
    
 # 不用实现

我们在新建一个utils.py 文件

#!/usr/bin/python
# -*- coding: utf-8 -*-

from common.envData import EnvData
import jsonpath


class Utils:

    @staticmethod
    def extract(extract_dict: dict, response):
        """

        :param extract_dict: 需要提取值的字典
        :param response 返回的响应
        :return:
        """
        for key, val in extract_dict.items():
            value = jsonpath.jsonpath(response, val)[0]  # 提取回来的是list格式,取第一个值
            setattr(EnvData, key, str(value))  # 把值设置保存到EnvData类作为类变量

    @staticmethod
    def get_env_value(name):
        """
        
        :param name: 变量名
        :return: 返回值
        """
        return getattr(EnvData, name, None) #提取值并返回

写好了,我们实验下,是否能够保存和取出来,示例代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
from common.request_handler import request_handler
from common.utils import Utils

method = 'post'
url = 'https://api2.mubu.com/v3/api/user/phone_login'
headers = {'Content-Type': "application/json"}
payload = {
    "phone": "13528872802",
    "password": "Aa12345678",
    "callbackType": 0
}
r = request_handler(method, url, headers, payload)
extract_dict = {
    "token": "$.data.token"
}
Utils.extract(extract_dict, r) #  设置值
token = Utils.get_env_value('token') # 提取值
print(token)

我们可以看到token的值已经被正确的设置到EnvData这个类,也从EnvData中正确获取到token的值。

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

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

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

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

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