python自动化测试如何做数据缓存 ?这个第三方包推荐给你,方便又简单!

python自动化测试如何做数据缓存 ?这个第三方包推荐给你,方便又简单。

1.数据缓存说明

数据缓存可以说也是项目开发中比不可少的一个工具 ,像我们测试的系统中 ,你都会见到像Redis一样的数据缓存库 。使用缓存数据库的好处不言而喻,那就是效率高 ,简单数据直接放在缓存中 ,存取简单方便 。

在python中也有这样的缓存库 ,接下来我们介绍的这个第三方包就是一个缓存库 ,它也可以将数据临时缓存到内存中,可以做到随存随取。做自动化测试也是一样,你肯定也离不开这样的包 ,因为像token这样的值,存储在缓存中是最方便的 。

2.cacheout介绍

1.下载安装

 
  1. # 下载

  2. pip install cacheout

  3. # 验证

  4. pip show cacheout

2 . 导包

from cacheout import Cache

3.创建cache对象

cache = Cache()     # 创建cache对象,这样的对象创建都使用的是默认值

Cache()的默认参数有:

  • maxsize : 缓存默认值大小为256
  • ttl : 生存时间 ,过期关闭
  • timer :计时器 ,以s为单位
  • default : 缺少键名的默认值为None
cache = Cache(maxsize=256, ttl=0, timer=time.time, default=None)  # defaults

不过我们创建cache对象时一般都会使用默认值 ,也没必须修改这些参数

 
  1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。

  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受

  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛

  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙

  5. 可以免费学习!划重点!开源的!!!

  6. qq群号:455787643【暗号:csdn999】

3.cacheout功能
 
  1. # 数据缓存 :cacheout

  2. """

  3. 作用 :就是将全局的变量值临时保存起来(内存中) ,以便跨文件访问 。

  4. 下载安装 :

  5. pip install cacheout

  6. pip show cacheout

  7. # 导包

  8. from cacheout import Cache()

  9. # 初始化对象

  10. cache = Cache()

  11. 主要功能 :

  12. cache.set(key,value) # 将key=value形式保存到内存中

  13. cache.get(key) # 获取键名对应的值。

  14. cache.has(kye) # 判断键是否存在

  15. cache.items() :返回所有的键值对

  16. cache.keys() : 返回所有的键名

  17. cache.values() : 返回所有的值

  18. cache.delete(key) : 删除其中的一组键值队

  19. cache.clear() : 删除所有的键值对

  20. cache.popitem() : 移除所有的键值对

  21. cache.copy() : 拷贝所有的键值对

  22. cache.size() : 查看已缓存的键值对数

  23. cache.add() : 添加一对键值对

  24. cache.add_many(items) : 添加多组键值对

  25. cache.delete_man(iteratee) : 删除多组键值对

  26. cache.get_many(items) : 获取多组键值对

  27. cache.set_many(items) : 设置多组键值对

  28. cache.full() : 判断键值对是否已满,返回bool类型,若存放的键值对已满,返回TRUE,否则返回FALSE

  29. cache.setup()

  30. =====以下为属性=======

  31. cache.default : 查看参数default的默认值

  32. cache.maxsize : 查看缓存最大数

  33. cache.timer : 查看计算器

  34. cache.ttl : 查看ttl值

  35. """

  36. from cacheout import Cache

  37. cache = Cache()

  38. # 设置键值对到缓存中

  39. cache.set('a',10)

  40. cache.set('b',20)

  41. # 查看所有的键值对

  42. print(cache.items()) # 输出 :odict_items([('a', 10), ('b', 20)])

  43. # 获取键名a对应的值

  44. print(cache.get('a')) # 输出 :10

  45. # 获取键名c对应的值

  46. print(cache.get('c')) # 输出 :None

  47. # 拷贝当前缓存中的所有键值对

  48. x = cache.copy()

  49. print(x) # 输出 :odict_items([('a', 10), ('b', 20)])

  50. # 查看键值对数 ,即缓存的键值对有几对

  51. print(cache.size()) # 输出 :2

  52. # 添加键值对

  53. cache.add('c',123)

  54. print(cache.items()) # 输出 :odict_items([('a', 10), ('b', 20), ('c', 123)])

  55. print("============")

  56. print(cache.full())

  57. # 使用和执行批量操作:cache.set_many()cache.get_many()cache.delete_many()

  58. cache.set_many({'a': 1, 'b': 2, 'c': 3})

  59. assert cache.get_many(['a', 'b', 'c']) == {'a': 1, 'b': 2, 'c': 3}

  60. cache.delete_many(['a', 'b', 'c'])

  61. assert cache.count() == 0

  62. # 使用复杂的过滤:cache.get_many()cache.delete_many()

  63. import re

  64. cache.set_many({'a_1': 1, 'a_2': 2, '123': 3, 'b': 4})

  65. assert cache.get_many('a_*') == {'a_1': 1, 'a_2': 2}

  66. assert cache.get_many(re.compile(r'\d')) == {'123': 3}

  67. assert cache.get_many(lambda key: '2' in key) == {'a_2': 2, '123': 3}

  68. cache.delete_many('a_*')

  69. assert dict(cache.items()) == {'123': 3, 'b': 4}

  70. #使用以下方法管理多个缓存:CacheManager , 以下功能需要在python>=3.7版本中才支持

  71. from cacheout import CacheManager

  72. cacheman = CacheManager({'a': {'maxsize': 100},

  73. 'b': {'maxsize': 200, 'ttl': 900},

  74. 'c': {})

  75. cacheman['a'].set('key1', 'value1')

  76. value = cacheman['a'].get('key')

  77. cacheman['b'].set('key2', 'value2')

  78. assert cacheman['b'].maxsize == 200

  79. assert cacheman['b'].ttl == 900

  80. cacheman['c'].set('key3', 'value3')

  81. cacheman.clear_all()

  82. for name, cache in cacheman:

  83. assert name in cacheman

  84. assert len(cache) == 0

4.项目实践

在项目中的很多地方都会用到cacheout ,就比如最常见的就是处理token值 。

第一步 :调用登录接口将token值先缓存起来

 
  1. # 实现登录

  2. def login(self):

  3. """

  4. 请求登录,返回结果,将token缓存起来

  5. :return:

  6. """

  7. # 1. 请求登录

  8. login_path = '/admin/auth/login'

  9. login_url = self.get_url(login_path)

  10. result = self.post(login_url,LOGIN_INFO)

  11. # 2. 进行判断

  12. if 0 == result.get('errno'):

  13. logger.success("请求登录接口成功")

  14. token = result.get('data').get('token') # 获取token的值

  15. cache.set('token',token) # 缓存token,为了后面被调用使用

  16. else:

  17. logger.error("登录失败:{}".format(result))

  18. return result

第二步:在请求头中将token值传进去,将token值获取到最终传入到headers中。

 
  1. # 实现请求头的处理

  2. def _get_headers(self):

  3. """

  4. 将请求头中数据以字典形式返回,包括键值对 :Conetent-Tpye ,X-Litemall-Admin-Token

  5. :return:

  6. """

  7. headers = {"Content-Type":"application/json"}

  8. token = cache.get('token') # 获取缓存中的token值

  9. if token:

  10. headers.update({'X-Litemall-Admin-Token':token})

  11. return headers

  12. return headers

5.项目总结

至此,我们已经实现了五步了 

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_牛客CM26 二进制插入

目录 牛客CM26 二进制插入 解析代码 牛客CM26 二进制插入 二进制插入_牛客题霸_牛客网 解析代码 class BinInsert { public:int binInsert(int n, int m, int j, int i) {// 1 2 4 8 16 32 64 128 256 512 1014// 1024 2 4 32 // 1024 4 8 64 1024 76// 1000000000…

面向切面编程(AOP)介绍(横切关注点、通知(增强)、连接切入点、切面)

1. 面向切面编程思想AOP AOP:Aspect Oriented Programming面向切面编程 AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客:JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

Intellij IDEA 中 git 操作的快捷键

1.添加新建的文件 即add 操作 shift alt a 2.提交操作 即 commit操作 ctrl k 在窗口中可以用feature来声明此次更新的内容 3.提交操作 即push操作 ctrl shift k 4.拉去远程分支操作 即pull操作 ctrl t

Spring学习 基础(三)MVC

5、Spring MVC 传统Web模式: Model:系统涉及的数据,也就是 dao 和 bean。View:展示模型中的数据,只是用来展示。Controller:处理用户请求都发送给 ,返回数据给 JSP 并展示给用户。 随着 Spring 轻量级开发…

C if 语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 语法 C 语言中 if 语句的语法: if(boolean_expression) {/* 如果布尔表达式为真将执行的语句 */ }如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,…

poll开发服务器

int poll(struct pollfd *fds, nfds_t nfds, int timeout); 函数说明:与select类似,委托内核监控可读,可写,异常事件。 函数说明: fds:一个struct pollfd结构体数组的首地址 struct pollfd { …

天猫淘宝详情接口API揭秘:实现个性化商品推荐!

天猫淘宝作为中国最大的电商平台,拥有庞大的商品库存和众多用户,为了提高用户购物体验并满足其个性化需求,天猫淘宝推出了详情接口API,通过智能算法实现个性化商品推荐。联讯数据将为您揭秘详情接口API的实现原理和功能。 个性化商…

信息抽取在旅游行业的应用:以景点信息抽取为例

开源项目推荐 今天先给大家推荐一个开源项目,多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口,功能强大,欢迎体验。 https://gitee.com/stonedtx/free-nlp-api 场景描述 在旅游行业…

【新书推荐】17.3 字符串操作举例

本节内容:字符串操作举例。 ■例3:接收字符串去掉空格后逆向输出,t17-3.asm。 ■例4:字符串拼接,t17-4.asm。 ■例5:判断子串,t17-5.asm。 17.3.1 例3:接收字符串去掉空格后逆向输出…

如何关闭 Visual Studio 双击高亮

[问题描述]: 最近 Visual Studio 更新后,双击选中关键字快要亮瞎我的眼睛了 👀👀 [解决方法]: 摸索了一下,找到了关闭的方法:工具 → 选项 → 文本编辑器 → 常规,然后取消 勾选 sel…

蓝桥杯-串的处理,幸运数字

参照大佬写法: #include<iostream> #include<cstring> using namespace std; int main(){string str;getline(cin,str);//可以将带有空格的string输入for(int i0;i<str.size();i){if(i0&&str[i]>a&&str[i]<z) str[i]-32;//单词首字母小…

如何使用LEAKEY轻松检测和验证目标服务泄露的敏感凭证

关于LEAKEY LEAKEY是一款功能强大的Bash脚本&#xff0c;该脚本能够检测和验证目标服务中意外泄露的敏感凭证&#xff0c;以帮助广大研究人员检测目标服务的数据安全状况。值得一提的是&#xff0c;LEAKEY支持高度自定义开发&#xff0c;能够轻松添加要检测的新服务。 LEAKEY主…

【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件

文章目录 一、Cloth组件解释基本介绍出于性能的考虑, 可以对Cloth产生影响的Collider只有两种打开编辑模式绘制 二、基本使用1. 创建出一个空物体2. 在空物体上添加cloth组件&#xff0c;可以直接点击Add Component搜索cloth添加&#xff0c;也可以在工具栏 Component–>phy…

Android UI自动化测试框架—SoloPi简介

1、UI自动化测试简介 软件测试简介 ​软件测试是伴随着软件开发一同诞生的&#xff0c;随着软件规模大型化&#xff0c;结构复杂化&#xff0c;软件测试也从最初的简单“调试”&#xff0c;发展到当今的自动化测试。 ​ 自动化测试是什么呢&#xff1f;自动化测试是把以人为…

图分割 Graph Partition 学习笔记1

文章目录 前言一、graph-partition是什么&#xff1f;二、具体分类三、graph-partition的意义参考链接 前言 最近在学习图论划分的方法&#xff0c;碰巧搜索到了这个算是对我而言全新的一个体系&#xff0c;在这里将逐步记载自己的学习资料和进度&#xff0c;希望和大家一起探讨…

HAProxy集群与常见的Web集群软件调度器对比

一.常见的Web集群调度器 Web集群调度器分为软件和硬件&#xff1a; 1.常用软件调度器&#xff1a; &#xff08;1&#xff09;LVS&#xff1a;性能最好&#xff0c;搭建复杂 &#xff08;2&#xff09;Nginx&#xff1a;性能较好&#xff0c;但集群节点健康检查功能呢不强&…

Rust教程:How to Rust-从开始之前到Hello World

本文为第0篇 专栏简介 本专栏是优质Rust技术专栏&#xff0c;推荐精通一门技术栈的蟹友&#xff0c;不建议基础的同学&#xff08;无基础学Rust也是牛人[手动捂脸]&#xff09; 感谢Rust圣经开源社区的同学&#xff0c;为后来者提供了非常优秀的Rust学习资源 本文使用&…

为什么不用 index 做 key?

“在 Vue 中&#xff0c;我们在使用 v-for 渲染列表的时候&#xff0c;为什么要绑定一个 key&#xff1f;能不能用 index 做 key&#xff1f;” 在聊这个问题之前我们还得需要知道 Vue 是如何操作 DOM 结构的。 虚拟DOM 我们知道&#xff0c;Vue 不可以直接操作 DOM 结构&am…