懵了,面试官问我Redis怎么测,我哪知道!

有些测试朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么?

redis是一个key-value类型的高速存储数据库。
redis常被用做:缓存、队列、发布订阅等。

所以,“redis要怎么测试?”这个问题就可以转化为:

  • 缓存怎么测试?
  • 队列怎么测试?
  • 订阅怎么测试?

在我所接触的技术栈中,发布订阅很少用redis的,我们主要说一说缓存和队列。

01、缓存的分类

缓存有几种类型:文件缓存、数据库缓存、内存缓存、浏览器缓存。

浏览器缓存指的是浏览器自身的缓存能力。现代浏览器为了加快页面加载速度,往往会把css、js等资源文件下载一次之后缓存一段时间,直到缓存失效或者请求明确告知需要更新。

通过后端语言直接渲染smarty等模板渲染方式输出界面的,一般都会选择文件类型缓存。

图--文件缓存

随着大前端技术迅速发展,前后端分离越来越流行,smarty渲染的方式使用越来越少,对后端服务的接口响应时间要求也越来越高,文件缓存不再适用这种场景,数据库缓存越来越流行。

数据库缓存目前最常见的:redis和memcached。它们都是分布式的key-value高速缓存系统。

上图--redis缓存

内存缓存跟数据库缓存也是类似的,但受技术栈限制,比如Java可以使用,并且Java中使用非常频繁,但PHP无法使用。内存缓存比数据库缓存更快,但因为内存不可能一直增加,所以限制更多,稍不注意就会出现内存泄漏等问题。

在实际的使用过程中,Java接口往往会将部分高频数据塞到内存缓存中作为一级缓存,次高频数据塞到redis中作为二级缓存,最后再从db查询数据。

上图--组合使用

缓存的作用:
从上面的内容你可能已经知道,缓存最重要的两个作用:加快访问速度、减少服务器和db压力。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

02、缓存的使用场景

你可能会问,上面这些跟测试没啥关系啊?不,我认为了解上面的内容对测试还是有帮助的。你知道在技术实现上,什么时候应该加缓存,什么时候不应该加缓存吗?这就是对一个接口的技术把控,不光开发需要知道,测试人员也一样。

如果一个应该添加缓存的接口没有添加缓存在压测之前被你提前发现了,你不觉得自豪吗?其实跟缓存的作用一一对应,当接口的qps较高(比如超过100)或者对响应速度有要求,或者服务器性能、db性能较差的,都可以尝试使用缓存解决问题。

我举几个例子说明:

1、微信新版本中,个人中心多了一个“状态”功能。

微信的用户体量非常庞大,访问qps非常高,几十万人在同一秒访问,不可能每次都去查询数据库。

类似这种需求,一般会是这样的做法:先把用户的状态数据缓存在app中(浏览器缓存),在某个时间段通过主动推或者被动拉的方式调用后端接口请求“状态”数据;接口从redis/memcached的缓存中读取数据并返回;如果数据量不那么庞大,接口可以直接从内存缓存中读取数据并返回;数据返回后,再把用户app中的缓存更新。

上图--示例1

2、有一个小型电商的商品管理后台列表页面,访问人数不多,sku改动频次很低,可能3天才被访问几十次。这种场景一不需要使用缓存,二在商品信息被更新之后需要立即看到更新后的数据,不适合使用缓存,所以不建议使用缓存。

3、同样的电商管理后台,这次是一个统计页面,统计昨天/今天/近一周的商品销售情况。

这个场景可以分情况来看,有多种不同的解决方案。

(我们抛开大数据统计的各类技术方案,简单实现一个系统的统计功能)

  • 不需要实时统计
    只需要定时统计一次即可,比如只看昨天一天统计数据:可以由定时脚本统计之后直接存储在db,需要查看统计数据时直接查询db即可
  • 需要查询实时统计数据
    但需要查询的各个统计sql执行效率满足预期:每次查看数据直接查询db即可,此时db压力不大
  • 需要查询实时统计数据
    且因业务数据庞大,各个统计sql执行效率非常低或无法直接统计:可以汇总各个指标,将统计值维护在缓存中,比如需要销量信息,每售出一件商品,销量统计值缓存+1,查看统计数据时查询此时的缓存即可

03、缓存的生成方式

了解到缓存的使用场景之后,我们来说说缓存的生成方式。

一般来说缓存有两种使用方式,我简单概括为:外面里面

先来说说一个接口的请求到了程序里,是怎么处理的:

上图--程序处理流程

这是一个典型的MVC,由Controller接收和处理请求数据,由Service处理Model中获取的数据,再由View输出。

对不同场景,我们可以采取多种方式,在多个节点增加不同的缓存,来解决不同的问题。

比如,针对请求参数多变,返回的数据如果跟请求参数强相关,适合在“外面”(请求参数过滤之后)缓存查询到的数据。这类数据一般缓存时间短,比如缓存5分钟。主要应对相同请求参数在短时间内的重复请求。如果遇到请求攻击,即使这个缓存有效期只有1秒,也是很有效的,能挡住大量的请求。

上图--在“外面”缓存

比如,针对请求参数变化不大,返回的数据跟db中存储的数据很接近的情况,适合在“里面”缓存数据,也就是在更新db的同时更新缓存,这种情况最优的状态下,只需要读缓存就够了,不需要跟db直接交互,能大大缓解db压力。这种缓存有效期可以设置很长。

上图--在“里面”缓存

04、缓存的更新方式

说完生成,再来说说缓存的更新。缓存在生成之后,正常都不会一成不变,所以需要对缓存进行更新。

有几种更新方式:

  • 过期后自动更新:这是最懒的更新方式。通过设置缓存有效期,让缓存失效后通过新的请求自动创建新的缓存。
  • 删除缓存:在更新db数据后,直接删除缓存,通过新的请求自动创建新的缓存。
  • 重新设置缓存:在更新db数据后,直接重新设置缓存。

05、redis缓存测试点

1、性能测试角度

缓存增加/更新功能是否正确,查看缓存数据是否正确

  • 增加相关日志,查看日志
  • 后门接口工具
  • 使用命令行,memcached和reids可以登录后,直接查看

缓存删除

  • 缓存有效,验证相关业务功能
  • 缓存被删除,验证相关业务功能
  • 缓存过期失效,memcached 和redis 可以设置失效时间,查看失效时间有没有,对不对

超量淘汰机制:缓存达到上限怎么处理

缓存穿透

缓存雪崩

redis缓存服务停掉

缓存超时

缓存数据被误修改后,快速恢复到指定版本

缓存数据被误删除后,快速恢复数据

2、Redis功能测试角度

  • redis数据生效时,读取是否正确
  • redis数据不存在,能否正常从db中读取到正确的值,并正确写入Redis和返回给上层
  • 数据在redis和db中都不存在时的表现是否正常
  • 删除数据时,redis和db的数据是否一致

前言

在自动化测试中,自动化测试用例设计原则就是:执行过程时不能存在依赖顺序。那么如果测试用例需要按照指定顺序执行,这个时候应该怎么做呢?

目前单元测试框架中UnitTest没有办法改变测试用例的执行顺序,但是另一个单元测试框架Pytest可以做到,辅助测试人员更改测试用例的执行顺序。

今天小编简单的介绍几种方法,教你如何通过Pytest进行更改自动化测试用例的执行顺序。

pytest

Pytest的执行顺序想必大家都清楚,是通过ascii码进行收集的,然后通过文件中从上往下的执行顺序进行运行,我们只需要将我们的测试用例在编写时,按照从上往下的顺序进行编写。

# coding:utf-8import pytestdef test_a():    print('测试用例01')def test_b():    print('测试用例02')def test_c():    print('测试用例03')

(左右滑动查看完整代码)

通过运行后发现,顺序是按照从上往下的顺序依次执行。

pytest-ordering

pytest-ordering属于Pytest的一个插件,其目的就是帮助我们控制自动化测试用例的执行顺序,而且使用起来也比较简单。

安装:pip install pytest-ordering

/

使用方法

/

使用方法比较简单,我们只需要在编写好的测试用例前加上一个装饰器,然后通过改变装饰器传入的参数进行控制其用例执行的顺序。

小编这里拿到上方的用例,我们将从下往上的执行。

# coding:utf-8import pytest@pytest.mark.run(order=3)def test_a():    print('测试用例01')    @pytest.mark.run(order=2)def test_b():    print('测试用例02')    @pytest.mark.run(order=1)def test_c():    print('测试用例03')

(左右滑动查看完整代码)

通过执行测试用例会很清楚的看到,我们已经将测试用例的执行顺序改变了。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

pytest_collection_modifyitems

pytest_collection_modifyitems属于Pytest的钩子函数,这个函数可以收集我们的测试用例,收集完成后可以对其进行一些修改和排序功能,下面小编简单的介绍该使用方法。

/

使用方法

/

首先需要将pytest_collection_modifyitems这个函数放入到conftest.py文件中,然后对其进行二次开发,这里小编通过倒叙的形似修改了收集到的测试用例,从而改变测试用例的执行顺序。

# conftest.py# coding:utf-8def pytest_collection_modifyitems(session, items):    print("收集到的测试用例:%s"%items)    # 修改执行顺序    items.reverse()    for i in items:        print('收集到测试用例名称:%s' %i.name)

(左右滑动查看完整代码)

编写3个简答的测试用例,通过命令行的方式进行运行,并且会发现也将我们的测试用例顺序改变和收集到了我们的测试用例相关信息。

# coding:utf-8import pytestdef test_a():    print('测试用例01')def test_b():    print('测试用例02')def test_c():    print('测试用例03')

(左右滑动查看完整代码)

总结

小编通过简单的案例介绍了如何在Pytest中改变测试用例的执行顺序。

当然上述方法并不是唯一的方法,只是提供一个简单的思路,小编还是希望大家编写测试用例时注意不要互相依赖,这样的话执行顺序就可以随机执行,保证我们的测试用例不受其他用例的干扰而成功执行。感谢您的阅读,希望本篇文章对您有所帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C/C++笔试练习】内联函数、哪些运算符不能重载、拷贝构造函数、const类型、函数重载、构造函数、空类的大小、井字棋、密码强度等级

文章目录 C/C笔试练习选择部分(1)内联函数(2)哪些运算符不能重载(3)拷贝构造函数(4)const类型(5)函数重载(6)构造函数(7&a…

云数据安全:在数字时代保护您的宝贵资产

在数字化时代,云计算已经成为企业和个人数据存储和处理的主要方式。然而,与之相伴而来的是日益严峻的数据安全挑战。本文将探讨云数据安全的重要性以及如何在云环境中保护您的数据。 一、云计算的崭新时代 云计算为组织提供了无与伦比的灵活性和效率&…

Elasticsearch 作为 GenAI 缓存层

作者:JEFF VESTAL,BAHA AZARMI 探索如何将 Elasticsearch 集成为缓存层,通过降低 token 成本和响应时间来优化生成式 AI 性能,这已通过实际测试和实际实施进行了证明。 随着生成式人工智能 (GenAI) 不断革新从客户服务到数据分析…

大数据毕业设计选题推荐-智慧消防大数据平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

迅为iTOP-RK3588开发板多屏同显多屏异显异触

迅为iTOP-RK3588开发板多屏同显多屏异显异触 iTOP-RK3588开发板采用四核Cortex-A76处理器和Cortex-A55架构,芯片内置VOP控制器,最多可以支持7个屏幕显示,支持HDMI、LVDS、MIPI、EDP四种显示接口的多屏同显、异显和异触,可有效提高…

如何查看网站的https的数字证书

如题 打开Chrome浏览器,之后输入想要抓取https证书的网址,此处以知乎为例点击浏览器地址栏左侧的锁的按钮,如下图 点击“连接是安全的”选项,如下图 点击“证书有效”选项卡,如下图 查看基本信息和详细信息 点击详细信…

点亮一个灯

.text .global _start _start: RCC时钟使能 GPIOE RCC_MP_AHB$ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) ORR R1,R1,#(0x1<<5) STR R1,[R0]设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BI…

Geotrust证书

GeoTrust是著名的证书颁发机构DigiCert的品牌。GeoTrustSSL产品在Internet上提供从基本域名验证到扩展验证SSL标准支持的最高级验证的安全性。 GeoTrust OV&#xff08;组织验证&#xff09;证书验证域所有权和组织的存在。在颁发证书之前&#xff0c;会检查该组织在公共数据库…

商业计划书PPT怎么做?这个AI软件一键在线生成,做PPT再也不求人!

商业计划书是一份重要的书面文件&#xff0c;它通常被用作商业估值、筹资和进一步扩大业务的基础。一个好的商业计划书能够让团队向投资者、潜在客户和业务合作伙伴展示其企业的价值&#xff0c;并且清楚地阐述企业的产品或服务能够如何满足市场需求。作为商业计划书的重要组成…

Java 数据结构篇-实现双链表的核心API

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 双链表的说明 1.1 双链表 - 创建 1.2 双链表 - 根据索引查找节点 1.3 双链表 - 根据索引插入节点 1.4 双链表 - 头插节点 1.5 双链表 - 尾插 1.6 双链表 - 根据索引来…

时间序列预测(1) — 时间序列预测研究综述

目录 1 什么是时间序列预测? 2 时间序列预测的应用场景与分类 3 时间序列数据的特性 4 时序预测评价指标 5 基于深度学习的时间序列预测方法 5.1 卷积神经网络 5.2 循环神经网络 5.3 Transformer类模型 1 什么是时间序列预测? 时间序列&#xff1a;指对某种事物发展…

下一代图片格式AVIF,赶紧用起!

介绍AVIF图片格式的特点和在Web端显示AVIF格式图片的两种方案。 1 简介 AVIF是一种基于AV1视频编码的新图像格式&#xff0c;相对于JPEG、Wep等图片格式压缩率更高&#xff0c;并且画面细节更好。AVIF通过使用更现代的压缩算法&#xff0c;在相同质量的前提下&#xff0c;AVI…

对比了10+网盘资源搜索工具,我最终选择了这款爆赞的阿里云盘、百度网盘、夸克网盘资源一站式搜索工具

盘友圈&#xff08;https://panyq.com&#xff09;是一个综合性的网盘搜索站&#xff0c;与其他网盘搜索工具相比&#xff0c;它具有多个独特的优点&#xff0c;使其成为用户们首选的平台。 首先&#xff0c;盘友圈汇集了阿里云盘、百度网盘和夸克网盘等主流网盘资源&#xff…

Git的进阶操作,在idea中部署gie

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《git》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这…

【Linux网络】手把手实操Linux系统网络服务DHCP

目录 一、什么是dhcp 二、详解dhcp的工作原理 三、dhcp的实操 第一步&#xff1a;3台机器的防火墙和安全机制都需要关闭&#xff01;&#xff01;&#xff01; 第二步&#xff1a;Linux下载dhcp软件&#xff0c;并查看配置文件位置 第三步&#xff1a;读配置文件&#xf…

electron安装报错:Electron failed to install correctly...解决方案

问题描述&#xff1a; 按照官方文档在yarn dev时报错&#xff1a; 一般遇到Electron failed to install correctly&#xff0c;please delete node_moules/electron and try installing again这种错误时&#xff0c;就是electron本体没有下载成功 解决方案&#xff1a; 1、…

新品上市|米尔RZ/G2UL核心板上市,助力工业4.0发展!

浩瀚的芯片海洋中能被人记住的寥寥无几&#xff0c;那些在人们脑海中留下印记的往往是踩中了时代的脉搏。32位ARMv7架构的A7/A8系列处理器自发布以来&#xff0c;以ARM9处理器的价格&#xff0c;升级了工业领域绝大部分应用需求&#xff0c;成为最近十年最受欢迎的通用工业级AR…

使用反射调用私有内部类方法

使用反射调用私有内部类方法 通过反射机制调用私有内部类方法,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法 🍓情况一: 注意这里的内部类是私有静态内部类 待测类如下: package jj;import java.lang.reflect.Constru…

深度学习之基于YoloV5的火灾检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 火灾检测系统基于YoloV5的介绍 火灾检测是一项重要的安全任务&#xff0c;它旨在及时发现和报警火灾风险。基于深度…

SQL第四次上机实验

1.查询借阅了计算机类或者文学类图书的读者的借书证号 USE TSGL GO SELECT DISTINCT Reader.Lno FROM Book,Lend,Reader WHERE Book.ISBNLend.ISBN AND Lend.LnoReader.Lno AND Class 计算机类 OR Class 文学类2.查询同时借阅了计算机类和文学类图书的读者的借书证号 USE T…