前面写的框架基本上搭建完成了,接下来在逐步优化,这里记录下从excel读取数据时遇到的问题。
用以下一条用例举例说明:
当从excel读取数据后,在python中是以字符串的格式呈现的,比如我需要用到data和expected里面的数据,这时可以用eval()方法去掉引号而得到字典格式的data,expected
部分代码如下:
@ddt.ddt
class TestRegiter(unittest.TestCase):
@ddt.data(*cases)nu'l'l
def testregister(self,case):
result=handler_request.visit(case['url'],case['method'],json=eval(case['data']),headers=eval(case['headers']))
self.assertTrue(eval(case['expected'])['code']==result['code'])
self.assertTrue(eval(case['expected'])['msg']==result['msg'])
self.assertTrue(eval(case['expected'])['data'] == result['data'])
运行结果:
NameError: name 'null' is not defined
这时会发现eval()方法并不适用于所有场景的,当出现特殊数据的时候,比如(null,false,true)eval是没办法解析的,这种情况就需要用json转换。
json格式:
json是一种特殊的字符串格式,一般情况下接口返回的数据类型都是json,类似于字典,以key,value的形式,数据必须用双引号。但是字符串格式是没办法进行key,value进行取值,所以要先转换为字典。
json常用的四种方式:loads、load、dumps、dump
json转字典:json.loads()
import json
a='{"code":2,"msg":"账号已存在","data":true}'
b=json.loads(a)
print(b)
运行结果:
{'code': 2, 'msg': '账号已存在', 'data': True}
操作json文件:数据转换成字典,json.load()
import json
with open('file.json',encoding="utf-8") as f:
dic = json.load(f)
print(dic)
字典转json:json.dumps()
import json
a={'code':2,'msg':'ok','data':True}
b=json.dumps(a)
print(b)
print(type(b))
运行结果:字符串类型
{"code": 2, "msg": "ok", "data": true}
<class 'str'>
操作文件:以json串的形式写入文件,json.dump()
import json
a={'code':2,'msg':'ok','data':True}
with open('sa','w',encoding='utf8') as f:
json.dump(a,f,ensure_ascii=False)#ensure_ascii=False为False时内容显示正常的中文
需要注意一点,json格式必须用双引号,否则会报错:
import json
a="{'code':2,'msg':'账号已存在','data:true}"
b=json.loads(a)
print(b)
运行结果:
jsondecodeerror:期望属性名称用双引号括起来:第1行第2列(char 1)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
也可以通过网上的在在线工具进行josn格式校验。
不是json格式:
json格式: