Requests接口测试-对session的操作处理(一)
我们本篇教程给大家分享的是requests结合session进行案例演示,session和cookie其实是两种不同的机制,但是原理是很类似的,
session会话对象:会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie,期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。
步骤:
1、对Session类进行实例化
2、请求登录
我们以人人网登陆为例子,来看一个整个session的实现流程。我们通过抓包工具把人人网的登陆请求抓取到了!
我们使用requests来编写整个接口测试案例,看下面的代码:
url = "http://www.renren1.com/ajaxLogin/login?1=1&uniqueTimestamp=2018741657946"
data = {
"email":"18513600235",
"icodez":"",
"origURL":"http://www.renren1.com/home",
"domain":"renren1.com",
"key_id":"1",
"captcha_type":"web_login",
"password":"3321a2ad6206ca55475cef14bb5f5dea3c579b2189d517adddd2b2ec5e64db1a",
"rkey":"33c14357d55b6ff027dcd56e46cb529e",
"f":""}
r = requests.post(url,data=data)
print(r.json())
返回结果:
C:\Python35\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 5.0.3\helpers\pycharm\utrunner.py" E:\project\index.py true
Testing started at 16:12 ...
{'homeUrl': 'http://www.renren1.com/home', 'code': True}
我们使用实例化session这个方法来登陆renren1网,然后查看一些其他的接口:
import requests import unittest url = "http://www.renren1.com/ajaxLogin/login?1=1&uniqueTimestamp=2018741657946" data = { "email":"18513600235", "icodez":"", "origURL":"http://www.renren1.com/home", "domain":"renren1.com", "key_id":"1", "captcha_type":"web_login", "password":"3321a2ad6206ca55475cef14bb5f5dea3c579b2189d517adddd2b2ec5e64db1a", "rkey":"33c14357d55b6ff027dcd56e46cb529e", "f":""} def login(): s = requests.session() r = s.post(url=url,data=data) return s def zhuye(): r = login().get(url="http://www.renren1.com/967166849/profile") print(r.text)
定义一个login方法,实例化sesison,后续的所有请求都是基于实例化操作的。zhuye就是接口之一的数据,查看返回结果如下:
C:\Python35\python.exe E:/project/index1111.py <!Doctype html> <html class="nx-main860"> <head> <meta name="Description" content="人人网 校内是一个真实的社交网络,联络你和你周围的朋友。 加入人人网校内你可以:联络朋友,了解他们的最新动态;和朋友分享相片、音乐和电影;找到老同学,结识新朋友;用照片和日志记录生活,展示自我。"/> <meta name="Keywords" content="Xiaonei,renren1,校内,大学,同学,同事,白领,个人主页,博客,相册,群组,社区,交友,聊天,音乐,视频,校园,人人,人人网"/> <title>人人网 - 战士</title> <meta charset="utf-8"/> <span class="fd-nav-icon fd-sub-nav"></span> <a href="http://www.renren1.com/967166849/profile">我的主页</a></li> <li class="fd-nav-item"> <a href="http://www.renren1.com/967166849/profile?v=info_timeline">资料</a> </li> <li class="fd-nav-item"> <a href="http://photo.renren1.com/photo/967166849/albumlist/v7">相册</a> </li> <li class="fd-nav-item"> <a href="http://share.renren1.com/share/v7/967166849">分享</a> </li> <li class="fd-nav-item"> <a href="http://status.renren1.com/status/v7/967166849">状态</a> </li> <li class="fd-nav-item"> <a href="http://blog.renren1.com/blog/967166849/myBlogs">日志</a></li> <li class="fd-nav-item"> <a href="http://friend.renren1.com/managefriends">好友</a> </li> <li class="fd-nav-item fd-nav-showmore"> <a href="#">更多<em class="fd-arr-down"><span class="fd-arr-outer"><span class="fd-arr-inner"></span></span></em></a> <div class="nf-group-list-container"> <ul class="nf-group-list"> <li class="nf-group-item"> <a href="http://follow.renren1.com/list/967166849/sub/v7">关注</a> </li> <li class="nf-group-item"> <a href="http://photo.renren1.com/photo/zuji/967166849" target="_blank">足迹</a> </li> <li class="nf-group-item"> <a href="http://gift.renren1.com/show/box/otherbox?userId=967166849" target="_blank">礼物</a> </li> <li class="nf-group-item"> <a href="http://page.renren1.com/home/mypages" target="_blank">公共主页</a></li> <li class="nf-group-item"> <a href="http://www.renren1.com/lifeevent/index/967166849">生活纪事</a> </li> <li class="nf-group-item"> <a href="http://mvideo.renren1.com/video/967166849/list">短视频</a> Process finished with exit code 0
我们在编写一个接口,使用charles抓取renren1网主页里面的兴趣,我们来看一下,整个接口的请求参数如下:
人人网页面的表现如下:
我们把个人主页->编辑资料->兴趣请求参数填入到data中:
def like(): data={ "music":"pingpaoqiu","interest":"","book":"fighterlu", "movie":"","game":"","comic":"","sport":"","errorReturn":1, "submit":"保存","requestToken":"1476953679","_rtk":"23c984a9"} r = login().post(url="http://www.renren1.com/PersonalInfo.do?v=info_timeline",data=data) return r.text
然后,我们修改一下请求数据中的music数据为"music":"pingpaoqiu" 然后调用这个接口再次发送请求如下:
import requests import unittest url = "http://www.renren1.com/ajaxLogin/login?1=1&uniqueTimestamp=2018741657946" data = { "email":"18513600235", "icodez":"", "origURL":"http://www.renren1.com/home", "domain":"renren1.com", "key_id":"1", "captcha_type":"web_login", "password":"3321a2ad6206ca55475cef14bb5f5dea3c579b2189d517adddd2b2ec5e64db1a", "rkey":"33c14357d55b6ff027dcd56e46cb529e", "f":""} def login():
'''登陆实例化''' s = requests.session() r = s.post(url=url,data=data) return s def zhuye():
'''个人主页''' r = login().get(url="http://www.renren1.com/967166849/profile") print(r.text) def like():
'''兴趣''' data={ "music":"pingpaoqiu","interest":"","book":"fighterlu", "movie":"","game":"","comic":"","sport":"","errorReturn":1, "submit":"保存","requestToken":"1476953679","_rtk":"23c984a9"} r = login().post(url="http://www.renren1.com/PersonalInfo.do?v=info_timeline",data=data) return r.text print(like())
我们查看接口返回的结果:
C:\Python35\python.exe E:/project/index1111.py <!Doctype html> <html class="nx-main860"> <head> <meta name="Description" content="人人网 校内是一个真实的社交网络,联络你和你周围的朋友。 加入人人网校内你可以:联络朋友,了解他们的最新动态;和朋友分享相片、音乐和电影;找到老同学,结识新朋友;用照片和日志记录生活,展示自我。"/> <meta name="Keywords" content="Xiaonei,renren1,校内,大学,同学,同事,白领,个人主页,博客,相册,群组,社区,交友,聊天,音乐,视频,校园,人人,人人网"/> <title>人人网 - 战士</title> <meta charset="utf-8"/> <link rel="shortcut icon" type="image/x-icon" href="http://a.xnimg.cn/favicon-rr.ico?ver=3" /> <link rel="apple-touch-icon" href="http://a.xnimg.cn/wap/apple_icon_.png" /> <link rel="stylesheet" type="text/css" href="http://s.xnimg.cn/a86614/nx/core/base.css"> <script type="text/javascript"> if(typeof nx === 'undefined'){ var nx = {}; } nx.log = { startTime : + new Date() }; nx.user = { id : "967166849", ruid:"967166849", tinyPic : "http://head.xiaonei.com/photos/0/0/men_tiny.gif ", name : "战士", privacy: "99", requestToken : '1476953679', _rtk : '23c984a9' };nx.user.isvip = false;nx.user.hidead = false;nx.webpager = nx.webpager || {}; nx.production = true; </script> <script type="text/javascript" src="http://s.xnimg.cn/a83151/nx/core/libs.js"></script> <script type="text/javascript"> define.config({map:{ </body> </html> Process finished with exit code 0
我们刷新整个人人网的个人资料编辑页面,来看看页面信息是否更新了。
ok,关于人人网的session案例我们就演示到这里了。
将喜欢的一切留在身边,这便是努力的意义。