redis在自动化测试中的运用

redis在自动化测试中的运用

一、数据类型

redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)

string

设置值:set name dawei

获取值:get  name

hash

设置值:hset userinfo name dawei age 18

获取值:hgetall userinfo #获取全部的数据

hget userinfo name

list

设置值:lpush teachers xiaom xiaobai xiaohon

获取值:lrange teachers

set

设置值:sadd language java python php

获取值:smember language

zset

设置值:zadd students 4 xueyuan4 3 xuanyuan3

获取值:zrange students 0 -1

二、python操作redis

1、下载redis库

pip install redis -i https://pipy.doubanio.com /simple

2、操作redis

用python操作redis时,需要先创建一个redis数据库连接对象,然后进行连接

import redis

pool = redis.ConnectionPool(

host = 'localhost',

port = 6379,

decode_responses = False

)

r = redis.Redis(connection_pool=pool)

3、创建一个类进行redis数据库的操作

需要先定义一个类,初始化方法是对连接进行定义,再定一个方法对redis进行操作,练习的项目是把java对象做了序列化存储后的数据,需要借助第三方库转成python中的对象,才能进行解析,javaobj-py3

#立即购买业务,存在redis里面的数据是一个字符串

import javaobj

import redis

class RedisUtil:

def __init__(self,host,pwd=None,port=6379,decode_responses=False):

self.pool = redis.ConnectionPool(

host=host,

password=pwd,

port=port,

decode_responses=decode_responses

)

self.r = redis.Redis(connection_pool=self.pool)

def get(self,key):

data_type = self.r.type(key)

if data_type == b"string" or data_type == "string":

return self.r.get(key)

elif data_type == b"hash" or data_type == "hash":

return self.r.hgetall(key)

elif data_type == b"list" or data_type == "list":

return self.r.lrange(key,0,-1)

elif data_type == b"set" or data_type == "set":

return self.r.smembers(key)

elif data_type == b"zset" or data_type == "zset":

return self.r.zrange(key,0,-1)

else:

raise BaseException(f"{key}的数据类型不支持")

if __name__ == '__main__':

redis_util = RedisUtil(

host='',

port=6379,

pwd='mtx',

decode_responses=False

)

res = redis_util.get('{BUY_NOW_ORIGIN_DATA_PREFIX}_69415')

print(res)

res_object = javaobj.loads(res)

print(res_object)

print(type(res_object))

buy_now_object = res_object[0]

#dir这个对象可以看buy_now_object有哪些信息

print(dir(buy_now_object))

sku_id = buy_now_object.skuId

num = buy_now_object.num

print(num,sku_id)

解析hash

#订单确认参数存储在redis数据库里面的是一个hash,对应python里面的字典,所以我们可以通过遍历的方式拿到里面的数据

#订单确认参数缓存数据解析,收货地址,支付方式,送货时间

res = redis_util.get("{CHECKOUT_PARAM_ID_PREFIX}_59")

print(type(res))

for key,value in res.items():

key = javaobj.loads(key)

if value == b"":

value = ""

else:

value = javaobj.loads(value)

if key == "paymentType":

print(dir(value))

value = value.constant

print(f"{key}:{value}")

三、运用在测试用例里面

import javaobj

from redis_study.redis_util import RedisUtil

from requests_study.mtxshop_apis import buy_now

class TestBuyNow:

def test_buy_now(self,buyer_login_fixture,redis_init):

resp = buy_now(sku_id=541,num=1)

assert resp.status_code == 200

# redis_util = RedisUtil(

# host='',

# port=6379,

# pwd='mtx',

# decode_responses=False

# )

res = redis_init.get("{BUY_NOW_ORIGIN_DATA_PREFIX}_69415")

res_object = javaobj.loads(res)

buy_now_object = res_object[0]

skuId = buy_now_object.skuId

num = buy_now_object.num

assert skuId == 541

assert num == 1

import javaobj

from redis_study.redis_util import RedisUtil

from requests_study.mtxshop_apis import set_addressid

class TestSetAddressId:

def test_set_addressId(self,buyer_login_fixture,redis_init):

resp = set_addressid(address_id=13290)

# redis_util = RedisUtil(

# host='',

# port=6379,

# pwd='mtx',

# decode_responses=False

# )

uid = buyer_login_fixture

res = redis_init.get(f"{{CHECKOUT_PARAM_ID_PREFIX}}_{uid}")

print(type(res))

for key,value in res.items():

key = javaobj.loads(key)

if value == b"":

value = ""

else:

value = javaobj.loads(value)

if key == "addressId":

assert value == 13290

四、很多用例都需要用到redis连接,可以在fixture里面进行前置处理

@pytest.fixture(scope='session',autouse=False)

def redis_init():

redis_util = RedisUtil(

host='',

port=6379,

pwd='mtx',

decode_responses=False

)

yield redis_util

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值