这是我参加2022初次更文挑战的第1天,活动详情检查:2022初次更文挑战。

咱们好~我是米洛
我正在从0到1打造一个开源的接口测试渠道, 也在编写一套与之对应的教程,期望咱们多多支撑。
欢迎关注我的大众号米洛的测开日记,获取最新文章教程!

回顾

上一节呢,咱们编写了oss的客户端这块内容。但其实咱们是有目的的,咱们知道,咱们有时分测试一些接口,比方说: 批量导入产品,这种情况下,咱们是要给接口发送一个文件(excel或许csv)。

那怎么保管咱们的测试数据呢,那就该oss发挥它的作用了。以往咱们做测试,都会放一个目录保存测试数据,现在只不过是把数据放到了oss之中,其实道理都一样。

今日咱们就来完成http恳求支撑oss文件上传。在此之前咱们先得修正几个bug(还挺多的,但只列一个典型)

良久不来了,真的不是在等的活动。hiahia

bug警示

  • 没有断语数据的时分报错

测试平台系列(92) HTTP请求支持文件上传相关接口

需求2个返回值,但是咱在没有断语的时分只给了一个,事实大意。

效果图

测试平台系列(92) HTTP请求支持文件上传相关接口

测试平台系列(92) HTTP请求支持文件上传相关接口

思路

咱们之前为了图便利,在有body的http恳求里边,强行让http恳求二选一:

  • 要么json

  • 要么form表单

    针对这样文件的形式,就没法二选一了,所以咱们必需求存储一个字段:

    body_type,这个字段用来告知咱们body是什么类型的,也就对应这里的数据:

测试平台系列(92) HTTP请求支持文件上传相关接口

0代表none, 2代表form-data 1代表raw(json) 3代表x-www-form-urlencoded, 后续的顺次排列。

所以咱们要去用例加个body_type,而且默认为1(由于现在咱们的接口类型大部分json的).

接着咱们在http恳求的时分,依据不同的数据类型返回不同的body即可。

新增字段body_type

测试平台系列(92) HTTP请求支持文件上传相关接口

修改app/models/test_case.py,新增body_type字段,修改处我已经红框标示。

调整pydantic

测试平台系列(92) HTTP请求支持文件上传相关接口

之前咱们的schema数据都存放在router下面,后来存在一些循环引进问题。所以我把恳求入参这些数据都放到了models下面,特此说明一下。

添加装备

以往啊,咱们很喜欢写1,2,3,4:

if case_type == 1:

这种代码,但其实这种东西完全能够放到config里边,这样的话咱们如果要变换对应的规矩,就很便利,而且看1,2,3,4还欠好回忆这是什么类型。

今次,我一定要换。

在class Config下面新增子类: class BodyType:

测试平台系列(92) HTTP请求支持文件上传相关接口

改造Http恳求客户端

由于咱们发json也好,form也好,改动的一般是这个办法:

测试平台系列(92) HTTP请求支持文件上传相关接口

相似这样的,如今咱们多了一个新的参数,我打算封装一个新的办法,由于这块http在线恳求需求用到,而case的执行也得用到。

话不多说,咱们直接上代码:

测试平台系列(92) HTTP请求支持文件上传相关接口

这边一般form的话,data接纳的是一个dict,json的话选用json去接纳数据,而文件这种,则选用FormData:

由于咱们存储body里边带有oss的文件信息,咱们需求先解析一下数据,也便是先反序列化,接着取对应的文件或许文本,组成FormData。

  • 运转case相关改动

测试平台系列(92) HTTP请求支持文件上传相关接口

之前咱们有为json类型恳求添加header的操作,如今都放到http client里边去做了,所以这边能够略微简化下。

  • replace_body改动

测试平台系列(92) HTTP请求支持文件上传相关接口

这里需求略微改动下,只有json类型的时分才替换body的数据,由于现在这个替换只支撑字典类型。

前端部分

前端部分我写的太烂了,有兴趣去看下源码吧(我自己都看不下去),活生生的屎山,真的。

不过我还是各种土办法给处理了,http那块我打算就到此为止了。

我加了一个可修改表格的组件,这个与之前的有不同,由于这个组件需求依据挑选的是FILE还是TEXT来决定VALUE单元格的输入控件:

测试平台系列(92) HTTP请求支持文件上传相关接口

这里切换为TEXT后,右侧的挑选框会变成输入框

测试平台系列(92) HTTP请求支持文件上传相关接口

能够看到,咱们调用自己的http上传文件办法(upload),完成了文件上传的测试功用(如果能重来,我必定不肝这个,太累了,bug小王子。)