测试平台系列(55) 引入AceEditor(代码编辑器)
大家好,我是米洛,求三连!求关注
测试开发坑货!
回顾
我们上一节已经写好了左侧数据表目录,今天继续完成sql编辑器的部分。
调研组件
monaco
因为我们的项目用的是
React,市面上很多编辑器都是js编写,react提供了一层方便的封装。比如我们在
HTTP调试页面用的JSON编辑器,是以monaco为原型封装成的React组件。

monaco呢,是微软开源的,大家熟悉的VsCode其实内部核心也是monaco。
优点是美观,专业,缺点是使用比较复杂。
AceEditor
用过yapi的人都知道,里面填写JSON_SCHEMA的时候用到了JSON编辑器,会校验你的
JSON格式。里头的编辑器就是AceEditor。我觉得它的优点就是功能比较强大,包括代码补全,UI响应都做的很棒,唯一的缺点可能就是
主题很少,不太好看。CodeMirror
这是我最开始调研过的一款插件,包括大名鼎鼎的
leetcode都是用的它。如果用好了自然非常牛逼,但我确实玩不太转,觉得里面的API太生硬了。React对应的实现:
react-codemirror2唯一缺点就是使用困难,
遇到问题不好解决。
最终选型
由于AceEditor我在公司实现了一套,为了避免重复造轮子,花更多的时间去搞一套新的。我决定直接搬运过来。
当然如果以后有时间,我会向leetcode学习,做一个更好用的编辑器。
封装编辑器组件

接受value, 语言,改变value的事件以及高度和theme。这样我们就可以对编辑器的主题,内容等进行完美控制。
还是看看下最终页面成果吧~

页面分为3块,左侧是上一节编写好的部分,右侧上半部分是编辑器,下半部分是返回结果。




渐渐地成型了一点~
后端bug修复
先给大家道个歉,自己上一节写的代码没有经过很严谨的测试,导致出了一些问题:
- 问题1: 多个fat环境

可以看到,出现了2个fat数据。
仔细找一下原因,发现是这里出了岔子:

这里我们添加好第一个fat数据后,idx=0对不,所以env_index里面的数据是这样的:
env_idx = {"fat": 0}
那么当第二个fat来了,会取到idx=0,判断if not idx,这里not idx自动隐式转换为True了,导致又append了一次result。
所以这时候我们需要换个判断方式if idx is None,这个判断代表字典里面没有这个key。

- 问题2: 天真的以为MetaData可以复用

还记得get_tables里面这个metadata变量吗?之前是通过方法传递进来的参数,这样只需要实例化MetaData()一次。
但是坑就坑在,后续生成的数据,也会带上之前获得的表信息,所以我们还是不能复用这个对象。
改造online_sql方法
前面我们已经实现过在线执行sql的方法了,但是会发现有一些问题。
datetime不是我们想要的
所以我们需要自行处理,拿到我们标准的datetime。

拿到字段里面的keys(),也就是列名,用于前端展示。
- 对于update这种没有返回结果的方法没有兼容

我们返回更新的行数就好,不管是增删还是改。
添加全局loading,使得体验更好。

后端未来优化
由于数据表不会一直修改,我们可以把他们的数据放到redis之中。这样我们效率会提高很多,加载速度也不会像现在这么慢。
最后,pg的支持还不是很完善,目前来说处于待测状态,有感兴趣的小伙伴可以提供下pg的连接或者自测一下。
数据库的配置需要管理员,如果你不是可以联系我,我给你添加。
今天的内容就港(肝)到这里了,数据库这块总算告一段落了大家`周末happy`
文档地址: https://pity.readthedocs.org
测试平台系列(55) 引入AceEditor(代码编辑器)的更多相关文章
- 测试平台系列(5) 引入Ant Design Pro
引入Ant Design Pro 回顾 还是继续回顾下之前的作业, 返回的中文变成了ascii字符,不要紧,我们光荣地百度一哈. 随便点进去看看,都可以找到正确答案: 可以看到,我们需要修改confi ...
- 测试平台系列(85) 把redis运用到实战中
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...
- 测试平台系列(71) Python定时任务方案
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 定时任务 定时任务,顾名思义: ...
- 测试平台系列(82) 解决APScheduler重复执行的问题
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了在线执行R ...
- 测试平台系列(83) 前置条件支持Redis语句
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上节我们打了个野,解决了一 ...
- 测试平台系列(92) 让http请求支持文件上传
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...
- 测试平台系列(4) 使用Flask蓝图(blueprint)
使用Flask蓝图(blueprint) 回顾 先来看一下上一篇的作业吧,使用「logbook」的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标准时 ...
- 测试平台系列(1) 搭建Flask服务
搭建Flask服务 项目地址 点我进入项目地址 代码都会在这里有所展示,喜欢的话可以帮点个star,谢谢大家了!如果你喜欢该教程,也可以分享给其他人. 关于选型 想了很久,本来打算用「Gin」做为后端 ...
- 测试平台系列(72) 了解ApScheduler基本用法
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们调研了一下市面上 ...
随机推荐
- postman之变量
前言:postman可以设置(环境变量)和(全局变量) (环境变量):环境变量只能在选择的环境中使用,可以有多组,常用在设置URL和密码当中 (全局变量):只能有一组,整个环境都可以应用 [环境变量] ...
- vue服务端渲染之nuxtjs
前言 本篇主要针对nuxtjs中的一些重要概念整理和代码实现! 在学习vue服务端渲染之前,先搞清楚几个概念: 什么是客户端渲染(CSR) 什么是服务端渲染(SSR) CSR和SSR有什么异同 客户端 ...
- 使用Cobertura做代码覆盖率测试
经验总结:首先要把cobertura.jar包含ant的classpath路径中,其次要求它包含在测试用例的classpath中: 使用cobertura做代码覆盖率测试中出现的问题:覆盖率始终为0, ...
- 用Python爬取《王者荣耀》英雄皮肤数据并可视化分析,用图说话
大家好,我是辰哥~ 今天辰哥带大家分析一波当前热门手游<王者荣耀>英雄皮肤,比如皮肤上线时间.皮肤类型(勇者:史诗:传说等).价格. 1.获取数据 数据来源于<王者荣耀官方网站> ...
- JCE加密和解密 bouncycastle
https://blog.csdn.net/weixin_43935907/article/details/89155617 https://blog.csdn.net/qq_29583513/art ...
- RabbitMQ的生产者消息确认(Publisher Confirms and Returns)和消费者ACK
https://www.cnblogs.com/wangzhongqiu/p/7815529.html https://blog.csdn.net/u012129558/article/details ...
- 【Mongodb】数据库备份与还原
Mongodb 备份与还原 Mongodb 备份与还原 文件快照 快照备份 快照直接还原 从压缩文件还原 复制文件 备份文件 从文件还原 mongodump mongodump备份 mongodump ...
- Linux通过命令增加IPV6地址
第一步:输入nmcli connection modify "eth0" ipv6.method manual ipv6.address ipv6地址/64 ifname et ...
- SQL 练习27
查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 SELECT cid,AVG(score) 平均成绩 from sc GROUP BY cid ORDER BY A ...
- 题解 a
传送门 和入阵曲那题很像 这里 \(n\) 很小,可以直接 \(n^2\) 压成一维考虑 然后就是对每个 \(j\) 查询 \([j-r, j-l]\) 中数的个数 这里我是用树状数组求的,带个log ...