接口测试断言,用python解析格式不规范的Json中的指定value

说一下背景:最近有新的接口需要做测试,在做断言校验返回结果的时候,需要校验返回的Json里嵌套的Value,常规操作是使用python提供的.load()直接解析即可,但此处遇到的Json存在嵌套,且将嵌套的Json存为Str,导致解析之前必须重新处理才能继续解析。
上代码

// An highlighted block
	def GetKeyInStr(self,dictionary, cmdKey, default=None):
		""" GetKeyInStr:获取字典中的cmdKey对应的值,适用于json嵌套的情况下,第一层为dict格式,第二层value为str格式的情况。\n
	dictionary:传入的字典,格式:dictName;\n
	cmdKey:处于嵌套中的key串,举例如下:\n
	目标json jsonData = {
	u'src': 1, 
	u'flag': 
	u'S', 
	u'code': 
	u'200', 
	u'msg': 
	u'\u8bf7\u6c42\u6210\u529f', 
	u'flowNo': 
	u'd813ac31c81f448aa83179e64f14785a', 
	u'data': u'{"riskInfo":[{"riskCodeValue":3,"riskCode":8}],"riskScore":95}'}
	如果想获取的目标key是“riskScore”,则cmdKey应依次填写key值并用“.”隔开:data.riskScore \n
	default:找不到时返回的默认值 \n
	使用本方法取出预期值后,如需要校验的数据为int类型,可使用此方法校验:Should Be Equal	${ObjectValue}	${95} \n
	取出和校验过程分列两行:
	|${ObjectValue}        | GetKeyInStr              |${jsonData}   |data.riskScore       |\r\n
	|Should Be Equal       | ${ObjectValue}     |${95}         |\n
		"""		
		cmd_list = cmdKey.split('.')#用.分隔开
		for i in cmd_list:
			val = dictionary.get(i, None)
			if isinstance(val,(unicode,str)) == True:
				val = json.loads(val)
				nextVal = cmd_list[cmd_list.index(i)+1]
				val_get = val.get(nextVal, None)	
			elif val == None:
				break 
		return val_get
 
 
# if __name__ == "__main__":
# 	qq = privateFunc()
# 	dic = {u'src': 1, u'flag': u'S', u'code': u'200', u'msg': u'\u8bf7\u6c42\u6210\u529f', u'flowNo': u'd813ac31c81f448aa83179e64f14785a', u'data': u'{"riskInfo":[{"riskCodeValue":3,"riskCode":8}],"riskScore":95}'}
# 	ww = qq.GetKeyInStr(dic,'data.riskScore')
# 	print ww # 95

在 Robotframework 中的应用:
在这里插入图片描述
使用方法:
在这里插入图片描述日志如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值