手把手教你弄一个超简单的接口测试工具

897 阅读3分钟

这是我的第一篇博客,一起参与掘金新人创作活动,开启写作之路。

引言

在我们的日常工作中,postmanpostwomanApiFox等已经占据了接口测试的大多数市场,但是对于我们有特殊需求或者个性化的需要时,我们还是希望能够自己开发一个拥有自主知识产权的小工具,开个玩笑哈。其实我就是想通过这个小工具的开发来让自己对接口测试工具有初步的认识,同时也能稍微让自己许久不写代码的手活动活动。

我计划开发一个超简单的接口测试工具:FkApi。

设计

界面部分

由于我对Python更加熟悉,而且其语法简单,容易上手,普适性更强,所以我们选择采用Python开发一款all in one的CS架构软件。

既然是CS架构,那我们就得考虑GUI的框架,QT超强但稍显复杂,TK好用但界面不美,Wxpython我不太熟悉,那我们索性就选择一个基于Wxpython封装的库,它就是Gooey。

Gooey能够通过一行命令将代码转成GUI程序,简直离谱,不过我喜欢。

请求处理

这部分,我们直接选择Pytho最流行的请求处理框架Requests来处理。即GUI输入相关参数,变量接收传递给Requests,Requests发起请求,并将结果返回到GUI。这样就简单的实现了一个初级的接口测试功能。

参数设计

第一阶段,我们先能够实现GET、POST请求的功能,同时能够实现自定义headers,因为部分接口可能需要鉴权。为了方便入门和演示,我们第一阶段先做如上简单功能。

第二阶段(后续再做),我们计划实现HOST、URL、Para分离,针对特殊服务定制化开发功能。

开发

环境准备

安装python3

安装Gooey和Requests

pip install gooey

代码及解释

test.py

# 导入gooey
from gooey import Gooey, GooeyParser

# 配置,指定语言为中文,应用名称为FkApi,定义菜单内容
@Gooey(language='chinese',program_name='FkApi',menu=[
    {'name': 'File', 'items': []},
    {'name': 'Tools', 'items': []},
    {'name': 'Help', 'items': [
        {
        'type': 'AboutDialog',
        'menuTitle': '关于',
        'name': 'FkApi',
        'description': '超简单的RestApi测试工具,专注于接口数据获取!',
        'version': '0.0.1',
        'copyright': '2021',
        'website': 'https://phyger.tk',
        'developer': 'phyger',
        'license': 'MIT'
        },
        ]}
    ])
def main():
    # 创建gooey实例,并指定应用的描述
    parser = GooeyParser(description="一个超简单的RestApi测试小工具")
    # 添加输入widget,URL参数;help为提示文本,default为默认值
    parser.add_argument('url',metavar='请求URL',help='https://getman.cn/mock/route/to/demo',default='https://getman.cn/mock/route/to/demo')
    parser.add_argument('method',metavar='请求类型',choices=['get','post'],default='get')
    parser.add_argument('head',metavar='自定义header',help="{'user-agent':'Chrome/96.0.4664.45'}",default='{"user-agent":"Chrome/96.0.4664.45"}')

    # 获取GUI传到后端的参数,是一个对象,具体参数是这个对象的属性
    args = parser.parse_args()
    
    import json
    # 获取具体属性的值
    url = args.url
    method = args.method
    head = args.head

    # header格式转化str-->dict
    if head:
        header = json.loads(head)
    else:
        header = ''
    import requests
    # 忽略https告警
    requests.packages.urllib3.disable_warnings()
    # 根据不同请求类型发起请求
    if method == 'post':
        res = requests.post(url,verify=False,headers=header)
    else:
        res = requests.get(url,verify=False,headers=header)
    ret=json.loads(res.content)
    ret_head = res.headers
    # 将请求数据和响应数据返回给GUI
    print('>>>>>>>> Request Headers <<<<<<<<\n'+head+'\n'+'>>>>>>>> Request <<<<<<<<\n'+url+'\n'+'>>>>>>>> Response <<<<<<<<')
    print(ret)
    print('>>>>>>>> Response Headers <<<<<<<<')
    print(ret_head)
    print('=============================')

if   __name__ == '__main__':
    main()

代码调试

直接运行如上Python代码

哇哦,我们的GUI界面已经成功展示在我们面前。。

点击开始

程序运行中。。

稍等片刻

我们已经能够看到请求响应信息了。

代码打包

安装pyinstaller和pywin32

pip install pyinstaller 
pip install pywin32

开始打包

命令:pyinstaller -F -w test.py

打包过程

打包结果

双击打开test.exe

至此,我们的简单接口测试工具第一阶段完美结束,后续我们将继续对FkApi进行优化和改进,尽请期待。