python利用requests库进行接口测试的方法详解
前言
之前介绍了接口测试中需要关注得测试点,现在我们来看看如何进行接口测试,现在接口测试工具有很多种,例如:postman,soapui,jemter等等,对于简单接口而言,或者我们只想调试一下,使用工具是非常便捷而且快速得,但是对于更复杂得场景,这些工具虽然也能实现,但是难度要比写代码更大,而且定制化受到工具得功能影响,会遇到一些障碍,当然我们还要实现自动化等等,鉴于以上因素,我们还是要学会使用代码进行接口测试,便于维护与扩展,或者算是我们知识得补充把~
requests库是python用来发起http/https请求得第三方库,支持get,post,put,delete等,requests特点是简单便捷、功能丰富,能够满足日常测试需求,所以我们选取requests库进行接口测试
运行环境:
- 系统:mac os 10.13.5
- python:3.6.4
- requests:2.19.1
接口为自己编写得测试接口,测试请使用自己得接口
第一部分:安装
1.安装python(自行安装)
2.安装requests(linux和mac os可能会遇到权限问题,sudo安装即可)
1 |
|
3.验证
1 2 3 4 5 6 |
|
没有报错说明python与requests环境都没问题
第二部分:基础部分
以一个简单的get接口为例
1 2 |
|
1.响应信息(response)解析
1 2 3 4 5 |
|
response.text是以str得形式返回得响应信息
response.content是以bytes形式返回
实际使用中根据自己得情况进行选择
2.获取状态码
1 2 3 |
|
3.获取headers信息
1 2 3 |
|
4.获取cookies信息
1 2 3 |
|
注意:这里与其他部分稍有不同,返回cookies的信息为cookies对象,而不是像前面部分返回得是字符串或者字典,cookies解析部分在后面会进行单独说明
5.获取请求url
1 2 3 |
|
6.获取反序列化后的得信息:
1 2 3 |
|
注意:只有在返回信息为json格式时才能使用,否则会报json异常
7.获取响应时间
1 2 3 4 5 6 7 8 9 |
|
第三部分:进阶部分
通常我们要想获取正确得响应信息需要传递一些参数,针对不同得请求,传参方式稍有不通,下面我们来看一下
这里我部署了一个get接口和一个post接口,功能都是讲获取得请求参数返回回来,以便我们查看效果
1.get请求传递参数
1 2 3 4 5 6 7 |
|
说明:
这里做了三件事,先定义一个参数字典p,然后将参数字典以params参数传递给get方法,最后将响应信息打印出来,从响应信息可以看到参数被正确得传递进去,requests帮我们把参数组合到了url里面
2.post请求传递参数
post传递参数和get有所不同,根据服务端取值方式进行不同方式得传递
如果是传递得json格式得参数
1 2 3 4 5 |
|
如果是以html中form得形式传递参数,
1 2 |
|
如果form传递得是json格式需要以下面得方式
1 2 3 |
|
说明:
需要将字典行驶得参数转换为json格式,再进行传递
根据服务端得情况选中一种方式进行传递参数,通常情况下这三种情况可以满足测试需求
第四部分:高级部分
1.操作cookies
有时候由于服务端需要取得cookies信息来进行用户身份验证, 或者另外一些用户信息来进行逻辑处理,这时候我们在测试接口时需要手动获取cookies信息和添加cookies信息到请求中
先看设置cookies信息
注:我这里部署了一个set_cookies接口,将cookies信息作为响应信息返回
1 2 3 4 5 |
|
说明:
这段代码先定义了一个cookies字典,然后通过get方法,以cookies参数传入,最后打印出响应信息,可以看到cookies被成功种入请求中
我们再说说如何获取cookies并解析cookies信息
注:这里我部署了一个get_cookies接口,将{"name":"john"}作为cookies置入响应中
1 2 3 4 5 |
|
说明:
获取cookies对象得信息,我们只需要像获取字段得value一样即可,可以看到我们成功获取到了john
2.headers
看完了cookies之后,header就一目了然了,但是我还是同样部署两个接口(一个set_headers,一个get_headers)
1 2 3 4 5 6 7 8 9 10 |
|
3.session
session可以理解为一段对话,而这段对话会纪录这次会话中得一些内容和状态,当中断这段对话,这些信息与状态就丢失了session对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升
使用方法
注:我这里部署两个接口,一个hello接口(用来演示使用全局cookies,将请求cookies返回),一个world接口(用来演示使用全局headers,将请求headers返回)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
4.设置timeout
通常接口都是为上游服务得,由于上游不能够长时间等待接口返回信息,都会设置一个超时时间,超过了这个时间,会将这个结果丢弃,如果我们要监控线上接口有没有超时情况,这时候我们发起请求的时候就需要设置一个超时时间,如果超过这个时间,就会抛出一个异常
1 |
|
说明:
将5这个超时时间以timeout参数传入,这里得单位是秒
如果要想将连接(connect)与读取(read)都进行设置,则需要传入一个元组,第一个元素为connect超时事件,第二个元素为read超时时间
1 |
|
?现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?希望能帮助到你!【100%无套路免费领取】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!