python+pytest接口自动化(6)-请求参数格式的确定
- 2022 年 3 月 10 日
- 筆記
- Python+Pytest接口自动化, 接口自动化
我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json,那么在请求该接口时,请求参数格式必须是 json 格式,使用其他的编码方式请求不会成功。
那么,在http请求中,请求主体常用的编码方式有哪些?每种编码方式在python中需要对应使用什么样格式的请求参数?这便是咱们在本篇博客要弄明白的地方。
content-type
为了搞清楚请求参数的编码格式,我们有必要了解HTTP请求头信息中的 content-type 字段。
content-type的作用
由[]我们已经知道,在HTTP协议中,报文通常包括两个部分 请求头部(head)、请求主体(body),其中 body 可以为空,如 GET 请求是将请求参数放在请求URL中而不是放在 body 中。
而POST请求中的请求参数则是放在 body 中,接收请求的一端(也就是服务器)需要知道传过来的 body 是什么类型的数据,采用怎样的编码方式,才能对数据进行对应的解析,这时就需要在请求头中使用 content-type 来指明 body 的媒体类型。
媒体类型
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。
浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理URL,因此Web服务器在响应头中添加正确的MIME类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。而浏览器传过来的内容也需要指定媒体类型,服务器才能根据媒体类型做对应的数据解析。
常见的媒体类型如下:
另外还有 multipart 类型,表示细分领域的文件类型的种类,经常对应不同的 MIME 类型,用于文件的上传,分为如下两种:
multipart/form-data
multipart/byteranges
这里均只做简单说明,具体每种类型的使用详情可自行查找相关资料。
总之,在接口测试中,请求头中的 Content-Type 作用就是,用来告知服务端请求body的编码方式。GET请求因为body为空,所以在GET请求中没有Content-Type字段。
get请求参数格式
我们已经知道GET请求的请求参数是直接放在URL中的,且不需要content-type指定媒体类型。而GET请求中的请求参数的编码格式为query string params。
query string params
说明
query string params 格式,参数会以 url string 的形式进行传递,即?
后的字符串则为其请求参数,并以&
作为分隔符,参数编写方式为?key=value&key=value
,拼接在 url 后面。通常用于GET请求,除此之外其他有些请求方式也可以使用这种格式。
在浏览器中打开百度,搜索给你一页白纸-博客园
,通过F12抓包也可以看到 Payload 中请求参数的格式为 Query String Parameters,如下图:
即打开URL链接//www.baidu.com/s?ie=utf-8&wd=给你一页白纸-博客园
。
python代码发送请求
如果使用python中的 requests.get() 对上图示例发送get请求,则需使用参数 params,参数值为 dict (字典) 格式即可,示例如下:
import requests
url = "//www.baidu.com/s"
params = {"wd": "给你一页白纸-博客园", "ie": "utf-8"}
res = requests.get(url=url, params=params)
print(res.text)
GET请求中请求主体编码格式固定,在做接口测试时基本无需确定其编码格式,较为简单。
post请求参数格式
由上一篇文章发送post请求,我们知道HTTP协议中的POST请求,其请求参数有不同的编码格式。
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对请求参数进行对应方式的解析。
post请求常见的编码方式有四种:
-
application/x-www-form-urlencoded
-
multipart/form-data
-
application/json
-
text/xml
application/x-www-form-urlencoded
application/x-www-form-urlencoded 是最常见的 POST 提交数据的方式,用于表单数据的提交。浏览器的原生