Django:给requests发送请求功能 套一层衣服。
个人的疑问
️
django我目前还认为django自带的后台管理系统能直接改成测试平台(主要原因前端不会画)
做了个啥?
也是在学django,然后了解了simple UI,就先试试了给requests发请求这块套了个壳子,就有了这个小东西,做这个东西的时候也是一边翻之前买的django书籍,一边百度。。。
用了些啥?
Django 2.2
simple UI
sqllite(django 自带的)
requests
样子
-
登录
-
首页
-
用例管理
-
新增用例
-
执行用例
-
响应结果:
-
列表栏会显示
-
详情页也会显示
-
点击发送请求按钮,也会显示不过不会处理,出现多选用例发送请求时只会显示最后一条用例的结果,效果差不多是这样的。
-
目录结构
代码展示
-
models.py
from django.contrib.auth.models import User from django.db import models # Create your models here. from django.utils import timezone class Case(models.Model): METHODS = ( # 前者value存在数据库中, 后者为注释内容显示在后台管理系统中 ('get', 'GET'), ('post', 'POST'), ('delete', 'DELETE'), ('put', 'PUT'), ) DATA_TYPE = ( # 前者value存在数据库中, 后者为注释内容显示在后台管理系统中 ('params', 'PARAMS'), ('data', 'DATA'), ('json', 'JSON'), ) case_title = models.CharField(max_length=50, verbose_name="用例标题", unique=True) case_desc = models.TextField(verbose_name="用例描述") request_path = models.CharField(max_length=100, verbose_name="接口路径") request_method = models.CharField(max_length=10, choices=METHODS, default=METHODS, verbose_name="请求方式") header = models.TextField(verbose_name="请求头", blank=True) data_type = models.CharField(max_length=10, choices=DATA_TYPE, default=DATA_TYPE, verbose_name="数据请求形式") data = models.TextField(verbose_name="请求数据", blank=True) create_time = models.DateTimeField(default=timezone.now, verbose_name="创建时间") author = models.CharField(max_length=8, verbose_name="创建者", default=User) update_time = models.DateTimeField(auto_now=True, verbose_name="最近更新时间") result = models.TextField(verbose_name="响应结果") def __str__(self): return self.case_title class Meta: # 复数形式显示 # verbose_name = "用例管理" # 单数形式 verbose_name_plural = "用例管理" ordering = ["id"]
-
views.py(因为使用的是admin的后台 目前是没有路由的。。。)
-
admin.py(主要是这里了,没啥技术含量)
from django.contrib import admin from django.http import JsonResponse from .models import Case # Register your models here. from .util import http """ 数据库迁移命令: 1。 python manage.py makemigrations 2。 python manage.py migrate 3。 创建app命令:python manage.py startapp 应用名 4. 创建管理后台账号,python manage.py createsuperuser """ # admin.site.register(Case) # 定义显示内容到admin管理系统 @admin.register(Case) class CaseModel(admin.ModelAdmin): # 设置显示(admin 数据列表页)的字段 list_display = [ 'case_title', 'request_path', 'request_method', 'header', 'data_type', 'data', 'create_time', 'author', 'update_time', 'result' ] # 新增/修改数据时隐藏字段 exclude = [ 'create_time' ] # 设置字段只读 readonly_fields = ['result'] # 筛选字段 list_filter = ['request_method', 'data_type'] # 搜索字段 search_fields = ['id', 'case_title', 'request_path', 'author'] # 设置时间选择功能 date_hierarchy = 'create_time' # 定义按钮 actions = ['send_http'] # 按钮事件 def send_http(self, request, queryset): # 调用requests发送请求,queryset 会取得model中设置的case_title for query in queryset: # 得到了这个用例标题 res = http(query) # 在页面上json格式返回响应内容 return JsonResponse(res, json_dumps_params={'ensure_ascii': False}) # 设置按钮 send_http.short_description = '发送请求' send_http.icon = 'fas fa-audio-description' send_http.type = 'danger' send_http.style = 'color:black;' # # 注册 # admin.site.register(Case, CaseModel) # 修改网站标题 admin.site.site_title = "接口测试工具V0.1" admin.site.site_header = "Web界面接口测试工具"
-
util.py(里面封装了requests发送请求)
#!/usr/bin/env/python3 # -*- coding:utf-8 -*- """ @project: apiRequestUtil @author: zy7y @file: util.py @ide: PyCharm @time: 2020/9/4 """ from json import loads from .models import Case import requests session = requests.Session() host = '//49.232.203.244:8888/api/private/v1/' def http(title): # 根据title查数据 case = Case.objects.filter(case_title=title).first() if case.header == '': header = None else: header = loads(case.header) # 转换成json/dict data = loads(case.data) if case.data_type == 'params': res = session.request(method=case.request_method, url=host + case.request_path, headers=header, params=data) if case.data_type == 'data': res = session.request(method=case.request_method, url=host + case.request_path, headers=header, data=data) if case.data_type == 'json': res = session.request(method=case.request_method, url=host + case.request_path, headers=header, json=data) # 将响应存回数据库 case.result = res.json() case.save() return res.json()
弊端
util.py里面 设置了host地址。。。写死的
源码
GitHub://github.com/zy7y/apiRequestUtil_django
Gitee: //gitee.com/zy7y/apiRequestUtil_django
最后
我认为django自带的admin能实现测试平台,不知道是不是个错误的想法,欢迎讨论。