模拟登录之使用cookie

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/108628094

之前分享过一期模拟登录 Requests.Session() 会话维持 ,最近组里要做接口自动化,那我想用Python直接搞起来;后面大佬说要统一使用JMeter;

学着跑通了登录+某些要鉴权的请求,就来分享下 我是如何使用的。

个人博客:https://blog.csdn.net/zyooooxie

登录请求

在这里插入图片描述

可以看到 请求时 用Cookie里的 SESSION字段值 来鉴权;

【实际鉴权方式: 利用服务器端的session(会话)和浏览器端的cookie来实现前后端的认证(我这的SESSION 即SessionId),但是本篇分享讲的是 headers的cookie】

requests

我尝试了2种方式:

A. 实例化RequestCookieJar,传到cookies + 将cookie建字典,传到cookies
B.cookie放在请求头参数 headers

在这里插入图片描述

cookies参数

第一种

rcj = RequestsCookieJar()
rcj.set(‘SESSION’, use_cookie)
r4 = requests.post(url_logout, cookies=rcj)

第二种

r31 = requests.post(test, json=test_dict, cookies={‘SESSION’: use_cookie})

headers参数

use_header = {‘Cookie’: ‘SESSION={}’.format(use_cookie)}
r32 = requests.post(test, json=test_dict, headers=use_header)

代码

某些信息被删除了,见谅!

import requests
from requests.cookies import RequestsCookieJar

url_key = 'http://api/auth/get/key'
url_login = 'http://api/auth/login'
url_logout = 'http://api/auth/logout'
test = 'http:///bill-list-query'

r1 = requests.get(url_key)
print('获取key', r1.json())

key = r1.json()['data']
test_dict = {'code': '123', 'key': key, 'password': '', 'phone': ''}
r2 = requests.get(url_login, params=test_dict)
assert r2.json()['msg'] == 'success'
print('登录', r2.json())
print(r2.cookies)
use_cookie = r2.cookies['SESSION']

test_dict = {'': 1, '': '10', '': 10, '': 11, '': 10}
r3 = requests.post(test, json=test_dict)
print(r3.json(), '这是第一')

r31 = requests.post(test, json=test_dict, cookies={'SESSION': use_cookie})
print('这是第二', r31.json())

use_header = {'Cookie': 'SESSION={}'.format(use_cookie)}
r32 = requests.post(test, json=test_dict, headers=use_header)
print('第三次', r32.json())

rcj = RequestsCookieJar()
rcj.set('SESSION', use_cookie)
r4 = requests.post(url_logout, cookies=rcj)
assert r4.json()['msg'] == 'success'
print(r4.json())


实际用python来做接口自动化时,我的脚本是用实例化RequestCookieJar来实现的。
方案:第一步 登录,拿到cookie值,存到yaml文件 【setUpClass】;第二步 其他接口要请求时,先读取yaml的cookie值【第一行】,实际请求要附带cookie【test1】;第三步 对请求返回值 断言【最后两行】;最后 退出系统【tearDownClass】。
在这里插入图片描述

JMeter

所有请求放在同一线程组(共享cookie)

1.自动管理cookie

加一个空的HTTP Cookie Manager,即可自动保存cookie,并且能够在同一个线程组之间传递cookie;

在这里插入图片描述

在这里插入图片描述

如果我 非得想用 做变量,咋办?

在这里插入图片描述

这是 因为jmeter默认不保存cookie,需要设置 jmeter .properties文件

CookieManager.save.cookies=true

在这里插入图片描述

重启jmeter,重新跑,看看。

(当执行脚本后,HTTP Cookie Manager获取到的cookie 被自动保存在变量里(具体的变量名格式为"COOKIE_xxxx","COOKIE_"为前缀),其中xxxx为具体的实际cookie名。)
在这里插入图片描述

线程组内新增cookie 【手动增加】

利用HTTP Cookie Manager 来add某可用的cookie

在这里插入图片描述
在这里插入图片描述

当然 也可以使用 HTTP Header Manager 来add

在这里插入图片描述

线程组内关联cookie

JMerter 做关联cookie

跨线程组传递 cookie 【设置全局变量】

第一步 先设置 CookieManager.save.cookies=true
第二步 线程组A 请求登录接口后,设置全局变量
第三步 线程组B 使用全局变量
第四步 保证线程组顺序执行

请求登录接口后,设置全局变量

有2个方法:

  1. 登录请求 为其新增一个后置BeanShell PostProcessor

通过查看Debug Sampler1,已经得知cookie的名称: COOKIE_SESSION; 使用__setProperty函数,

在这里插入图片描述

  1. 登录请求,后续一个BeanShell Sampler

使用__setProperty函数

在这里插入图片描述

其他线程组的请求 使用此全局变量

先在其他线程组 确定下,能不能查到此变量

在这里插入图片描述

使用HTTP Cookie Manager,新增cookie (使用__P函数调用 此变量)

在这里插入图片描述

当然可用 HTTP Header Manager,设置cookie

在这里插入图片描述

第四步 按顺序执行 说的是
在这里插入图片描述

Postman

手动新创建cookie

1.直接请求,接口返回401,同时响应头 Set-Cookie: SESSION=xxx; Path=/; HttpOnly

在这里插入图片描述

在这里插入图片描述

2.手动修改其为某个已经登录后的字段值;
在这里插入图片描述

3.再次请求

在这里插入图片描述

实际手动新增:

在这里插入图片描述

设置变量 共享cookie

在这里插入图片描述

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些Python模拟登陆并获取cookie的代码示例。请注意,这里的代码仅供参考,具体的登陆方式和获取cookie的方式可能因网站而异。 ```python import requests # 创建一个 session 对象 session = requests.Session() # 登陆页面的 URL login_url = 'https://example.com/login' # 构造登陆请求的参数 payload = { 'username': 'your_username', 'password': 'your_password' } # 发送登陆请求 response = session.post(login_url, data=payload) # 检查登陆是否成功 if response.status_code == 200: print('登陆成功!') else: print('登陆失败。') # 获取登陆后的 cookie cookie_dict = requests.utils.dict_from_cookiejar(session.cookies) print('cookie:', cookie_dict) ``` 在这个示例代码中,我们首先创建了一个 `Session` 对象,这个对象可以自动保存和传递 cookie。然后,我们构造了一个登陆请求的参数 `payload`,其中包括了用户名和密码。接下来,我们通过 `session.post` 方法发送了一个 POST 请求,将登陆参数提交到了登陆页面的 URL 上。最后,我们检查了服务器返回的状态码,如果是 200,就表示登陆成功了,我们可以通过 `session.cookies` 属性获取登陆后的 cookie。最后,我们将 cookie 转换成字典格式并输出。 当然,实际的登陆过程可能比这个复杂得多,需要分析网站的登陆流程和参数,以及处理一些验证码等安全机制。但是,这个示例代码可以为您提供一个初步的思路和框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值