前面讲到可以使用JSONSchema做json数据校验, 但是每个接口数据都手动写jsonschema太痛苦了, 就写了个小脚本,可以直接复制接口文档的mock数据然后生成一个简单的jsonschema,然后根据需要再修改

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : jsonUtil.py
# @Author: Lcy
# @Date : 2018/8/16
# @Desc : from tkinter import *
import json class My_GUI(): def __init__(self): self.window = Tk() # 设置主窗口属性(窗口名, 大小, 位置, 背景色等)
self.window.title('JSON处理工具')
# window.geometry('800x600+50+50')
self.window['bg'] = 'GhostWhite'
self.window.attributes('-alpha', 1) #添加两个文本框
self.input_text = Text(self.window)
self.input_text['bg'] = 'pink'
self.input_text.grid(row=0, column=0, sticky=W) self.result_labe = Text(self.window)
self.result_labe['bg'] = 'blue'
self.result_labe.grid(row=0, column=2) self.to_json_button = Button(self.window, text='to_json', bg='lightblue', width=10, command=self.to_json)
self.to_json_button.grid(row=1, column=1) self.window.mainloop() # def set_window(self, window):
def to_json(self):
     #置空text
self.result_labe.delete(0.0, END) def to_jsonschema(json_data, result):
'''
递归生成jsonschema
:return:
'''
if isinstance(json_data, dict):
is_null = True
result.append('{')
result.append("'type': 'object',")
result.append("'properties': {")
for k, v in json_data.items():
is_null = False
result.append("'%s':" % k)
to_jsonschema(v, result)
result.append(',')
if not is_null:
result.pop()
result.append('}')
result.append('}')
elif isinstance(json_data, list):
result.append('{')
result.append("'type': 'array',")
result.append("'items': ")
to_jsonschema(json_data[0], result)
result.append('}')
elif isinstance(json_data, int):
result.append("{")
result.append("'type': 'number'")
result.append('}')
elif isinstance(json_data, str):
result.append("{")
result.append("'type': 'string'")
result.append('}') return "".join(result) json_data = self.input_text.get(0.0, END).strip().replace("\n", "")
result = []
try:
testdata = to_jsonschema(eval(json_data), result)
params = eval(testdata)
self.result_labe.insert(1.0, json.dumps(params, indent=4))
except Exception as e:
self.result_labe.insert(1.0, '输入的JSON数据有问题, 请检查') my_gui = My_GUI()

效果如下:

简单做了个小Demo, 后续优化, 这样可以直接把生成的jsonschema拿来用了。

再做的自动化点的话也可以把自动化测试的那些东西填进去, 生成模板修改后接着再继续自动化使用进行接口测试,那样可以做就是会比较重了, 还是根据自己需要进行相关测试策略设计。

利用Tkinter做的自动生成JSONSchema的小工具的更多相关文章

  1. Unity 自动生成组件索引类工具

    Unity 自动生成组件索引类工具 需求由来 我们在写UI类时 需要获取预设中的组件 joystick = transform.Find("joystick"); backgrou ...

  2. 利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类

    一.利用MyEclipse连接数据库 1. 打开MyEclipse的数据库连接视图 然后在Other中找到"MyEclipse Database"中的DB Browser 2. 在 ...

  3. 利用Eclipse的JPA自动生成注解实体

    新公司用的SSH(springmvc)框架,看代码的时候,发现没有hbm.xml文件,全部使用的注解形式.在一次闲聊的时候问同事,这么多entity  写起来不麻烦么.同事说根据数据库自动生成的.于是 ...

  4. 利用jsplumb和碰撞检测自动生成流程图

    使用jsplumb构建流程图模型时,有一个需求要求,选项可以从选项表中拖拽到指定容器,并且两个选项要接触到的时候才能连接起来,不接触不能连接.效果图如下 略丑- 因为这里用到了拖拽,拖放功能,所以用到 ...

  5. [转]用Python做一个自动生成读表代码的小脚本

    写在开始(本片文章不是写给小白的,至少你应该知道一些常识!) 大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码.非常烦.来 ...

  6. c# 利用t4模板,自动生成Model类

    我们在用ORM(比如dapper)的时候,很多时候都需要自己写Model层(当然也有很多orm框架自带了这种功能,比如ef),特别是表里字段比较多的时候,一个Model要写半天,而且Model如果用于 ...

  7. 自动生成Mapper和Entity工具MybatisGenerator的使用

    新建一个XML文件crmGeneratorConfig.xml,文件具体内容如下.把MybatisGenerator.zip解压出来,把MybatisGenerator文件夹复制到Eclipse安装目 ...

  8. WPF根据Oracle数据库的表,生成CS文件小工具

    开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...

  9. ASP.NET MVC5利用EF,反向自动生成数据库

    1.在Model类里面,写好相应的属性. using System; using System.Collections.Generic; using System.Linq; using System ...

随机推荐

  1. android下拉菜单spinner的使用方法

    Spinner控件也是一种列表类型的控件,它的继承关系如下:  java.lang.Object    ↳ android.view.View      ↳ android.view.ViewGrou ...

  2. PHP设置会话(Session)超时过期时间实现登录时间限制

    最近某个PHP项目用到了限制登录时间的功能,比如用户登录系统60分钟后如果没有操作就自动退出,我搜索了网络收集了有以下方法可供参考. 第一种方法即设置php.ini配置文件,设置session.gc_ ...

  3. Android Developer:合并清单文件

    使用Android Studio而且基于Gradle构建.每一个App能在多个位置包括清单文件,比如在src/main文件夹下productFlavor.库.Android ARchive(AAR) ...

  4. (二)spark算子 分为3大类

     transgormation的算子对key-value类型的数据有三种: (1)输入 与 输出为一对一关系 mapValue();针对key-value类型的数据并只对其中的value进行操作,不对 ...

  5. 编写一个基于HBase的MR程序,结果遇到一个错:ERROR security.UserGroupInformation - PriviledgedActionException as ,求帮助

    环境说明:Ubuntu12.04,使用CDH4.5,伪分布式环境 Hadoop配置如下: core-site.xml: <configuration><property>    ...

  6. HTML DOM节点的增删改查

    上篇博客中,我们已经初步接触了DOM基础,可是我们学习是为了可以更好地应用,今天我们就来看看DOM节点的增删改查. 无论在哪里,我们想要操作一个东西,总是应该先去获得它.那么我们怎么获得呢? HTML ...

  7. Vue实现组件props双向绑定解决方案

    注意: 子组件不能直接修改prop过来的数据,会报错 方案一: 用data对象中创建一个props属性的副本 watch props属性 赋予data副本 来同步组件外对props的修改 watch ...

  8. history命令使用方法详解

    history是一条非常实用的shell命令,可以显示出之前在shell中运行的命令,配合last显示之前登录的用户,就可以追溯是哪个用户执行了某些命令.以下详细说明history使用中常见的命令或技 ...

  9. Elasticsearch集群问题,导致主master节点发现不了node节点

    个人博客:https://blog.sharedata.info/ 最新需要配置es集群采用5个分片和1个副片,正好是11台机器,而只保留一份备份所以只需要5*2=10台机器方案:1.1台作为mast ...

  10. 【BZOJ2322】[BeiJing2011]梦想封印 高斯消元求线性基+DFS+set

    [BZOJ2322][BeiJing2011]梦想封印 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantas ...