这是我参加2022初次更文挑战的第1天,活动详情检查:2022初次更文挑战。
咱们好~我是
米洛
!
我正在从0到1打造一个开源的接口测试渠道, 也在编写一套与之对应的教程
,期望咱们多多支撑。
欢迎关注我的大众号米洛的测开日记
,获取最新文章教程!
回顾
上一节呢,咱们编写了oss的客户端这块内容
。但其实咱们是有目的的,咱们知道,咱们有时分测试一些接口,比方说: 批量导入产品
,这种情况下,咱们是要给接口发送一个文件(excel或许csv)。
那怎么保管咱们的测试数据呢,那就该oss发挥它的作用了。以往咱们做测试,都会放一个目录保存测试数据,现在只不过是把数据放到了oss之中,其实道理都一样。
今日咱们就来完成http恳求支撑oss文件上传。在此之前咱们先得修正几个bug(还挺多的,但只列一个典型)
良久不来了,真的不是
在等的活动。hiahia
bug警示
- 没有断语数据的时分报错
需求2个返回值,但是咱在没有断语的时分只给了一个,事实大意。
效果图
思路
咱们之前为了图便利,在有body
的http恳求里边,强行让http恳求二选一:
-
要么json
-
要么form表单
针对这样文件的形式,就没法二选一了,所以咱们必需求存储一个字段:
body_type,这个字段用来告知咱们body是什么类型的,也就对应这里的数据:
0代表none, 2代表form-data 1代表raw(json) 3代表x-www-form-urlencoded, 后续的顺次排列。
所以咱们要去用例加个body_type,而且默认为1(由于现在咱们的接口类型大部分json的).
接着咱们在http恳求的时分,依据不同的数据类型返回不同的body即可。
新增字段body_type
修改app/models/test_case.py,新增body_type字段,修改处我已经红框标示。
调整pydantic
之前咱们的schema数据都存放在router下面,后来存在一些循环引进问题。所以我把恳求入参这些数据都放到了models下面,特此说明一下。
添加装备
以往啊,咱们很喜欢写1,2,3,4:
if case_type == 1:
这种代码,但其实这种东西完全能够放到config里边,这样的话咱们如果要变换对应的规矩,就很便利,而且看1,2,3,4还欠好回忆这是什么类型。
今次,我一定要换。
在class Config下面新增子类: class BodyType:
改造Http恳求客户端
由于咱们发json也好,form也好,改动的一般是这个办法:
相似这样的,如今咱们多了一个新的参数,我打算封装一个新的办法,由于这块http在线恳求需求用到,而case的执行也得用到。
话不多说,咱们直接上代码:
这边一般form的话,data接纳的是一个dict,json的话选用json去接纳数据,而文件这种,则选用FormData:
由于咱们存储body里边带有oss的文件信息,咱们需求先解析一下数据,也便是先反序列化,接着取对应的文件或许文本,组成FormData。
- 运转case相关改动
之前咱们有为json类型恳求添加header的操作,如今都放到http client里边去做了,所以这边能够略微简化下。
- replace_body改动
这里需求略微改动下,只有json类型的时分才替换body的数据,由于现在这个替换只支撑字典类型。
前端部分
前端部分我写的太烂了,有兴趣去看下源码吧(我自己都看不下去),活生生的屎山,真的。
不过我还是各种土办法给处理了,http那块我打算就到此为止了。
我加了一个可修改表格的组件,这个与之前的有不同,由于这个组件需求依据挑选的是FILE还是TEXT来决定VALUE单元格的输入控件:
这里切换为TEXT
后,右侧的挑选框会变成输入框。
能够看到,咱们调用自己的http上传文件办法(upload),完成了文件上传的测试功用(如果能重来,我必定不肝这个,太累了,bug小王子。)