常见的两种接口依赖处理方式
1、请求体的字段依赖
这种情况多数是在当前测试的接口,它的前置接口的请求体中的字段要拿来在当前的接口请求体中继续使用。
比如修改用户信息的接口,该接口会使用到用户名的字段,该字段是由创建用户时的请求体中传入的,创建用户的接口请求体我们做了参数化,让它动态生成用户名。
因为每次都是变化的,则当执行到修改用户信息的接口时,如果我们依然使用上个接口的参数化,势必会导致两者的用户名不一样,因此会导致接口执行失败,所以我们要对这种类型的接口进行接口依赖处理
我们直接在测试类的代码中处理接口依赖:
if case["check_info"] == 'user_info':
user_name = json.loads(new_data)['name']
case_logger.info("{:-^50s}".format(f"user_name:{user_name}"))
setattr(do_re, 'user_name', user_name)
2、响应体的字段依赖
将响应体的字段拿来用在下一个接口的这种方式,在接口依赖中依然很常见,往往上一个接口为get类型的查询接口,我们从该接口的响应体中取对应的字段拿到下一个接口的请求体中使用。
我们直接在测试类的代码中处理接口依赖:
if case["check_info"] == 'get_op_svc_servicestage_domainId':
op_svc_servicestage_domainId = res.json()['user']['domain']['id']
case_logger.info("{:-^50s}".format(f"op_svc_servicestage_domainId:{op_svc_servicestage_domainId}"))
setattr(do_re, 'op_svc_servicestage_domainId', op_svc_servicestage_domainId)
处理需要上传文件的类型接口
1、接口分析
这里直接在前端进行上传,通过Chrome浏览器的F12开发工具进行抓包,可以看到上传文件接口的请求与相应信息,因为是公司的项目接口,会做一些马赛克处理:
再看看请求参数:
我们可以从请求中看到,请求方式为multipart/form-data表单格式,并且注意到,虽然上传了文件,但是请求参数中并没有展示文件路径和文件名,而且fileList值为“binary”,那么可以知道上传的为文件的字节内容
2、postman示例
以postman示例,body选择form-data选项,key填入fileList[]并选择格式为file,在value中选择一个本地文件进行上传,然后发起请求:
3、requests示例
刚刚我们借助工具实现了上传文件的请求,postman中可以将我们的请求转化为python代码格式。
具体步骤如下:
先使用postman构建好参数并调试成功;
点击Save按钮下方的Code;
选择语言为Python - Requests后复制代码
将复制后的代码粘贴到Pycharm或者VS code的开发工具中运行即可
import os
import requests
from Commons.constants import UPLOAD_DIR
url = "https://接口地址/1.0/product/style-gallery"
payload = {}
files = [
('fileList[]', open(os.path.join(UPLOAD_DIR, 'stylegallery.png'), 'rb'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text.encode('utf8'))
至此就完成了文件上传接口的处理,后续进行测试或者接口自动化在此基础上进行二次开发即可
4、解决方法二
如果上面的方式并不能解决问题,那么再采用第二种方法,基本就不会有问题。
我们先来看看上传文件的请求内容:
接下来,给requests库的请求参数files的值套用以下模板:
files = {
'${name}': ('${filename}', open( '${filepath}', 'rb'), '${Content-Type}')
}
${name}:即name的值"fileList[0]"
${filename}:即filename的值"a.jpg"
${filepath}:filename的文件路径
${Content-Type}:即Content-Type的值"image/jpeg"
将模板对应的变量替换为实际值,得到:
files = {
'fileList[0]': ('a.jpg', open(os.path.join(UPLOAD_DIR, 'a.jpg'), 'rb'), 'image/jpeg')
}
注意:要确认文件路径是否正确,我这里使用了相对路径,然后将files传递给requests的对应方法上即可。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
不经历风雨,怎能见彩虹;不经历磨炼,怎能成巨匠。坚持梦想,追求卓越,奋斗的脚步永不停歇。在每个黎明前,都有辉煌等待。
奋斗如同磨刀石,磨砺出锋芒;努力如同阳光,照亮前行。不畏挑战,追求卓越,只有坚持不懈地执着奋斗,方能超越自我,绽放人生的辉煌,让梦想在奋斗的征途中闪耀不息!
奋斗的旅途上,不要畏惧失败,因为每一次跌倒都是站起来更坚强的机会;不要追求完美,因为成长正是在一次次的尝试中积累。只要心怀勇气与坚持,坚定地迈向梦想。