文章目录
- 一、背景
- 1.1、前情回顾
- 二、参数化实现
- 三、总结
一、背景
参数化,在使用httprunner框架的时候,参数话说实在的不是很实用,因为更多是场景化的用例编写,不用过多的去参数化批量执行,无非也就是登录注册查询啥的,但是在生产环境就不是很建议这样玩,单接口是可以覆盖的,前面使用平台的时候,不说题主都快忘记了框架还有这样一个平台,实属不该!
1.1、前情回顾
参数引用,沿用httprunner框架,使用美元符号引用变量:$variable
from datetime import date, datetime
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
debugtalk定义
def get_last_today():
"""获取当日23:59:59"""
# 获取当前时间
now = datetime.datetime.now()
# 获取今天零点
zeroToday = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second, microseconds=now.microsecond)
# 获取23:59:59
lastToday = zeroToday + datetime.timedelta(hours=23, minutes=59, seconds=59)
return lastToday
但是它报错了,这样让题主开始怀疑框架本身是不是有问题
Traceback (most recent call last):
TypeError: Object of type datetime is not JSON serializable
因为使用了两个参数变量,所以不知道是哪里报错了,但是从信息可以得出结论:json对象datetime类型在这里不能序列化,所以查看debugtalk之后 ,发现只有圈出来的方法返回的是datetime类型,上面get_millisecond是字符串,所以需要将日期格式的数据进行转化成字符串
from datetime import date, datetime
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
修改代码如下:
def get_last_today():
"""获取当日23:59:59"""
# 获取当前时间
now = datetime.datetime.now()
# 获取今天零点
zeroToday = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second, microseconds=now.microsecond)
# 获取23:59:59
lastToday = zeroToday + datetime.timedelta(hours=23, minutes=59, seconds=59)
return lastToday.strftime('%Y-%m-%d %H:%M:%S')
前面一度认为是框架平台本身错了,有点打脸了。
二、参数化实现
再来说参数化,也就是咱们一直说的数据驱动
这里也可以这样引用
正确用法是参数化,如登录,多个参数使用-短连接符号,然后值是嵌套列表元素的列表
在request中参数使用
执行看结果,会不会执行两次
三、总结
日拱一卒无有尽,功不唐捐终入海!
尽管httprunner框架已经升级到4版本了,但是平台还是使用1版本,但是并不妨碍它升级,毕竟也是要向下兼容的,不过,有兴趣的同学可以尝试一下升级,通过版本升级或者平台改造,是不是可以一样兼容。