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案例我们就演示到这里了。

posted @ 2018-08-16 17:14  IT测试老兵  阅读(2040)  评论(0编辑  收藏  举报
作者:测试老兵
出处:https://www.cnblogs.com/fighter007/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。