测试平台系列(92) 让http请求支持文件上传
大家好~我是
米洛!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持。
欢迎关注我的公众号米洛的测开日记,获取最新文章教程!
回顾
上一节呢,我们编写了oss的客户端这块内容。但其实我们是有目的的,我们知道,我们有时候测试一些接口,比方说: 批量导入商品,这种情况下,我们是要给接口发送一个文件(excel或者csv)。
那怎么保管我们的测试数据呢,那就该oss发挥它的作用了。以往我们做测试,都会放一个目录保存测试数据,现在只不过是把数据放到了oss之中,其实道理都一样。
今天我们就来实现http请求支持oss文件上传。在此之前我们先得修复几个bug(还挺多的,但只列一个典型)
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小王子。)
测试平台系列(92) 让http请求支持文件上传的更多相关文章
- java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多
java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 也仿照着 netty处理了NIO的空轮询BUG 本项目并不复杂 代码不多 ...
- 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...
- Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)
Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie) 一.HttpRequest对象 #HttpRequest ...
- 使用HttpClient 发送 GET、POST(FormData、Raw)、PUT、Delete请求及文件上传
httpclient4.3.6 package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; i ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- RPC基于http协议通过netty支持文件上传下载
本人在中间件研发组(主要开发RPC),近期遇到一个需求:RPC基于http协议通过netty支持文件上传下载 经过一系列的资料查找学习,终于实现了该功能 通过netty实现文件上传下载,主要在编解码时 ...
- Openresty + nginx-upload-module支持文件上传
0. 说明 这种方式其实复杂,麻烦!建议通过这个方式搭建Openresty文件上传和下载服务器:http://www.cnblogs.com/lujiango/p/9056680.html 1. 包下 ...
- SpringCloud 之 Fegin —— 发送GET、POST请求以及文件上传
由于项目需要调用其他微服务的数据,首先想到的就是写一个http网络请求的工具类,但是想到在之前看springCloud的时候里面有这个Fegin可以实现,就顺便实践一下,虽然过程有点坎坷,好在都顺利解 ...
- 让nginx支持文件上传的几种模式
文件上传的几种不同语言和不同方法的总结. 第一种模式 : PHP 语言来处理 这个模式比较简单, 用的人也是最多的, 类似的还有用 .net 来实现, jsp来实现, 都是处理表单.只有语言的差别, ...
随机推荐
- C++ 并发编程2 --向线程函数传递参数
1向线程函数传递参数比较简单,一般的形式如下 void f(int i,std::string const& s);std::thread t(f,3, "hello"); ...
- Java常见的垃圾收集器有哪些?
守拙者_6a98关注 2020.04.11 22:06:31字数 2,135阅读 394 实际上,垃圾收集器( GC , Garbage Collector )是和具体 JVM 实现紧密相关的,不同厂 ...
- URL转义特定字符
import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.Charset; // 实例代码 Str ...
- Mybatis框架基础入门(二)--架构简介
mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数据库的 ...
- 使用Pycharm获取Resources目录里的内容
def get_resource_path(path: str) -> str: """\ 获取Resources目录里的资源 :param path: :retu ...
- SpringBoot项目集成swagger报NumberFormatException: For input string: ""
java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.f ...
- Axure在Chrome浏览解决方案
AXURE RP EXTENSION FOR CHROME Google Chrome浏览器需要扩展程序才能查看本地存储的项目.或者,将您的RP文件上传到Axure Cloud或使用其他浏览器.您也可 ...
- RocketMQ实现分布式事务
相关文章:http://www.uml.org.cn/zjjs/201810091.asp(深入理解分布式事务,高并发下分布式事务的解决方案) 三种分布式事务: 1.基于XA协议的两阶段提交 2.消息 ...
- 解决SVG animation 在IE中不起作用
问题描述 CSS animation没办法解决SVG路径运动的问题,下图路径运动的过程,通过查资料发现所有的IE的版本都不支持SVG animation.在IE中没有水流动的效果. 主要代码 < ...
- java中方法重载是什么, 实际中到底有什么意义, 用处?请举例
7.3 方法重载(overload) 当几个方法有相同的方法名,但参数个数不同或参数类型不同时,就涉及方法重载 方法重载有什么意义呢?在公司里编程,有时候一个方法名,要用到很多次,而且每次跟每次的参 ...