测试平台系列(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来实现, 都是处理表单.只有语言的差别, ...
随机推荐
- 一文了解MySQL的Buffer Pool
摘要:Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能. 本文分享自华为云社区<MySQL 的 Buffer Pool,终于被我搞懂了>,作者:小林 ...
- python3 爬虫--Chrome以及 Chromedriver安装配置
1终端 将下载源加入到列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...
- 编写 Java 程序时, 如何在 Java 中创建死锁并修复它?
经典但核心Java面试问题之一.如果你没有参与过多线程并发 Java 应用程序的编码,你可能会失败.
- elasticsearch 是如何实现 master 选举的 ?
想了解 ES 集群的底层原理,不再只关注业务层面了. 前置前提: 1.只有候选主节点(master:true)的节点才能成为主节点. 2.最小主节点数(min_master_nodes)的目的是防止脑 ...
- BMZCTF phar???
pchar??? 补充知识点 开始这题之前我们先补充一个知识点 phar 的文件包含 和上面类似先创建一个phar 标准包,使用 PharData 来创建,然后添加文件进去phar里面. 然后在文件包 ...
- 顺利通过EMC实验(20)
- 菜鸟的谷歌浏览器devtools日志分析经验
1 别管什么性能,尽可能输出详细的必要日志.(除非你明显感觉到性能变低,而且性能变低的原因是由于日志输出太多而引起的) 2 不要总是使用console.log,试试console.info, cons ...
- 国际化相对时间格式化API:Intl.RelativeTimeFormat
原文:The Intl.RelativeTimeFormat API 作者:Mathias Bynens(@mathias) 现代 Web 应用程序通常使用"昨天","4 ...
- Nuxt.js服务端渲染实践,从开发到部署
感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ...
- 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index
前言 最近,在项目中遇到一个关于CSS中元素z-index属性的问题,具体问题不太好描述,总结起来就是当给元素和父元素色设置position属性和z-index相关属性后,页面上渲染的元素层级结果和我 ...