接口测试 利用 python 写接口自动化 post 和 get 方法请求 body 处理

东东 · 2018年05月22日 · 最后由 edsion 回复于 2018年05月24日 · 4044 次阅读
  • 使用 python 写接口自动化,Http 请求方式有 OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法,本次主要对比 post 和 get 方法,两者请求 body 格式有差异,了解了一下大概区别和处理方式,如果分析有问题欢迎大家指正,首先 post 和 get 请求所使用有所不同:
  • Http get 方法: 主要用于向指定的 URL(URI)请求资源(资源文件或是数据均可), 可以带参数也可以不带参数, 带参数时,参数是明文传递,你可以在浏览器的地址栏中看到参数名及参数值,get 安全性不高,所以常用于安全性要求低的场合, 比如登录后请求数据。
  • Http post 方法:主要是向指定的 URL(URI)提交数据, 通常用于表单发送,psot 所传递的数据或参数不是以明文形式存在的,而是封装后的,因此相对安全系数高,像注册、登录、提交表单都是用该方法实现的。 post 请求 content-type 类型是:Content-Type:application/x-www-form-urlencoded 对应的请求参数形式为 Form Data:

  • Reqeusts 支持以 form 表单形式发送 post 请求,只需要将请求的参数构造成一个字典,然后传给 requests.post() 的 data 参数即可。
@request(url = config.TALARIS_URL + '/head/team/config/change_team',method='post',data_type='form')
def test_head_change_team(self,team_id):
    """
    切换团队
    """
    body = {
        'team_id': team_id
    }

  • post 请求 content-type 类型是:Content-Type:application/json 对应的请求参数形式为 request payload:

  • Reqeusts 支持以 request payload 形式发送 post 请求,application/json 格式的请求头是指用来告诉服务端 post 过去的消息主体是序列化后的 JSON 字符串。使用 python 写接口自动化定义接口时需要使用json.dumps()将 dict 类型的数据转成 str,因为如果直接将 dict 类型的数据写入 json 文件中会发生报错

@request(url = config.STARGATE_URL + '/head_api/process',data_type='form',method='post')
def test_head_process(self, dealRemark, headApplyId, reassignedTakerId, status, teamId, trackingId):
    """
    申请异常流程
    :param dealRemark:
    :param headApplyId:
    :param reassignedTakerId:
    :param status:
    :param teamId:
    :param trackingId:
    :return:
    """

    params= {
        'dealRemark': dealRemark,
        'headApplyId': headApplyId,
        'reassignedTakerId': reassignedTakerId,
        'status': status,
        'teamId': teamId,
        'trackingId': trackingId
    }
    body = json.dumps(params)
  • get 请求的时候对应的请求参数形式为 Query String Parameters,我们的参数直接反映在 url 里面,形式为 key1=value1&key2=value2 形式;
    例如:https://*****/taker_order_count?team_id=100

  • 使用 python 写 get 请求,支持直接使用使用 params 关键字,以一个字典来传递这些参数,例如:

@request(url = config.TALARIS_URL + '/web/subgroup/update_status',method='get',data_type='form')
def test_group_status(self,groupId,status):
    """
    更新分组状态
    :param groupId:
    :param status:
    :return:
    """
    params = {
        'groupId': groupId,
        'status': status
    }
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

psot 所传递的数据或参数不是已明文形式存在的,而是封装后的,因此相对安全系数高

  • 想看下装饰器是怎么写的
  • requests.post 有个 json 型参,可以直接传 dict;
edsion 回复

post 传的数据也是明文呀。除非自己自定义加密或者用 https 。

  • request 装饰器这思路赞一个。
  • 建议多看看 requests 的源码。
陈恒捷 回复

我写的是我想喷的点,后来想想算了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册