测试平台系列(95) 前置条件支持简单的python脚本
大家好~我是
米洛!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持。
欢迎关注我的公众号米洛的测开日记,获取最新文章教程!
回顾
上一节我们构思了一下怎么去支持Python脚本,在和@joker讨论以后,考虑到python脚本不会太复杂,所以我们这一节我们就先实现exec的版本。
exec初体验
exec是一个比较厉害的内置库,它为想要执行python代码的用户提供了便利,与之对应的还有execfile版本,这个是文件版本的exec,也就是说,他接受的参数从一段代码变成了一个指定的文件。
上一节我们似乎介绍了exec的普通用法,那今天我们就讲讲怎么通过exec拿到对应的执行结果,毕竟对于执行结果我们是会渴望能拿到的。
- 实现第一个python方法: 获取本月第一天的日期
import datetime
def get_first_day_of_month():
# 把day指定为01,肯定就是第一天啦
return datetime.today().strftime("%Y-%m-01")
python代码是如此编写的,那exec里面我们怎么拿到这个方法的结果呢?
首先呢,exec是没用返回值的。我们只能通过,在exec执行的代码块里面定义变量去接收返回值。
import datetime
return_value = datetime.today().strftime("%Y-%m-01")
那么在我们的后台代码里面,就可以拿到return_value作为变量。
但我实际在fastapi的方法里面,发现是不生效的。会报return_value not defined,但是单个执行文件确实是可以。
于是我采用了新的方法,定义一个dict,传给exec,这样exec里面用到的变量等信息,都会返回到dict里面。
command = """
import datetime
return_value = datetime.today().strftime("%Y-%m-01")
"""
loc = dict()
exec(command, loc)
print(loc['return_value'])

编写在线执行exec接口
其实本身是不想提供这个接口的,因为大部分脚本都可以在本地测试后传上来,但想了下,有就有吧,对于os.remove这样危险的语句还是得禁止掉。
不过由于是演示,我就不禁止了。

先看一张效果图,执行完成后会有数据返回。但一定要注意的是,如果想拿到返回值,必须要有:
current_time = xxx,并且把返回值设置为current_time。
为什么呢?因为exec本身是拿不到返回值的,如果你去exec语句里面定义一个变量:
current_time2 = "234"
这样就能在loc里面取到返回值了,所以如果要求有返回值,则必须写上上述的python语句。
我们就是通过exec执行代码,定义变量为返回值,接着取出该变量的方式实现整个过程的。
来看下代码怎么写:

和上文提到的一样,如果没有返回值的话,直接就是None了。
编写python数据构造器

和redis操作很相似,实现run方法,也是记录数据并拿到返回值。
改写获取数据构造器的方法

新增Python类型,注意这里我把这些数字,0-3都放到了Config类里面。
提醒一下各位,比如我这里的方法没有给出对应的文件路径,大家可以全局搜索,找到之。
对应Config.py也增加了这样的子类。

前端部分的改动

页面基本是沿用的Redis的部分,在外部也稍微改造了一下:

改用开关的形式,看起来更直观。
今天的内容就介绍到这里了,欢迎大家积极提出建议,一起打造一款开源工具。
测试平台系列(95) 前置条件支持简单的python脚本的更多相关文章
- 测试平台系列(83) 前置条件支持Redis语句
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上节我们打了个野,解决了一 ...
- 测试平台系列(94) 前置条件该怎么支持Python呢
回顾 上一节我们狠狠操练了一番oss,但我们的任务还很长久,所以我们需要继续打磨我们的功能. 那今天就让我们来思考下,如何在前置条件支持python脚本,多的不说,我们也暂时不考虑其他语言,因为光考虑 ...
- 测试平台系列(85) 把redis运用到实战中
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...
- 测试平台系列(92) 让http请求支持文件上传
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...
- 测试平台系列(79) 编写Redis配置功能(下)
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们提出了优化Dao ...
- 测试平台系列(71) Python定时任务方案
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 定时任务 定时任务,顾名思义: ...
- 测试平台系列(82) 解决APScheduler重复执行的问题
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了在线执行R ...
- 测试平台系列(90) 编写oss客户端
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们编写了在线执行测试 ...
- 测试平台系列(97) 完善执行case部分
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们讨论了怎么结束一个 ...
随机推荐
- 主线程中的Looper.loop()为什么不会造成ANR
引子: 正如我们所知,在android中如果主线程中进行耗时操作会引发ANR(Application Not Responding)异常. 造成ANR的原因一般有两种: 当前的事件没有机会得到处理(即 ...
- CCF201709-2公共钥匙盒改进版
问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...
- mysql的下载和安装详细教程(windows)
Windows下安装MySQL详细教程 1.安装包下载 2.安装教程 (1)配置环境变量 (2)生成data文件 (3)安装MySQL (4)启动服务 (5)登录MySQL (6)查询用户密码 ...
- ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)
ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...
- 反射常用API以及内省机制(代码)
学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...
- Azure Virtual Desktop(一)创建配置管理
一,引言 Azure 虚拟创面是一项 Azure 服务,可以让我们管理: 1)VDI(虚拟桌面基础架构) 2)云端的 RDSH:RDSH 是 RDS(远程桌面服务)中的一个角色.这些类型的服务器用于托 ...
- Docker部署Nginx启动成功,浏览器拒绝访问
今天下午部署完tomcat和mysql之后就接着部署Nginx,本以为Nginx也和之前两个一样简单,但是就因为标题这个问题,花费了我一个小时纠错. 过程复现: 解决完上一篇博客(https://ww ...
- unity 编辑器扩展简单入门
unity 编辑器扩展简单入门 通过使用编辑器扩展,我们可以对一些机械的操作实现自动化,而不用使用额外的环境,将工具与开发环境融为一体:并且,编辑器扩展也提供GUI库,来实现可视化操作:编辑器扩展甚至 ...
- 记一次mysql请求超时甩锅历程
今天下午业务找我说是线上环境一个mysql库很慢,请求出现了大量的超时,让帮忙看看,以下为查找过程及甩锅过程. 1. mysql请求超时,ok,我们所有线上mysql都是开启了慢查询日志的,查找慢查询 ...
- 新华三Gen10服务器进SSA查看、配置阵列
1.开机自检进F10 2.F10后选择[smart storage administrator](跳到第5步)或选择第一项IP[intelligent provisioning] 3.选择执行维护 4 ...