前言
之前介绍了接口测试中需要关注得测试点,现在我们来看看如何进行接口测试,现在接口测试工具有很多种,例如: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(自行安装),不会的朋友们可以参考这篇文章:https://www.jb51.net/article/112486.htm
2.安装requests(linux和mac os可能会遇到权限问题,sudo安装即可)
pip install -U requests
3.验证
localhost:~ mac$ python3 Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. > import requests >
没有报错说明python与requests环境都没问题
第二部分:基础部分
以一个简单的get接口为例
import requests #导入requests模块 response=requests.get("http://localhost:5000/hello")#对hello接口进行get请求,并获取响应信息
1.响应信息(response)解析
print(response.text) print(response.content) ##输出 你好 b'\xe4\xbd\xa0\xe5\xa5\xbd'
response.text是以str得形式返回得响应信息
response.content是以bytes形式返回
实际使用中根据自己得情况进行选择
2.获取状态码
print(response.status_code) ##输出 200
3.获取headers信息
print(response.headers) ##输出 {'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '6', 'Server': 'Werkzeug/0.14.1 Python/3.6.4', 'Date': 'Sun, 24 Jun 2018 02:55:27 GMT'}
4.获取cookies信息
print(response.cookies) ##输出 <RequestsCookieJar[]>
注意:这里与其他部分稍有不同,返回cookies的信息为cookies对象,而不是像前面部分返回得是字符串或者字典,cookies解析部分在后面会进行单独说明
5.获取请求url
print(response.url) ###输出 http://localhost:5000/hello
6.获取反序列化后的得信息:
print(response.json()) ###输出: {'name': 'john'}
注意:只有在返回信息为json格式时才能使用,否则会报json异常
7.获取响应时间
print(response.elapsed) print(response.elapsed.microseconds) print(response.elapsed.seconds) print(response.elapsed.total_seconds()) ##输出 0:00:00.003773 3773 0 0.003773
第三部分:进阶部分
通常我们要想获取正确得响应信息需要传递一些参数,针对不同得请求,传参方式稍有不通,下面我们来看一下
这里我部署了一个get接口和一个post接口,功能都是讲获取得请求参数返回回来,以便我们查看效果
1.get请求传递参数
params={"name":"john","age":17} response=requests.get("http://localhost:5000/get_params",params=params) print(response.text) print(response.url) ##输出 {"name": "john", "age": "17"} http://localhost:5000/get_params"htmlcode">p={"name":"john","age":17} response=requests.post("http://localhost:5000/post_params",json=p) print(response.text) ###输出: {"name": "john", "age": 17}如果是以html中form得形式传递参数,
response=requests.post("http://localhost:5000/post_params",data=p) print(response.text)如果form传递得是json格式需要以下面得方式
import json response=requests.post("http://localhost:5000/post_params",data=json.dumps(p)) print(response.text)说明:
需要将字典行驶得参数转换为json格式,再进行传递
根据服务端得情况选中一种方式进行传递参数,通常情况下这三种情况可以满足测试需求
第四部分:高级部分
1.操作cookies
有时候由于服务端需要取得cookies信息来进行用户身份验证, 或者另外一些用户信息来进行逻辑处理,这时候我们在测试接口时需要手动获取cookies信息和添加cookies信息到请求中
先看设置cookies信息
注:我这里部署了一个set_cookies接口,将cookies信息作为响应信息返回
my_cookies={"name":"john"} response=requests.get("http://localhost:5000/set_cookies",cookies=my_cookies) print(response.text) ##输出 {"name": "john"}说明:
这段代码先定义了一个cookies字典,然后通过get方法,以cookies参数传入,最后打印出响应信息,可以看到cookies被成功种入请求中
我们再说说如何获取cookies并解析cookies信息
注:这里我部署了一个get_cookies接口,将{"name":"john"}作为cookies置入响应中
response=requests.get("http://localhost:5000/get_cookies") cookies=response.cookies print(cookies["name"]) ##输出: john说明:
获取cookies对象得信息,我们只需要像获取字段得value一样即可,可以看到我们成功获取到了john
2.headers
看完了cookies之后,header就一目了然了,但是我还是同样部署两个接口(一个set_headers,一个get_headers)
#设置headers my_headers={"name":"john"} response=requests.get("http://localhost:5000/set_headers",headers=my_headers) print(response.text) #获取headers response=requests.get("http://localhost:5000/get_headers") print(response.headers.get("name")) ##输出: {"name": "john"} john3.session
session可以理解为一段对话,而这段对话会纪录这次会话中得一些内容和状态,当中断这段对话,这些信息与状态就丢失了session对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升
使用方法
注:我这里部署两个接口,一个hello接口(用来演示使用全局cookies,将请求cookies返回),一个world接口(用来演示使用全局headers,将请求headers返回)
#设置headers my_info={"name":"john"} #创建全局session对象 my_session=requests.session() #设置全局cookies信息 my_session.cookies.set("name","john") #设置全局headers信息 my_session.headers.update(my_info) #演示全局cookies使用 response=my_session.get("http://localhost:5000/hello") print(response.text) #演示全局headers使用 response=my_session.get("http://localhost:5000/world") print(response.text) ##输出 {"name": "john"} {"Host": "localhost:5000", "User-Agent": "python-requests/2.19.1", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "keep-alive", "Name": "john", "Cookie": "name=john"}4.设置timeout
通常接口都是为上游服务得,由于上游不能够长时间等待接口返回信息,都会设置一个超时时间,超过了这个时间,会将这个结果丢弃,如果我们要监控线上接口有没有超时情况,这时候我们发起请求的时候就需要设置一个超时时间,如果超过这个时间,就会抛出一个异常
response=requests.get("http://www.baidu.com",timeout=5)说明:
将5这个超时时间以timeout参数传入,这里得单位是秒
如果要想将连接(connect)与读取(read)都进行设置,则需要传入一个元组,第一个元素为connect超时事件,第二个元素为read超时时间
response=requests.get("http://www.baidu.com",timeout=(1,2))5.hook
太晚了,先睡觉,明天补上~~
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]