3

测试平台系列(92) 让http请求支持文件上传 - 米洛丶

 2 years ago
source link: https://www.cnblogs.com/we8fans/p/16180340.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好~我是米洛

我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持。

欢迎关注我的公众号米洛的测开日记,获取最新文章教程!

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

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

今天我们就来实现http请求支持oss文件上传。在此之前我们先得修复几个bug(还挺多的,但只列一个典型)

bug警示

  • 没有断言数据的时候报错

1638277694665-image.png

需要2个返回值,但是咱在没有断言的时候只给了一个,属实马虎。

普通模式

编辑模式

我们之前为了图方便,在有body的http请求里面,强行让http请求二选一:

  • 要么json

  • 要么form表单

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

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

1638279678496-image.png

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

所以我们要去用例加个body_type,并且默认为1(因为目前我们的接口类型大部分json的).

接着我们在http请求的时候,根据不同的数据类型返回不同的body即可。

新增字段body_type

1638280047668-image.png

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

调整pydantic

1638280479904-image.png

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

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

if case_type == 1:

这种代码,但其实这种东西完全可以放到config里面,这样的话我们如果要变换对应的规则,就很方便,而且看1,2,3,4还不好回忆这是什么类型。

今次,我一定要换。

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

1638281768526-image.png

改造Http请求客户端

由于我们发json也好,form也好,改变的一般是这个方法:

1638281817396-image.png

类似这样的,如今我们多了一个新的参数,我打算封装一个新的方法,因为这块http在线请求需要用到,而case的执行也得用到。

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

1638283451249-image.png

这边普通form的话,data接收的是一个dict,json的话采用json去接收数据,而文件这种,则采用FormData:

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

  • 运行case相关改动

1638282742855-image.png

之前我们有为json类型请求添加header的操作,如今都放到http client里面去做了,所以这边可以稍微简化下。

  • replace_body改动

1638282795731-image.png

这里需要稍微改动下,只有json类型的时候才替换body的数据,因为目前这个替换只支持字典类型。

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

不过我还是各种土方法给解决了,http那块我打算就到此为止了。

我加了一个可编辑表格的组件,这个与之前的有不同,因为这个组件需要根据选择的是FILE还是TEXT来决定VALUE单元格的输入控件:

1638282989798-image.png

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

1638283539314-image.png

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK