写点什么

技术分享 | 实战详解接口测试请求方式 Get、post

  • 2022-10-12
    北京
  • 本文字数:1485 字

    阅读完需:约 5 分钟

本文节选自霍格沃兹测试开发学社内部教材


在日常的工作当中,http 请求中使用最多的就是 GET 和 POST 这两种请求方式。那么掌握这两种请求方式的原理,以及两种请求方式的异同,也是之后做接口测试一个重要基础。


GET、POST 的区别总结 1、请求方法不同


2、post 可以附加 body,可以支持 form、json、xml、binary 等各种数据格式


3、从行业通用规范的角度来说,如果对数据库不会产生数据变化的,比如查询操作,建议使用 GET 请求,数据的写入与状态建议用 POST 请求


演示环境搭建为了避免其他因素的干扰,使用 flask 编写一个简单的 demo server。


1、安装 flask


pip install flask


创建一个 hello.py 文件 from flask import Flask, request


app = Flask(name)


@app.route('/')def hello_world():return 'Hello, World!'


@app.route("/request", methods=['POST', 'GET'])def hellp():#拿到 request 参数 query = request.args#拿到 request formpost = request.form#分别打印拿到的参数和 formreturn f"query: {query}\n"


f"post: {post}"


启动服务 export FLASK_APP=hello.pyflask run


提示下面信息则表示搭建成功


  • Serving Flask app "hello.py"

  • Environment: productionWARNING: Do not use the development server in a production environment.Use a production WSGI server instead.

  • Debug mode: off

  • Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)


cURL 命令发起 GET、POST 请求发起 GET 请求,a、b 参数放入 URL 中发送,并保存在 get 文件中


curl 'http://127.0.0.1:5000/request?a=1&b=2' -v -s &>get


发起 POST 请求,a、b 参数以 form-data 格式发送,并保存在 post 文件中


curl 'http://127.0.0.1:5000/request?' -d "a=1&b=2" -v -s &>post


GET、POST 请求对比注意:>的右边为请求内容,<右边为响应内容


GET 请求过程


  • Trying 127.0.0.1...

  • TCP_NODELAY set

  • Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)


GET /request?a=1&b=2 HTTP/1.1Host: 127.0.0.1:5000User-Agent: curl/7.64.1Accept: /


  • HTTP 1.0, assume close after body< HTTP/1.0 200 OK< Content-Type: text/html; charset=utf-8< Content-Length: 80< Server: Werkzeug/0.14.1 Python/3.7.5< Date: Wed, 01 Apr 2020 07:35:42 GMT<{ [80 bytes data]

  • Closing connection 0query: ImmutableMultiDict([('a', '1'), ('b', '2')])post: ImmutableMultiDict([])


POST 请求过程


  • Trying 127.0.0.1...

  • TCP_NODELAY set

  • Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)


POST /request?a=1&b=2 HTTP/1.1Host: 127.0.0.1:5000User-Agent: curl/7.64.1Accept: /Content-Length: 7Content-Type: application/x-www-form-urlencoded


} [7 bytes data]


  • upload completely sent off: 7 out of 7 bytes

  • HTTP 1.0, assume close after body< HTTP/1.0 200 OK< Content-Type: text/html; charset=utf-8< Content-Length: 102< Server: Werkzeug/0.14.1 Python/3.7.5< Date: Wed, 01 Apr 2020 08:15:08 GMT<{ [102 bytes data]

  • Closing connection 0query: ImmutableMultiDict([('a', '1'), ('b', '2')])post: ImmutableMultiDict([('c', '3'), ('d', '4')])


对两个文件进行对比:


从图中可以清楚看到 GET 请求的 method 为 GET,POST 请求的 method 为 POST,此外,GET 请求没有 Content-Type 以及 Content-Length 这两个字段,而请求行中的 URL 带有 query 参数是两种请求都允许的格式。


点击下方链接免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/22265

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
技术分享 | 实战详解接口测试请求方式Get、post_霍格沃兹测试开发学社_InfoQ写作社区