3.token、cookie和session 1 token简介 2 token实战 3. cookies 简介 cookies 封装: cookie实战 cookie实战描述

1 token简介



概念:令牌,一般在我们的前后端分离的项目中使用,作为身份的校验
详情:服务后端程序产生的,然后存放到服务端,一般是缓存中(内存/磁盘)
时效性:过久过期,由开发或者项目本身决定

扩展:redis使用场景:
登录的token会放到redis
高频 热点数据可以放

工作流程:
项目代码的处理:
1.一般通过登录接口,成功之后,在响应数据里有token值
2.后续其他接口关联使用这个token,一般放在后续接口的请求头里

响应体json(token)内容获取:
1、先转换为字典--res.json()
2、使用第三方库--jsonpath

2 token实战

HOST = 'http://121.41.14.39:8082'#便于维护--测试环境变更--测试环境-预生产环境-生产环境
'''
目标:完成外卖系统的店铺端的登录接口操作
注意事项:密码需要md5加密!
'''
import requests
import pprint
#需求:输入一个字符串的密码,输出的一个md5加密结果
import hashlib
def get_md5(password):
   #1-实例化加密对象
   md5 = hashlib.md5()
   #2- 进行加密操作
   md5.update(password.encode('utf-8'))
   #3- 返回加密后的值
   return md5.hexdigest()

print(get_md5('xintian'))


def login(inData,getToken=False):
   '''
   :param inData:账号+密码---字典
   :param getToken  为True 获取token;   为False  返回接口响应数据
   :return:
   '''
   #1-url
   url = f'{HOST}/account/sLogin'
   #2- 参数
   #字典的修改值操作   字典[键] = 新的值
   inData['password'] = get_md5(inData['password'])
   payload = inData
   #3-请求方法
   resp = requests.post(url,params=payload)
   if getToken == False:
       return resp.json()#响应数据
   else:
       return  resp.json()['data']['token']#token

if __name__ == '__main__':
   res = login({'username':'xxxxxx','password':'xxxxxx'})
   # pprint.pprint(res)
   print(res)

3. cookies 简介

  • cookies的项目场景:
    1、访问任何页面都会返回cookies,这个cookies是临时的,后续需要登录认证,变得有效
    2、只有登录才会有cookies,否则不会返回cookies

cookies工作流程(主要里面就是jsessionID)
1.客户端发送一个请求到服务器
2.服务器返回响应数据--响应头--set- COOkies---给我们客户端

  1. 这个时候这个cookies不一定是有效!---需 要登录的网站--临时cookies
  2. 需要登录---服务器判断这个账号密码正确之 后,之前的cookies变成可以使用的!
  • cookies的关联场景:
    1、原生态的cookies,即项目后续接口直接使用这个cookies,不作任何操作----不建议取出sessionid
    2、需要更新的cookies,即项目后续接口使用这个cookies,但是需要第三方认证,则需要更新cookies(增加cookies的属性,如token)

cookies 封装:

HOST="http://localhost:8080"
import requests
def login(data):
  # 1 url  
  url = f"{HOST}/api/mgr/loinReq"
  # 请求body
  payload = data
res = requests.post(url,data=payload)
  # 获取响应头
  print('响应头-->',resp.headers)
  # 1 使用建取cookies值
  # print('响应头-->',resp.headers['Set-Cookie'])
  # 2 直接获取cookie对象
  print('cookies对象--->',resp.cookies)
#  -------业务接口-----------
class Lesson:
  def __init__(self,in_cookies):
    self.cookies = in_cookies
  def list_lesson(self,data):
    url = f'{host}/api/mgr/sq_mgr/'
    payload = data 
    resp = requests.get(url,params=data,cookies=self.cookies) # get方式用params,cookies的获取直接到类中取得
    resp.encoding = 'unocode_escape' #设置响应数据编码(为了返回数据正常展示)
    return resp.text
  def get_vip_token():
    retuen 'token'  # 假装获得了token

if __name__== '__main__':
# 1 login接口
cookies = login('usename':'auto','password':';sdfsdfsdf')
# -----获取token后,需要更新cookies,或手动新增(拼接)
cookies.update('token':get_vip_token()) # 更新,有键值则更新,无键值则新增
user_cookies= {'sessionid':cookies['sessionid'],'token':get_vip_token()}# 新增

# 2 列出课表接口
Lesson(cookies).list_lesson({'action':'list_course','pagenumm':1.,'pagesize':20})

cookies的传递:


知识点1:字典与json区别
1- 数据类型区别
1- 字典是一种存储数据类型 type()
2- json:是一个键值对形式的格式字符串
1- json 不是python专属,
2- 键是双引号的字符串
3- json数据里怎么表示一个空对象:null,python的空None
4- json数据里怎么表示一个真:true,python的空True
3- 两者相互转化 import json
1- 字典转json json.dumps()
2- json转字典 json.loads()
2- 代码里区别
在控制台里输出这个数据
1- 如果是单引号--是字典类型
2- 如果是双引号--json字符串

演示代码:

#1- 字典类型
    dict1 = {'name':'songqin','data':None,'data2':True}
    print('字典>>> ',dict1)
    print(json.dumps(dict1))#字典转json

知识点2:场景描述:有时候,某一个接口你的Postman可以测试成功,但是你写的代码不能成功!
分析:
1- 项目的接口没有问题,不要去怼开发
2- 肯定是你接口本身写有问题:数据类型,一些参数 url等一些原因
环境限制:这个测试环境不能搭建任何抓包工具
解决方案:
1- 你拿到你自己代码发出去请求与postman对比
2- 自己打印你的请求详情

知识点3:
cookies在项目里使用场景:
1- 后续接口使用原生态的cookie
2- 后续接口会使用到登录的cookies(只有sessionid),但是这个cookies他是二次封装的
cookies:session+token+uuid
解决方案:
1- 先通过登录的方式获取第三方接口的token
2- 再使用本测试项目的登录去获取cookies
3- 先从本项目的cookes提取session
4- 二次封装 cookie=sessionid+token

cookie实战

1、cookie关联操作
前端访问路径:http://124.223.33.41:7081/mgr/login/login.html
1、登录接口
-url : http://124.223.33.41:7081/api/mgr/loginReq http协议
-请求体:
username auto 必填
password sdfsdfsdf 必填
-响应头
比如:·sessionid=89emkau5vhyg8vcwfwvq2pvr7ul2t5sc
·Content-Type 必填 该字段值为 application/json,表示返回 JSON 格式的文本信息。
·Set-Cookie 必填 该字段保存本次登录的 sessionid,
-响应体
如果请求成功,返回 json 格式的消息体,如下所示,retcode 值为 0 表示登录认证成功

{
"retcode": 0
}

如果输入的用户名或者密码错误,则返回结果为:

{
   "retcode": 1,
   "reason": "用户或者密码错误"
}

2、课程接口
-请求语法:
GET /api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 HTTP/1.1
-url请求参数

-参数名
action:填写list_course,表明是要列出所有课程信息pagenum:表示当前要显示的是第几页,目前固定填写1
`pagesize:表示一页最多显示多少条课程信息,目前固定填写20
-请求体内容:该请求无需指定请求内容。
-响应内容
如果请求成功,返回json格式的消息体,如下所示

{
 "retlist": [
 {
        "desc": "初中语文",
         "id": 418,
        "display_idx": 1,
        "name": "初中语文"
   }
 ],
 "total": 3,
 "retcode": 0
}

retcode值为0表示查询成功。
total 值表示总共有多少门课程信息
retlist的内容是一个数组,其中每个元素对应一门课程信息。

示例

testData2 = { "action":"list_course", "pagenum":1,"pagesize":20 }

cookie实战描述

#登录接口
fiddler_proxies = {
'http':'http://127.0.0.1:8888',
'https':'http://127.0.0.1:8888'
}
esp = requests.post(url,params=payload)
HOST = 'http://120.55.190.222:7080'
import requests
def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload = {'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp = requests.post(url,data=payload)
#获取cookie
#方案一:响应里就有这个cookie
# print(resp.cookies)
return resp.cookies#返回原生态的cookie

#需要关联的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 请求
resp = requests.post(url, cookies =userCookie)
print(resp.request.headers)#查看请求头的cookies
if __name__ == '__main__':
userCookie= login()
add_lesson(userCookie)    

2、自己封装cookie关联后续接口实战

使用场景描述:举例说明如下
1、一个电商整个项目安装包给学员
2、电商项目使用了cookie机制--sessionid
3、为了避免非VIP使用该项目,在使用这个项目的使用,会弹出一个VIP认证的页面,需要输入VIP账号
4、这个时候,代码层做接口自动化测试时:需要自己获取sessionID+token

代码实战:

HOST = 'http://120.55.190.222:7080'
import requests
def login():
   #1- url
   url = f'{HOST}/api/mgr/loginReq'
   #2- 请求体
   payload = {'username':'auto','password':'sdfsdfsdf'}
   #3- 请求
   resp = requests.post(url,data=payload)
   #获取cookie
  #方案二:需要额外增加一些参数到cookie---定制化cookie--提取sessionID
   print(resp.cookies['sessionid'])
   return resp.cookies['sessionid']#返回原生态的cookie里的sessionID

#需要关联的接口
def add_lesson(userCookie):
   # 1- url
   url = f'{HOST}/api/mgr/sq_mgr/'
   # 3- 请求
   resp = requests.post(url, cookies =userCookie)
   print(resp.request.headers)#查看请求头的cookies
if __name__ == '__main__':
    #自己封装cookie
    userCookie = {'sessionid':userSessionId,'token':'123456'}
    add_lesson(userCookie)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章