充值接口测试流程
1、登录作为前置条件,获取token、member_id、leave_amount
1:登录接口
2:账号提前准备
2、访问充值接口。组装token、member_id、leave_amount
1:jsonpath提取数据
* $--根节点
* .--子节点
* ..--子孙节点
jsonpath.jsonpath(data,'$..user')
3、断言
1:接口返回数据,利用返回数据进行校验
2:数据库校验,pymysql用法(但是这个一般测试没有数据库权限)
充值用例编写
--使用fixture,前置条件获得登录返回的数据,提供给充值接口使用
--充值接口依赖于登录这个接口,所以登录就是充值的前置条件---fixture实现前置条件
--登录接口返回数据能得到的值:需要用到用户自己的id
用户id、leave_amount、token_type、token
--在充值接口中,需要在headers中加入token的验证
Authorization=token_type+" "+token
--在充值接口中,需要使用的json数据id,在登录接口中获得,替换
--充值接口返回数据验证
1:充值接口返回的code、msg
2:充值成功后需要验证:
1:充值成功后的返回的leave_amount == 充值的金额 + 登录接口返回数据中的leave_amount
2:流水记录需要增加1
--请求数据中member_id处理的方法
1:直接写死在excel中:麻烦(当换测试账号的时候,需要修改excel多处地方)
2:因为有测试账号,member_id是固定的,故可以写入到yaml配置文件中,进行获取数据替换
3:登录接口获取id,excel中json数据中指定特定字符串,读取进行替换
4:特殊用例:错误的id,直接在登录接口获取的id上加1,然后进行替换。
所谓错误的id是该id不是用户的id,该id不能与token值匹配,相当于身份不匹配
--headers中添加Authorization的方法
1:excel文件中写入特定字符串,读取进行替换
2:excel中无Authorization元素,在充值接口用例代码中添加
headers = json.loads(request_data['headers'])
headers['Authorization'] = token
jsonpath
--第三方库,需要安装
jsonpath:帮助我们快速找到json数据当中的字段,key:value
jsonpath.jsonpath(data,exp):第一个参数是json格式的字符串,exp为表达式如"$..user"
exp表达式:
----$代表根目录
----.代表子元素(只能匹配到子节点)
----..代表子孙元素(能匹配到子节点和孙节点)
----[0]或者.0 (获取匹配结果的元素,0是索引)
# exp匹配的结果放到列表中,输出列表类型,如果匹配不到输出False
# $.data.token---绝对路径匹配
json的序列化与反序列化---网络层面的转换
json = '{"user":"13510884901","password":"12345678"}'
json.loads(json)---将json的格式的通用格式字符串转换为python的字典,为反序列化
dict = {"user":"13510884901","password":"12345678"},字典里面的元素字符串必须是双引号,不能是用单引号,不然转换会出问题。
json.dumps(dict)---将python的dict转换为json的通用格式,为序列化
既然请求数据传送的是通用格式的json,为什么request方法中json=dict,需要传入字典呢?
---虽然要求是通用格式,但是python需要提前检测下传入的数据是否符合json的格式,
故python要求规定传入dict,然后内部处理成json格式数据
相关序列化与反序列化的资料:
java:
Java序列化就是指把Java对象转换为字节序列的过程
Java反序列化就是指把字节序列恢复为Java对象的过程。
---序列化:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间,对象将其当前状态写入到临时或持久性存储区。
---反序列:通过从存储区中读取或从文件中读取相关数据,反序列化对象的状态,重新创建该对象。
---序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。
---反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)
json/xml的数据传递:
在数据传输(也可称为网络传输)前,先通过序列化工具类将Java对象序列化为json/xml文件。
在数据传输(也可称为网络传输)后,再将json/xml文件反序列化为对应语言的对象