当前位置:首页 > 科技  > 软件

抛砖引玉:Redis 与 接口自动化测试框架的结合

来源: 责编: 时间:2023-09-18 21:41:49 210观看
导读接口自动化测试已成为保证软件质量和稳定性的重要手段。而Redis作为一个高性能的缓存数据库,具备快速读写、多种数据结构等特点,为接口自动化测试提供了强大的支持。勇哥这里粗略介绍如何结合Python操作Redis,并将其应用

接口自动化测试已成为保证软件质量和稳定性的重要手段。而Redis作为一个高性能的缓存数据库,具备快速读写、多种数据结构等特点,为接口自动化测试提供了强大的支持。勇哥这里粗略介绍如何结合Python操作Redis,并将其应用于接口自动化测试框架中,以提升测试效率和数据管理能力。gLp28资讯网——每日最新资讯28at.com

gLp28资讯网——每日最新资讯28at.com

Redis 基本操作

(1) Redis的安装和配置gLp28资讯网——每日最新资讯28at.com

在开始之前,首先需要安装Redis并进行相应的配置:gLp28资讯网——每日最新资讯28at.com

  • redis官网:https://redis.io/
  • redis中文网:https://www.redis.cn/

安装完成后,确保Redis服务已成功启动,并正确配置了连接信息(如主机地址、端口号、密码等),这块信息就不过多介绍了哟!gLp28资讯网——每日最新资讯28at.com

(2) Redis与接口自动化测试框架的集成gLp28资讯网——每日最新资讯28at.com

使用Python操作Redis需要导入相应的客户端库,例如:gLp28资讯网——每日最新资讯28at.com

pip install redisimport redis

(3) 初始化Redis连接gLp28资讯网——每日最新资讯28at.com

在接口自动化测试框架的初始化过程中,可以添加连接Redis的代码,确保测试过程中能够与Redis建立连接。gLp28资讯网——每日最新资讯28at.com

class TestFramework:    def __init__(self):        self.redis = redis.Redis(host='localhost', port=6379, password='your_password')

操作 Redis 常用命令

(4) 字符串操作gLp28资讯网——每日最新资讯28at.com

# 设置键为"key1"的字符串值为"Hello, Redis!"r.set('key1', 'Hello, Redis!')# 获取键为"key1"的字符串值value = r.get('key1')print(value)  # 输出: b'Hello, Redis!'

(5) 列表操作gLp28资讯网——每日最新资讯28at.com

# 向名为"list1"的列表左侧插入元素r.lpush('list1', 'item1')r.lpush('list1', 'item2')r.lpush('list1', 'item3')# 获取名为"list1"的列表所有元素items = r.lrange('list1', 0, -1)print(items)  # 输出: [b'item3', b'item2', b'item1']

(6) 哈希表操作gLp28资讯网——每日最新资讯28at.com

# 设置名为"hash1"的哈希表字段和值r.hset('hash1', 'field1', 'value1')r.hset('hash1', 'field2', 'value2')# 获取名为"hash1"的哈希表字段和值value1 = r.hget('hash1', 'field1')value2 = r.hget('hash1', 'field2')print(value1, value2)  # 输出: b'value1' b'value2'

(7) 集合操作gLp28资讯网——每日最新资讯28at.com

# 向名为"set1"的集合添加元素r.sadd('set1', 'item1')r.sadd('set1', 'item2')r.sadd('set1', 'item3')# 获取名为"set1"的集合所有元素items = r.smembers('set1')print(items)  # 输出: {b'item1', b'item2', b'item3'}

以上就是 redis 的常见操作,是不是比写 `sql` 语句简单,是不是 `so easy!!`gLp28资讯网——每日最新资讯28at.com

Redis 在接口自动化中的应用

(1) 封装Redis操作方法gLp28资讯网——每日最新资讯28at.com

为了方便接口自动化测试框架使用,又要开始封装了,简单封装代码如下:gLp28资讯网——每日最新资讯28at.com

class RedisClient:    def __init__(self):        self.redis = redis.Redis(host='localhost', port=6379, password='your_password')    def set_data(self, key, value, expire_time=None):        self.redis.set(key, value)        if expire_time is not None:            self.redis.expire(key, expire_time)    def get_data(self, key):        return self.redis.get(key)    def delete_data(self, key):        self.redis.delete(key)    def hash_set_field(self, key, field, value):        self.redis.hset(key, field, value)    def hash_get_field(self, key, field):        return self.redis.hget(key, field)    def hash_delete_field(self, key, field):        self.redis.hdel(key, field)

接口自动化中比较常用的是字符串了,为了满足更多场景的需求,我们价格哈希数据结构的封装操作方法。gLp28资讯网——每日最新资讯28at.com

接口自动化测试中的常见应用场景

(1) 测试数据管理gLp28资讯网——每日最新资讯28at.com

接口自动化测试中,将测试数据存储在Redis中,如用户信息、配置参数等。通过使用封装的Redis操作方法,可以方便地进行数据的增、删、改、查。gLp28资讯网——每日最新资讯28at.com

redis_client= RedisClient()redis_client.set_data('user:1', '{"name": "kira", "age": 18}')user = redis_client.get_data('user:1')print(user.decode())  # 输出:{"name": "kira", "age": 18}

(2) 处理接口依赖数据gLp28资讯网——每日最新资讯28at.com

一般步骤如下:gLp28资讯网——每日最新资讯28at.com

  • 先明确接口的依赖关系: 谁调用谁之前要先调用谁或者谁
  • 设置数据到redis:也就是接口B执行成功后,将关键数据存redis,可以使用我们封装的set,健一般是一个标识符,值就是接口的返回值
  • 从redis获取数据:比如接口A执行前,先获取B数据存Redis,然后调用redis获取数据给A或者B、C 等等。

上代码:gLp28资讯网——每日最新资讯28at.com

redis_client = RedisClient()# 第一个接口,设置依赖数据def first_api():    response = requests.get('https://api.example.com/first')    data = response.json()    redis_client.set_data('key', data['value'])def second_api():    # 获取依赖数据    dependency_data = redis_client.get_data('key')    response = requests.post('https://api.example.com/second', data={'data': dependency_data})    result = response.json()    # 处理接口响应结果if __name__ == '__main__':    first_api()    second_api()

(3) 缓存管理gLp28资讯网——每日最新资讯28at.com

遇到需要频繁访问的接口,怎么半?gLp28资讯网——每日最新资讯28at.com

为了减少接口调用的开销和提高测试效率,可以使用Redis作为缓存工具,将接口的响应结果缓存起来,以便后续的测试用例重复使用。gLp28资讯网——每日最新资讯28at.com

redis_client= RedisClient()def get_user_info(user_id):    cache_key = f'user:{user_id}'    user_info = redis_client.get_data(cache_key)    if not user_info:        # 调用接口获取用户信息        user_info = api.get_user_info(user_id)        redis_client.set_data(cache_key, user_info, expire_time=3600)    return user_info

咱们首先检查Redis缓存中是否已存在对应的用户信息,如果不存在,则调用接口获取用户信息并将其存储到Redis缓存中,以备后续使用。同时,通过设置expire_time参数,可以为缓存数据设置过期时间,避免过期数据的使用。gLp28资讯网——每日最新资讯28at.com

(4) 并发测试gLp28资讯网——每日最新资讯28at.com

在自动化测试中,针对并发场景的测试很重要,我们可以并发模拟一些实际场景,比如:利用redis的原子性和分布式锁,为每个用户创建一个唯一的标识,存到redis中,这样不同用户请求就可以通过检查和比对redis的结果来模拟并发访问了,例如:gLp28资讯网——每日最新资讯28at.com

# 创建 Redis 客户端redis_client = RedisClient()def get_user_info(user_id):    cache_key = f'user:{user_id}'    user_info = redis_client.get_data(cache_key)    if not user_info:        # 调用接口获取用户信息        response = requests.get(f'http://127.0.0.1:5000/?user_id={user_id}')        if response.status_code == 200:            user_info = response.text            print(user_info)            redis_client.set_data(cache_key, user_info, expire_time=3600)        else:            print(f"Failed to retrieve user info for user_id: {user_id}. Status code: {response.status_code}")    return user_info# 并发测试函数def run_concurrent_test(user_ids):    with concurrent.futures.ThreadPoolExecutor() as executor:        # 提交任务到线程池        future_to_user_id = {executor.submit(get_user_info, user_id): user_id for user_id in user_ids}        # 处理返回结果        for future in concurrent.futures.as_completed(future_to_user_id):            user_id = future_to_user_id[future]            try:                user_info = future.result()                print(f"user_id: {user_id}; user_info: {user_info}")            except Exception as e:                print(f"Error occurred for user_id: {user_id}, Error: {str(e)}")if __name__ == '__main__':    u_ids = [i for i in range(10, 99)]    run_concurrent_test(u_ids)

我们创建线程池,使用submit 将任务(get_user_info)提交到线程池,每个任务一个 user_id,这里简单打印每个用户id,对于的信息,通过并发执行多任务,可以同一时间内获取多个用户信息,提高测试效率。gLp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10470-0.html抛砖引玉:Redis 与 接口自动化测试框架的结合

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 分布式事务原理及解决方案

下一篇: 使用上 Spring 的事件机制,真香!

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • vivo TWS Air开箱体验:真轻 臻好听

    vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 线程通讯的三种方法!通俗易懂

    线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 微信语音大揭秘:为什么禁止转发?

    微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    除了华为每年新发布的旗舰手机系列,上亿花粉更加期待鸿蒙系统每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式发布,这也是该系统历经四年的再
Top