zoukankan      html  css  js  c++  java
  • 利用Tkinter做的自动生成JSONSchema的小工具

          前面讲到可以使用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("
    ", "")
            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拿来用了。

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

  • 相关阅读:
    OAuth 2 开发人员指南(Spring security oauth2)
    Android如何在ListView中嵌套ListView
    Android之ScrollView嵌套ListView冲突
    Android 去除EditText边框,添加下划线,
    Android日期时间选择器实现以及自定义大小
    验证Android用户输入日期
    Cygwin安装时,选择163的源后出错:Unable to get setup.ini from <http://mirrors.163.com/cygwin/>
    Windows平台下安装Hadoop
    如何在windows下安装cygwin
    连接Linux服务器:Win免费SSH客户端工具
  • 原文地址:https://www.cnblogs.com/dreamyu/p/9488947.html
Copyright © 2011-2022 走看看