前言
昨天介绍了《Windows&Linux&MacOS如何快速搭建Redis》 。搭建完成 , 往往会出现同一内网下其他主机无法连接redis-server的情况 , 原因可能有:protected-mode(保护模式)已开启、bind绑定了无效的主机地址、bind设置了本地回环地址……为了彻底弄清楚protected-mode和bind对远程访问redis-server的影响,我特地设计了一些测试场景,像测试产品需求一样测试这两项配置 。
一、redis配置项bind和protected mode解读
同软件测试的流程一样本地连接自动获取ip地址,在测试设计前,需要先弄懂产品需求(redis配置项bind和protected-mode)是什么
二、测试场景设计
弄清楚了redis配置项bind和protected-mode的需求,就可以进行测试场景设计了
1.验证场景如下:
redis所在主机地址为:192.168.1.123
运行python测试代码的主机地址为:192.168.1.122
场景
前提:redis.conf配置
测试步骤
期望结果
测试结果
1.开启保护模式 , 生效
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
连接失败
2.开启保护模式,不生效(设置bind ip)
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
1.连接成功
2.插入成功
3.value为0
3.开启保护模式 , 不生效(设置访问密码)
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
【保护模式 像测试产品需求一样测试Redis配置项protected mode】1.连接成功
2.插入成功
3.value为0
4.绑定无效ip
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
连接失败
5.绑定本地回环地址-开启保护模式
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
连接失败
6.绑定本地回环地址-关闭保护模式
1.通过python代码远程连接redis
2.插入键值对:{“test1”:0}
3.获取键test1的值
连接失败
2.python测试代码如下
通过一段Python代码简单测试redis连通性:
import redisclass RedisHandler:def __init__(self, host, port=6379, db=0):self.client = redis.StrictRedis(host=host, port=port, db=db)# 生成客户端连接,StrictRedis()默认使用连接池,不必再单独使用ConnectPooldef set_string(self, name: str, value, ex=None, px=None, nx=False, xx=False) -> None:"""缓存中写入str(单个):param name: 缓存名称:param value: 缓存值:param ex: 过期时间(秒):param px: 过期时间(毫秒):param nx: 如果设置为True,则只有name不存在时,当前set操作才执行(新增):param xx: 如果设置为True,则只有name不存在时 , 当前set操作才执行(修改):return:"""self.client.set(name, value=https://www.30zx.com/value, ex=ex, px=px, nx=nx, xx=xx)def get_key(self, name):"""读取缓存"""print(self.client.get(name))if __name__ == '__main__':redis = RedisHandler(host='192.168.1.123')redis.set_string("test1", 0)redis.get_key("test1")
三、验证protected mode1.保护模式生效-连接Redis失败
① 设置redis.conf
② 测试连通性
执行后报错如下:
通过上图可以看出:
连接Redis被拒绝了,此时Redis正在保护模式下运行,因为已启用保护模式,未指定绑定地址 , 未设置访问密码 。在此模式下,仅接受来自环回接口的连接,即本地连接 。验证通过,与期望的结果一致 。
2.保护模式不生效(设置bindip)-连接Redis成功
① 设置redis.conf
② 测试连通性
尽管protected mode处于开启状态,但是因为bind绑定了本机IP地址,所以保护模式是不生效的,客户端连接redis时 , 也能够连接成功,如下图所示,连接redis成功,并成功获取到名为test1的key的value值为0,验证通过,与期望的结果一致:
3.保护模式不生效(设置访问密码)-连接Redis成功
① 设置redis.conf
② 测试连通性
暂未验证
尽管protected mode处于开启状态,但是因为设置了访问密码,所以保护模式理论上是不生效的,即本地内网其他主机仍可以远程连接访问 。
4.绑定无效IP-无法连接Redis
① 设置redis.conf
② 测试连通性
此时redis配置的是无效的IP地址 , 服务无法成功启动,所以客户端连接被拒 。验证通过,符合预期 。
5.绑定本地回环地址、开启保护模式-无法连接Redis
① 设置redis.conf
② 测试连通性
通过上图可以看出:由于绑定了本地回环地址本地连接自动获取ip地址,只能本地连接,所以客户端在连接redis的时候被拒了 。验证通过,与期望结果一致 。
6.绑定本地回环地址、关闭保护模式-无法连接Redis
① 设置redis.conf
② 测试连通性
通过上图可以看出:由于绑定了本地回环地址,只能本地连接,所以客户端在连接redis的时候被拒了 。验证通过 , 与期望结果一致 。
小结以上就是简单验证“redis配置项protected-mode和bind二者之间的相互联系以及对远程访问redis-server的影响”的过程,当然如果严格意义上的软件测试,需要考虑的场景肯定不止以上这些 , 比如存在两个网卡的情况;尽管强大、稳定如redis这般的产品,不会出现一些上述测试场景中所覆盖到的低级错误,但作为测试人员,对待任何待测产品 , 都要时刻抱有怀疑的态度,用结果说话、用事实说话;由场景一、二、三可以得出结论:保护模式必须在【① protected mode设置为yes② 没有bind ip③ 没有设置访问密码】三者同时满足时才能生效 , 保护模式生效后,其他主机无法连接访问redis;由场景四可以得知 , 当bind绑定了非本机地址时,也会导致远程连接redis-server失败(这不是废话嘛);由场景五、六可以得出结论:bind绑定本地回环地址(127.0.0.1),与是否设置protected mode无关,一旦绑定本地回环地址,其他主机便不可再访问redis;所以 , 下次再遇到redis连接失败或访问被拒的情况,你知道该如何排查、处理了吗?
更多干货 , 欢迎WX关注【测试开发实战】
本文到此结束,希望对大家有所帮助!
猜你喜欢
- 家里适合摆什么植物 适合摆放在家中的植物
- 哪些人不适宜吃海参?
- 支付宝短信喊你实名验证 这是真事但也小心骗子浑水摸鱼
- 10月起,这5种房子或将不允许贷款,希望没有你买的
- 我们手机用荧石云添加录像机看画面录像机平台接入显示不在线
- 绿萝出现黄叶怎么办,绿萝出现黄叶的原因及解决办法
- 水痘、带状疱疹疫苗接种要点
- 男生下巴翘告诉你这样长相的人是什么性格
- 陈思文律师:二手房可以向银行申请按揭贷款吗?
