接口测试之requests中的会话

requests中的会话

之前的例子中,我们都是单独调用接口或解析响应,

但在实际应用场景中,我们往往会需要连续调用一些接口。

比如:

1.先登录

2.再做一些操作

3.最后登出

就像我们在浏览器中对网页做操作一样,requests 也可以模拟这些操作的步骤。

在开始之前,我们简单了解下浏览器是怎样做到这些事情的,为什么我们在浏览器里登录了某个网站之后,这个网站就知道我们后续的操作都是在这个刚刚登录的账号里做的呢?


Cookies和Session

这里有两个概念,一个是cookies, 一个是session。

Cookie 或者 Cookies 是 Web 服务器保存在用户浏览器上的小文本文件。它可以包含有关用户的信息,比如用户名、甚至加密后的密码之类的信息。这样,当我们再次使用这个浏览器访问这个服务器时,服务器可以直接读取这些信息,而无需用户再次输入。

Session,称为会话,用户通常会在服务器提供的网页之间进行跳转来访问不同的页面,服务器对一个用户创建一个 Session 对象,存放在服务器端,这样服务器就知道这个用户是谁了。session 里也可以存放用户名等信息。

Session 一般是会过期自动终止的,毕竟服务器端资源有限,一段时间不操作,很多网站就会自动删除你的session,这时你再做操作,网站会提示你重新登录。而有些网站在提示你重新登录时,页面上还会显示“欢迎,某某某”这样的字样,因为这后面的用户名它很可能是存在了你的浏览器 cookies 里,所以你重新操作时,网页还是知道你的用户名,毕竟 cookies 是不会自动被删除的,顺带一提,cookies 是保存在客户端,所以我们是可以设置要不要保存 cookies的,很多网站都设置了如果不保存 cookies 将提示你无法使用该网站。


requests 中的cookies

在 requests 中,响应和请求里都有 cookies 功能。

如果某个响应中包含一些 cookie,你可以快速访问它们(以下例子可以在交互模式中运行):

>>> url = 'http://example.com/some/cookie/setting/url' 
>>> r = requests.get(url) 
>>> r.cookies['example_cookie_name'] 
'example_cookie_value' 


要想发送你的cookies到服务器,可以使用 cookies 参数:

>>> url = 'http://httpbin.org/cookies' 
>>> cookies = dict(cookies_are='working') 
>>> r = requests.get(url, cookies=cookies) 
>>> r.text 
'{"cookies": {"cookies_are": "working"}}' 

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

>>> jar = requests.cookies.RequestsCookieJar() 
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') 
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') 
>>> url = 'http://httpbin.org/cookies' 
>>> r = requests.get(url, cookies=jar) 
>>> r.text 
'{"cookies": {"tasty_cookie": "yum"}}' 

requests 中的会话

在 requests 中,也有会话的概念,这里只是借用了 session 这个名词,但其实,和服务器端的 session 并不同。reqeusts 是模拟客户端的工具,显然不可能用它来模拟服务端的会话。但是,我们也不想像上面的 cookies 例子一样,去手动在一系列请求和响应之间传递 cookies。


requests 的 session 就帮助我们把这变成了自动的。

例1. requests 中会话的例子

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

这个例子中:

第二行创建了一个 reqeusts 会话,

第三行使用 get 访问了一个网址,这个 get 请求使服务端创建了一个服务端的 session 对象,并且这个网址的作用是把服务端的 session 内容返回给用户。(见任务1的第一小题)

第四行用户 get了 另一个网址,服务器返回了一个 "sessioncookie": "123456789" 的 json数据。这个数据恰恰是第三行的返回值,这说明服务端正确地记住了我们。

任务1. 我们来做一个小练习加深一下印象。

1. 打断点观察例1中的第三行给出的响应内容。(你可以在第三行前加一个r = 然后断点观察 r 的值)

2. 去掉例1中的第三行,观察运行例1的结果变化。

利用这个会话功能,我们可以做很多事情。比如,用requests登录一个网站,在网站上做一些操作,抓取一些数据,然后登出。可以说我们以前用 selenium 之类图形化自动化库做的事情,大多数都可以通过接口来做啦。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值