• Python接口测试学习笔记(四)


    本文学习笔记整理自【Python开发】接口测试教程

    一. cookies

    0. cookie扫盲:

    a. 保存在客户端, 一般由浏览器负责存储在本地

    b. 通常是加密存储, 不过因本地存储, 不宜保存敏感信息

    c. 哪些信息需要保存, 保存多久吗一般是有服务器决定, 所以http协议中的response header中有set-cookie域来指示浏览器保存cookie信息

    d. cookie保存在客户端本地的目的是为了下次访问网站的时候可以直接取出来, 上送服务器

    1. 抓取cookie

    登录cookie = 登录后的cookie - 登录前的cookie

    2. cookie组成

    Fiddler抓包只能看到cookie的name和value值

    完整的cookie组成结构如下:

    1 cookie = {u'domain':u'cnblogs.com',
    2 u'name':u'CNBlogsCookie',
    3 u'value':u'xxx',
    4 u'expiry':1491997887,
    5 u'path':u'/',
    6 u'httpOnly':True,
    7 u'secure':False}

    name:cookie的名称

    value: cookie对应的值, 动态生成的

    domain:服务器域名

    expiry:Cookie有效终止日期

    path: Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie

    httpOnly: 防脚本攻击

    secure: 在Cookie的标记该变量, 表面只有当浏览器和Web Server之间的通信协议为加密认证协议时, 浏览器才向服务器提交相应的Cookie, 当前这种协议只有一种, 即为HTTPS

    3. 添加登录cookie

    1. 先用get打开登录页面, 获取一部分cookie

    2. set里面参数按括号里面的参数

    coo = requests.cookie.RequestCookieJar()
    coo.set('cookie-name','cookie-value')
    s.cookie.update(coo)

    3. 用update方法添加登录的2个cookie

    二. session

    0. session扫扫盲

    1. session一般翻译成"会话"

    2. session是一种管理用户状态和信息的机制, session的数据保存在服务器端, 一般放在服务器的内存里

    3. 客户端和服务端通过一个sessionID来进行沟通, sessionID一般是一个较长的随机字符串(一般32或48字节)

    1. session保持会话

    跨请求情况:比如登录之后发帖, 这个发帖是依赖登录的(需要传登录cookie)

     1 # coding: utf-8
     2 
     3 import requests
     4 
     5 s = requests.session()
     6 
     7 login_url = "https://account.cnblogs.com/signin"
     8 head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
     9 r1 = s.get(url=login_url, header=head, verify=False)
    10 print(r1.cookies)
    11 
    12 # 添加cookie
    13 c = requests.cookies.RequestCookieJar()
    14 c.set("cookie-name", "cookie-value")
    15 
    16 # 添加cookie到session
    17 s.cookies.update(c)
    18 print(r1.cookies)
    19 
    20 # 验证是否登录成功
    21 post_url = ""
    22 r2 = s.get(post_url, verify=False)
    23 print(r2.text)

    2. session关联

    1. 用session保持会话:s=requests.session()

    2. 先get获取部分cookie

    3. 登录s.post()账号密码登录(或添加cookie绕过登录)

    4. 登录后继续发其他请求, 如s.get(), s.post()

    三. 重定向

    1. 未登录时候打开博客园编辑页面, 会跳转到登录页面

    2. 重定向的地址在response的headers里location 参数会告诉指向下一地址

    3. requests模块会自动处理重定向的请求, 可通过r.history查看重定向历史请求记录

     1 # coding: utf-8
     2 
     3 import requests
     4 
     5 s = requests.sessions()
     6 login_url = "https://i-beta.cnblogs.com/posts/edit"
     7 head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
     8 r1 = s.get(url=login_url, header=head, verify=False)
     9 # 禁止重定向:在get/post方法出加参数: allow_redirects=False (默认参数是True)
    10 # r1 = s.get(url=login_url, header=head, verify=False, allow_redirects=False)
    11 
    12 # 自动处理重定向的请求
    13 print(r1.status_code)
    14 
    15 # 历史请求记录, list类型
    16 print(r1.history)
    17 
    18 # 打印出每个重定向的内容
    19 for i in r1.history:
    20     print(i.status_code)
    21     print(i.url)

    四. token登录

    1. token: 一般app的登录, 都是用token来校验的

    2. post请求一定会带token参数, token位置不固定

  • 相关阅读:
    如何使用websocket实现前后端通信
    影响MySQL的性能(一)磁盘的选择
    springboot结合日志门面SLF4j和日志实现Logback的使用
    分享一个猜数字小游戏的脚本
    关于drop table *** purge (drop后不过回收站)
    关于DateBase link(dbLINK)及同义词
    关于数据更新(update)
    关于insert into(插入值)
    关于wm_concat(把一列的值,通过','进行分隔后,合并成一个值进行显示)
    关于PIVOT(用于行转列)
  • 原文地址:https://www.cnblogs.com/fayez/p/12235846.html
Copyright © 2020-2023  润新知