技术分享 | 实战详解接口测试请求方式Get、post
  ISys3q4KoMNl 2023年11月02日 31 0

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



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


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


## GET、POST的区别总结


1、请求方法不同


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


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


4、


## 演示环境搭建


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


1、安装 flask


```

pip install flask

```




  2. 创建一个 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 form

    post = request.form

    #分别打印拿到的参数和form

    return f"query: {query}\n"\

           f"post: {post}"

```




3. 启动服务


```

export FLASK_APP=hello.py

flask run

```




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


```

 * Serving Flask app "hello.py"

 * Environment: production

   WARNING: 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 请求过程


```

*   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.1

> Host: 127.0.0.1:5000

> User-Agent: curl/7.64.1

> Accept: */*

>

* 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 0

query: 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.1

> Host: 127.0.0.1:5000

> User-Agent: curl/7.64.1

> Accept: */*

> Content-Length: 7

> Content-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 0

query: ImmutableMultiDict([('a', '1'), ('b', '2')])

post: ImmutableMultiDict([('c', '3'), ('d', '4')])

```




对两个文件进行对比:


![](https://ceshiren.com/uploads/default/original/3X/3/4/34c86fda9f2acbf2d2f564b68fd8796b3fe64243.png)


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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  1BVmdlLr07sm   2023年11月30日   63   0   0 HTMLcss
ISys3q4KoMNl
最新推荐 更多