一、Post请求

1、使用python发送一个Post请求

有时候遇到请求url中有很多参数。

1.1 示例1

accounts和pwd请到http://shop-xo.hctestedu.com/注册。

执行结果:

1.2 示例2

使用不定长参数 params,将url中需要的参数单独封装。

执行结果:

二、获取Response body

1、response.text

用type()查看response.text的类型,是str

执行结果:

2、response.json()

用type()查看response.json()的类型,是dict

执行结果:

三、获取响应状态码:res.status_code

执行结果:

更多状态码:

四、获取响应cookies:res.cookies

执行结果:

五、获取响应headers:res.headers

执行结果:

六、获取响应结果原始内容:res.content

content,没有经过编译的,以字节的形式展示。而上述提到的text是编译过的。自动找到请求头中的编码格式,进行解析。

执行结果:

content还支持手动的编码,例如使用utf-8编码,编码后的是str类型,json本质是一种字符串类型

执行结果:

七、获取响应结果:最原生的状态,对象在内存中的地址:res.raw

执行结果:

八、解析响应数据

响应数据如下:

通常我们获取响应数据后,是需要进行结果验证的。例如,我想从登录接口的响应中拿到token,供后面的接口请求鉴权使用。

1、字典方式解析及其缺点

上面已经讲到,可以使用response.json()方法拿到一个字典。既然是字典,就可以用处理字典的方式来获取某个字段的值。

执行结果:

字典解析的缺点:如果接口数据异常,响应体缺少某个字段,就会发生keyerror,导致程序异常。

执行结果:

2、Jsonpath表达式解析及其优点

上面的响应body结构比较简单,如果我们要解析特别复杂的响应体,通过字典方式就很复杂。这个时候更推荐jsonpath。需要引入jsonpath库。

执行结果:

通过结果来看,获取到的token是只有一个元素的列表。我们要想拿到token通过下标访问。
修改上述代码:

执行结果:

Jsonpath表达式解析的优点如果响应体缺少某个字段,通过Jsonpath表达式解析不到结果,就会返回False,永远不会发生异常。我们可根据返回结果进行后续处理。

执行结果:

3、如何知道自己写的jsonpath表达式是否正确呢?

jsonpath在线校验工具:http://jsonpath.com/
将response粘贴在Inputs区域,在JSONPath区域输入表达式,在Evaluation Results区域查看是否解析到期望的值。当解析不到值时,返回的是空列表(No match)
Python发送Post请求及解析响应结果jsonpath表达式语法
Python发送Post请求及解析响应结果

九、获取请求的信息

执行结果:

十、json=data 和 data=data 参数区别

接口电商项目后台代码(PHP)中,json=data以及data=data这2种参数类型都可以接收。在实际项目应用中,常见的报文格式是application/json。因此最常使用的是json=data

1、json=data

请求头默认为:Content-Type=application/json

执行结果:

2、data=data

请求头默认为:application/x-www-form-urlencoded

执行结果:

3、设置请求头

如果是java项目,spring会将请求实体的内容自动转换为Bean,但前提是请求的Content-Type必须设置为application/json

在请求头中定义发送报文的格式

1、Content-Type: application/json

执行结果:

2、Content-Type:application/x-www-form-urlencoded

执行结果:

十一、Json和字典数据转换

1、json.dumps(),将字典转换成Json

使用json.dumps()可以将字典转换成Json

执行结果:

2、json.loads(),将Json转换成字典

使用json.loads()可以将Json转换成字典

执行结果:

3、json格式报文发送

方法一:参数是data,值:将字典data转换成json

方法二:参数是json,值:字典data

十二、获取接口响应时间

执行结果:

十三、接口调用失败处理

同一个用例中有多个接口调用,一个接口调用失败如何防止程序终止?
用于判断接口请求的状态码是否为200,如果是,则返回none,如果不是则返回异常。
调用接口时结合try…except进行使用。

执行结果:

十四、接口超时

执行结果:

当把timeout改成0.1,执行结果:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。