当前位置: 首页 > news >正文

【自动化】自动化场景经验

1.先行了解:cookie,session,token

  • cookie:
    • 概念:是服务器产生的,存在在客户端的一段文本信息。格式是字典
    • 分类: 
      • 会话级即session:保存在内存,当浏览器关闭就会丢失
      • 持久化:保存在硬盘,当失效时间到了就会丢失
    • 如何鉴权?/如何与http建立联系的?
      • 客户端第一次访问服务器,服务器产生cookie并通过响应头的方法在set-cookie中传输到客户端,之后客户端请求服务器时会自动带上该cookie
    • 缺点: 信息保存在客户端,敏感信息不安全
    • 鉴权解决方案:
      • 取接口A的cookies并写入到yaml文件中;接口B读取yaml文件中的cookies并作为参数传递给请求参数Cookies
  • session:
    • 概念:服务器产生的且保存在服务器的.

    • 如何鉴权?
      • 客户第一次访问服务器的时候,服务器端保存一个加密的sessionid,通过cookie将sessionid保存到客户端。客户再次请求服务器端的时候只发送sessionId

    • 优点: 解决了cookie敏感信息保存在客户端不安全的问题

    • 缺点:用户体量大时,会导致服务器崩溃

    • 鉴权方案: 使用requests.seesion()自动接口关联cookie
      • class project:# 创建类变量 session对象session = requests.session()def func(self):project.seesion.request(method,url,data)
  • cookie与session的区别
    • 区别cookiesession
      存储位置保存在本地保存在服务器
      存取方式仅可保存ASCII码任意数据类型
      数据安全性相对较差相对较好
      有效期长时间存在会话结束/浏览器关闭
      存储大小一般不会超过4k无限制
  • token
    • 概念:服务器产生,保存在文件/数据库

    • 分类:

      • access_token:有15分钟时间限制

      • refresh_token:  有15天

    • 如何鉴权?
      • 用户登录后,发送一个token令牌,下次用户请求时带上token,服务器端解密

    • 鉴权方案:
      • 取接口A的响应头中的token并写入到yaml文件中;接口B读取yaml文件中的token并作为headers的参数传递

  • sign签名
    • 应用场景: 第三方支付,银行,金融等安全要求比较高的

2. 验证码的功能处理方式

  • 方式一: 去掉验证码(图片类/短信类)
  • 方式二: 设置万能码(固定的数字验证码/固定图片)
  • 方式三:添加登录成功的cookie
    • 在selenium中使用add_cookie()方法将用户名和密码写入到cookie中来跳过验证

3. 对数据库的校验,使用的场景

  • 用例断言
  • 脚本执行前后的数据初始化和清理
  • 相关接口是否执行成功

4.接口自动化遇到的问题?

  • Q:接口文档不完整
    • A:与开发人员沟通补充文档或者给出接口示例
  • Q:接口请求参数的多样性
    • A: 数据驱动,对请求参数自动化
  • Q: 因网络,服务器等原因导致的用例不稳定
    • A: 加入重试机制和日志记录功能,保证测试的稳定性
  • Q: 接口的错误处理
    • A: 加入异常处理机制
  • Q: 代码质量问题
    • A: 提高代码的可扩展性和可维护性,减少代码重复率
  • Q:接口的请求频率问题
    • A: 控制请求频率,防止系统崩溃
  • Q: 接口变更的频繁
    • A: 及时更新脚本CSDN

5

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MemFire Cloud,前端开发新纪元
  • 代码随想录Day31:56.合并区间、738.单调递增的数字
  • python实现生命游戏
  • ubuntu安装nginx
  • chatgpt和语言学
  • 【鸿蒙基础系列】鸿蒙基础组件
  • C# 中的抽象类和抽象方法
  • RK3576 芯片介绍
  • Android笔试面试题AI答之Kotlin(9)
  • Cookie 和本地存储,浏览器缓存
  • 三级_网络技术_18_路由器的配置及使用
  • HCIP-HarmonyOS Application Developer 习题(三)
  • Linux中ES的安装
  • 【信创】双系统下删除Windows只保留麒麟系统
  • Amazon VPC基础指南
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Java 网络编程(2):UDP 的使用
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mysql innodb 索引使用指南
  • nodejs实现webservice问题总结
  • Redis字符串类型内部编码剖析
  • select2 取值 遍历 设置默认值
  • SpiderData 2019年2月25日 DApp数据排行榜
  • text-decoration与color属性
  • v-if和v-for连用出现的问题
  • vue-router 实现分析
  • webpack4 一点通
  • 汉诺塔算法
  • 猴子数据域名防封接口降低小说被封的风险
  • 树莓派 - 使用须知
  • 思考 CSS 架构
  • 因为阿里,他们成了“杭漂”
  • 怎样选择前端框架
  • ​低代码平台的核心价值与优势
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #### golang中【堆】的使用及底层 ####
  • ###STL(标准模板库)
  • #stm32驱动外设模块总结w5500模块
  • #控制台大学课堂点名问题_课堂随机点名
  • %check_box% in rails :coditions={:has_many , :through}
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (SpringBoot)第二章:Spring创建和使用
  • (二)丶RabbitMQ的六大核心
  • (含笔试题)深度解析数据在内存中的存储
  • (回溯) LeetCode 40. 组合总和II
  • ****三次握手和四次挥手
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .cn根服务器被攻击之后
  • .net core 6 集成和使用 mongodb
  • .NET 设计模式初探