如何读取redis的手机号验证码数据,实现自动化登录测试

简介: 1、案例描述用户选择短信登录 !

 

1、案例描述

    • 用户选择短信登录 !

    image.gif编辑

     

      • 发送短信后,后端接口逻辑已把验证码缓存在redis, !

      image.gif编辑

       

        • apifox上定义对应下发登录短信接口短信登录接口
        • 下载地址:www.apifox.cn

        image.gif编辑

         

        image.gif编辑

         

          • 这时候问题就来了,怎么样才能让apifox自动获取下发登录短信接口对应的手机号的验证码,自动填充到短信登录接口code字段?

          image.gif编辑

           

          2、解决思路

            • 方案一:后端通过接口返回验证码,下发短信接口后再调用该接口去获取验证码(正式环境需要屏蔽该接口,没办法自动化正式环境接口)
            • 方案二:apifox直接访问redis获取数据;这需要在apifox添加扩展操作redis的jar包,参考:脚本调用其他语言( java、python、php 等) | Apifox 使用文档 (该方案比较可行)

            3、开始动手

              image.gif编辑

               

                • phonecode请求参数给为临时变量{{phone}}{{code}}

                image.gif编辑

                 

                image.gif编辑

                 

                  • 新建短信登录用例前置自定义脚本,这里的apifox-redis-1.0-SNAPSHOT.jar,就是第一步生成好的jar;脚本编写可以参考:前置脚本 | Apifox 使用文档
                  try {
                      // redis 连接配置
                      var redisConfig = "{"host":"192.168.181.130","password":"123456","database":0}";
                      // 获取当前登录的手机号
                      var phone = pm.variables.get("phone");
                      // 后端服务缓存验证码在redis的key
                      var key = "DEFAULT_CODE_KEY:" + phone;
                      console.log("redis key:", key);
                      // 执行jar包获取redis缓存数据
                      var jarResult = pm.execute('apifox-redis-1.0-SNAPSHOT.jar', [redisConfig, "GET", key]);
                      console.log("redis 缓存数据:", jarResult);
                      // 反序列化异常处理
                      var code = jarResult.substr(jarResult.length-7, 6);
                      // 自动填充验证码到登录接口的`code`字段
                      pm.variables.set("code", code);
                      console.log("验证码:", code);
                  } catch (e) {
                      console.error(e.message);
                  }

                  image.gif

                  image.gif编辑

                   

                    • 新增测试数据,这里新增手机号对应临时变量{{phone}}

                    image.gif编辑

                     

                      • 注意: 需要打开测试数据开关,后点击运行

                      image.gif编辑

                       

                        • 查看结果 !

                        image.gif编辑

                        image.gif编辑

                        image.gif编辑

                         

                        4、总结

                        apifox提供了非常好的自动化测试接口的功能

                        image.gif

                        image.gif编辑

                         

                        参考demo源码

                        # 后端接口服务源码
                        https://github.com/Atoms-Cat/softswitch-system
                        # apifox 扩展操作 redis jar源码 
                        https://github.com/Atoms-Cat/apifox-code

                        image.gif

                          相关文章
                          |
                          8月前
                          |
                          安全 数据管理 测试技术
                          告别蛮力:让测试数据生成变得智能而高效
                          告别蛮力:让测试数据生成变得智能而高效
                          655 120
                          |
                          缓存 NoSQL 关系型数据库
                          美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
                          美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
                          美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
                          |
                          9月前
                          |
                          存储 NoSQL 前端开发
                          Redis专题-实战篇一-基于Session和Redis实现登录业务
                          本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
                          532 3
                          Redis专题-实战篇一-基于Session和Redis实现登录业务
                          |
                          数据采集 存储 NoSQL
                          基于Scrapy-Redis的分布式景点数据爬取与热力图生成
                          基于Scrapy-Redis的分布式景点数据爬取与热力图生成
                          993 67
                          |
                          9月前
                          |
                          存储 测试技术 API
                          数据驱动开发软件测试脚本
                          今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
                          363 0
                          |
                          12月前
                          |
                          人工智能 缓存 自然语言处理
                          别再手搓测试数据了!AE测试数据智造系统揭秘
                          本文介绍如何通过构建基于大语言模型的测试数据智造Agent,解决AliExpress跨境电商测试中数据构造复杂、低效的问题,推动测试效率提升与智能化转型。
                          别再手搓测试数据了!AE测试数据智造系统揭秘
                          |
                          存储 缓存 NoSQL
                          告别数据僵尸!Redis实现自动清理过期键值对
                          在数据激增的时代,Redis如同内存管理的智能管家,支持键值对的自动过期功能,实现“数据保鲜”。通过`EXPIRE`设定生命倒计时、`TTL`查询剩余时间,结合惰性删除与定期清理策略,Redis高效维护内存秩序。本文以Python实战演示其过期机制,并提供最佳实践指南,助你掌握数据生命周期管理的艺术,让数据优雅退场。
                          624 0
                          |
                          存储 NoSQL 算法
                          Redis分片集群中数据是怎么存储和读取的 ?
                          Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
                          |
                          缓存 NoSQL 关系型数据库
                          Redis和Mysql如何保证数据⼀致?
                          1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
                          |
                          NoSQL Redis
                          Redis的数据淘汰策略有哪些 ?
                          Redis 提供 8 种数据淘汰策略: 淘汰易失数据(具有过期时间的数据) 1. volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 2. volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰 3. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 4. volatile-random:从已设置过期