dubbo接口测试_Django测试工具平台之Dubbo接口请求 + 前端
前言
本章内容主要完成以下几个内容:
1、记录Dubbo接口请求
2、搜索请求记录
3、前端页面完成
4、项目第一阶段展示
项目展示中主要演示在本地如何启动项目,进行调试。如果需要部署线上环境,可以去搜索其他方案。
1、记录Dubbo接口请求
这里的数据模型可以根据你自己的需要来添加,比如Dubbo接口可以按照“微服务”,“部门”来划分,因为我这个项目主要是提供思路,所以没有划分的很详细,这里直接由 user_id来记录。
class DubboControllerLogs(Model): service_name = models.CharField(max_length=128, unique=False, null=False, blank=False, verbose_name="服务名") dubbo_method = models.CharField(max_length=64, unique=False, null=False, blank=False, verbose_name="方法名") params_type = models.CharField(max_length=16, null=True, blank=True, verbose_name="参数类型") params = models.CharField(max_length=2048,default="", verbose_name="参数") user_id = models.IntegerField(verbose_name="请求人的ID") create_time = models.DateTimeField(auto_now_add=True, verbose_name="添加时间") # auto_now_add 设置为True,添加时间不可变 update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间") # auto_now 设置为True,更新时间可变 class Meta: db_table = "dubbo_controller_logs" verbose_name = "Dubbo接口请求记录" verbose_name_plural = verbose_name def __str__(self): return self.service_name + "#" + self.dubbo_method1234567891011121314151617
这里我们添加两个序列化类,一个用来获取数据,一个用来请求
class ControllerInfoSerializer(ModelSerializer): """ 接口详情序列化类 """ class Meta: model = DubboControllerLogs fields = '__all__'class InvokeSerializer(ModelSerializer): class Meta: model = DubboControllerLogs fields = ("service_name", "dubbo_method", "params_type")1234567891011121314
然后完成我们view.py视图函数,我们在第二章的请求Dubbo接口上进行一些改造,在每次请求的时候保存请求记录
class DubboApi(CreateAPIView): permission_classes = (IsAuthenticated,) # 登陆才能请求 authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) serializer_class = InvokeSerializer def post(self, request, *args): """ 请求Dubbo接口 :param request: :return: """ serializer = self.get_serializer(data=request.data) if serializer.is_valid(): serializer.save(user_id=request.user.id, params=json.dumps(request.data.get('params'))) else: return params_error(message=serializer.errors) service_name = request.data.get('service_name') dubbo_method = request.data.get('dubbo_method') # 多参数类型,多参数 params_type = request.data.get('params_type') params = request.data.get('params') dubbo_info = GetDubboService().get_dubbo_info(service_name) server_host = dubbo_info.get("server_host") server_port = dubbo_info.get("server_port") # 判断参数类型 if params_type == "class": result = InvokeDubboApi(server_host, server_port).invoke_dubbo_api(service_name, dubbo_method, params) else: args = params result = InvokeDubboApi(server_host, server_port).invoke_dubbo_api(service_name, dubbo_method, *args) return ok_data(data=json.loads(result))12345678910111213141516171819202122232425262728293031
搜索请求记录
接下来完成“查询请求记录”和“搜索功能”。搜索功能的话使用的是 objects.filter() ,没有用SearchFilter过滤器,感兴趣的可以了解一下。
class DubboInfosView(ListAPIView): serializer_class = ControllerInfoSerializer # 分页 pagination_class = DubboPagination permission_classes = (IsAuthenticated,) authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) def get(self, request, *args, **kwargs): service_name = request.GET.get("service_name") dubbo_method = request.GET.get("dubbo_method") if service_name =="" and dubbo_method =="": search_dubbo = DubboControllerLogs.objects.all() total = search_dubbo.count() elif service_name != "" and dubbo_method != "": search_dubbo = DubboControllerLogs.objects.filter(Q(service_name__icontains=service_name) & Q(dubbo_method__icontains=dubbo_method)) total = search_dubbo.count() elif dubbo_method != "": search_dubbo = DubboControllerLogs.objects.filter(Q(dubbo_method__icontains=dubbo_method)) total = search_dubbo.count() else: search_dubbo = DubboControllerLogs.objects.filter(Q(service_name__icontains=service_name)) total = search_dubbo.count() dubbo_infos_str = serializers.serialize('json', search_dubbo.order_by('-id'), fields=( "service_name", "dubbo_method", "params_type", "params", "user_id")) dubbo_infos = json.loads(dubbo_infos_str) # 实例化分页对象,获取数据库中的分页数据 paginator = DubboPagination() page_info_list = paginator.paginate_queryset(dubbo_infos, self.request, view=self) json_list = [] for dubbo in page_info_list: dubbo_info = dubbo.get("fields") json_list.append(dubbo_info) return ok_data(data={"total": total, "dubbo_infos": json_list})1234567891011121314151617181920212223242526272829303132333435
完成逻辑代码之后,我们就可以在urls.py中注册相关路由就可以请求了。
3、前端页面完成
前端项目在一个开源项目基础上修改的,节省了很多时间,有需要可以移步
http://panjiachen.github.io/vue-admin-template
页面的开发采用elementui现成的页面组件
在原项目的utils文件夹下新增http.js 封装了适合本项目的一个请求方式
import axios from 'axios'import hostUrl from '@/config'import { getToken } from "@/utils/auth";const MyHttpServer = {}const whitePath = ['user/login', 'user/register']MyHttpServer.install = (Vue) => { axios.interceptors.request.use((config) => { config.baseURL = hostUrl.DEV_HOST// // 设置请求头const AUTH_TOKEN = getToken('vue_admin_template_token')console.logwhitePath.includes(config.url) || (config.headers = {'Authorization':"JWT "+AUTH_TOKEN,'Content-Type': 'application/json'})return config}) // 添加实例方法 Vue.prototype.$http = axios}export default MyHttpServer1234567891011121314151617181920212223
新增config/index.js,新增了修改了后台的请求地址
const hostUrl ={ DEV_HOST: 'http://127.0.0.1:8000/api/'} export default hostUrl;123456
4、项目第一阶段展示
4.1启动后台项目
git 拉去master代码 TestPlatform https://github.com/627886474/TestPlatform
在settings中修改你的mysql配置
在config.ini中填上你zookeeper的地址
然后下载相关依赖包
pip install -r package.txt1
生成数据库表
python manage.py makemigrationspython manage.py migrate12
最后启动后台服务
python manage.py runserver1
服务启动成功,接下来 启动前端项目
4.2 启动前端项目
git 拉去master代码 TestPlatform-webhttps://github.com/627886474/TestPlatform-web
进入主目录
npm installnpm run dev12
4.3 界面演示
注册用户,手机号,邮箱不能重复
注册成功后,登录账号,进入后台管理页面
进入Dubbo接口 服务调用菜单,填入相关参数,对于不同Dubbo接口的入参说明请看最后
在调用记录弹出框中,可搜索之前Dubbo服务的调用记录,并且一键填充,可快速复制别人的请求记录,以方便自己使用
入参说明
请求示例:
服务中的方法是 :
Object addStudent(UserAO user)
{ "service_name":"com.zl.ITestService", "dubbo_method":"add", "params_type":"class", "params":{ "class":"com.zl.entity.ao.UserAO", "school":[ "1", "2" ], "name":"zl", "tuofa":"true" }}1234567891011121314
服务中的方法是 :
Object getStudent(Integer id, List name),参数需要使用 [] 包起来
{ "service_name": "com.zl.ITestService", "dubbo_method": "add", "params_type":"others", "params": [ 123, [ "zl" ] ]}1234567891011
枚举类请求:
Object getStudent(Integer itemId, StudentEnum studentEnum);
枚举类的类名: com.zl.item.entity.StudentEnum
需要使用到的枚举类:GOOD_STUDENT,填写格式如下 :
{ "service_name": "com.zl.ITestService", "dubbo_method": "add", "params_type":"others", "params": [ 123,{"name": "GOOD_STUDENT", "class": "com.zl.item.entity.StudentEnum "} ]}12345678
常见的异常情况:
1、请求参数异常
请求Dubbo接口如果填入的参数有误,会报 no such method 的错误,请检查一下参数是否正常
2、对于入参是Boolean类型的数据
在json中,直接 使用{“data”:true}即可,但是在python请求时需要使用 “true”,加上双引号
项目总结
项目第一阶段基本完成,如果你们公司是使用Dubbo技术栈的,可以用这个平台来快速介入Dubbo接口的测试哦!
如果有疑问,或者对这个项目有更好的建议欢迎留言!我会持续改进
项目还存在诸多不足,因对Django不是很熟悉,很多Django的特性没有用上,比如管理后台,视图集。功能也只完成了一个大功能,如果你有更多的想法欢迎在git上提交代码。
dubbo接口测试_Django测试工具平台之Dubbo接口请求 + 前端相关推荐
- 云产品测试软件,云测试工具平台介绍
CloudAutoRunner 黑盒测试工具 云自动化测试工具CloudAutoRunner基本介绍 AutoRunner是黑盒测试工具.可以用来完成功能测试.回归测试,可以提高测试效率,降低测试人工 ...
- 3年自动化测试,我突然想转测试开发了,开发测试工具平台......
目录:导读 前言 一.掌握一门编码语言 二.开发什么样的工具(平台) 三.如何开发测试工具 四.工具的推广与升华 五.总结 前言 那就是刚进入这个行业的时候,可以不用急于去专研某个领域.白岩松老师曾说 ...
- itest work(爱测试) 开源接口测试敏捷测试管理平台 9.5.0 发布,接口测试及脑图用例重大升级
(一)itest work 简介 itest work (爱测试) 一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest w ...
- itest work(爱测试) 开源一站式接口测试敏捷测试管理平台 9.0.5 GA 发布
(一)itest work 简介 itest work (爱测试) 一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest w ...
- 接口和接口测试以及测试工具
接口测试的重要性: 接口是什么: 接口测试 : F12抓包后,找出相应的URL,输入到postman中模拟get和post请求.
- 测试小白入门必知必会的8个测试工具
1.Fiddler:网络抓包工具 Fiddler在测试中一般用于篡改接口请求或接口返回数据以测试前后端业务场景或对异常功能的兼容.它能监控进出设备的http协议请求,并且支持重新编辑请求与返回,从而测 ...
- 推荐几个非常实用的测试工具
1.Fiddler:网络抓包工具 Fiddler在测试中一般用于篡改接口请求或接口返回数据以测试前后端业务场景或对异常功能的兼容.它能监控进出设备的http协议请求,并且支持重新编辑请求与返回,从而测 ...
- 测试自动化平台 | 测试开发工程师的进阶之路
https://mp.weixin.qq.com/s/WU5h8FW6BT5YZtlsSuCIcw 「摘要」随着近几年国内IT行业高速发展,对测试工程师的要求也越来越高,其作用也越来越重要,但很多测试 ...
- 手游测试工具ThreadingTest--对高仿版植物大战僵尸进行测试
目前,市面上Android手游项目的测试都采用传统的手工测试方法,而手工测试受到诸多方面因素的限制,不利于版本迭代时大规模的回归测试. ThreadingTest(简称"TT")是 ...
最新文章
- 程序员常用的六大技术博客类
- 打印 指定目录下和子目录下的的所有.java文件的路径. (使用FileFilter过滤器)
- 茶觉 | “治愈”的白牡丹
- Android 中文 API (19) —— TwoLineListItem
- 白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
- 输入URL到浏览器显示页面的过程,搜集各方面资料总结一下
- 老板思维:工作负责人是首问责任制
- Windows破解逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)
- 思必驰AI芯片发布:内置完整语音交互方案,支持离线模式,All in One
- python函数定义及调用-Python函数及变量的定义和使用
- linux下mysql数据的导出和导入
- js每隔5分钟执行一次ajax请求的实现方法
- 2010-03-24 网络驱动
- 深扒金山云招股书:拆分出来的子公司,能否走出金山系“舒适圈”?
- 什么是大数据可视化,有什么作用?
- 在LINUX-DEBIAN系统下挂载新硬盘的方法
- webstorm实用技巧
- 安装linux双系统简书,win10 + ubuntu18.04 双系统的安装
- 安利一个适合调试rt thread的串口助手软件
- 什么是自媒体以及自媒体的分类
热门文章
- CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR
- 1.8M超轻量目标检测模型NanoDet,比YOLO跑得快
- 速览!CVPR 2020 最新论文
- 如何用 Python 分析 14 亿条数据?
- 为了给女朋友买件心怡内衣,我用Python爬虫了天猫内衣售卖数据
- 【每日一算法】罗马数字转整数
- 基于Python的验证码识别技术
- Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫
- Python忽略warning警告错误
- 网络工程师_记录的一些真题_2005下半年上午