UNPKG

yapi-plugin-intl-auto-test

Version:

YAPI自动化测试插件,支持在YAPI设置测试计划,历史测试结果存入ES,界面显示测试结果,自定义通知。

198 lines (169 loc) 5.53 kB
const baseController = require('controllers/base.js'); const testPlanModel = require('../models/plan'); const yapi = require('yapi.js'); const schedule = require('../schedule'); class testPlanController extends baseController { constructor(ctx) { super(ctx); this.testPlanModel = yapi.getInst(testPlanModel); this.schedule = yapi.getInst(schedule); } /** * 获取项目下的测试计划 * @param {*} ctx */ async getTestPlans(ctx) { try { const projectId = ctx.params.project_id; const plans = await this.testPlanModel.findByProject(projectId) ctx.body = yapi.commons.resReturn(plans); } catch (e) { ctx.body = yapi.commons.resReturn(null, 401, e.message); } } /** * 获取所有测试计划 * @param {*} ctx */ async getAllTestPlans(ctx) { try { const plans = await this.testPlanModel.listAll() ctx.body = yapi.commons.resReturn(plans); } catch (e) { ctx.body = yapi.commons.resReturn(null, 401, e.message); } } /** * 新建测试计划 * @param {*} ctx */ async saveTestPlan(ctx) { let params = ctx.request.body; params = yapi.commons.handleParams(params, { plan_name: 'string', plan_url: 'string', plan_cron: 'string', plan_result_size: 'number' }); if (!params.plan_name) { return (ctx.body = yapi.commons.resReturn(null, 400, '计划名不能为空')); } if (!params.plan_url) { return (ctx.body = yapi.commons.resReturn(null, 400, '测试链接不能为空')); } if (!params.plan_cron) { return (ctx.body = yapi.commons.resReturn(null, 400, 'Cron表达式不能为空')); } const checkRepeat = await this.testPlanModel.findByName(params.plan_name); if (checkRepeat) { return (ctx.body = yapi.commons.resReturn(null, 401, '计划名重复')); } const webhook = params.webhook; const webhookUrl = params.webhook_url; let webhookData = params.webhook_data; try { const data = { project_id: params.project_id, plan_name: params.plan_name, is_plan_open: params.is_plan_open, plan_cron: params.plan_cron, plan_url: params.plan_url, plan_result_size: params.plan_result_size, notice_trigger: params.notice_trigger, notifier: { target: "workWX", url: params.notifier_url }, webhook: webhook, webhook_url: webhookUrl, webhook_data: webhookData, uid: this.getUid() } const plan = await this.testPlanModel.save(data); if (data.is_plan_open) { this.schedule.addTestJob(plan._id, plan); } ctx.body = yapi.commons.resReturn(plan); } catch (e) { ctx.body = yapi.commons.resReturn(null, 401, e.message); } } /** * 更新测试计划 * @param {*} ctx */ async updateTestPlan(ctx) { let params = ctx.request.body; const id = params.id; params = yapi.commons.handleParams(params, { plan_name: 'string', plan_url: 'string', plan_cron: 'string', plan_result_size: 'number', webhook_url: 'string' }); if (!params.plan_name) { return (ctx.body = yapi.commons.resReturn(null, 400, '计划名不能为空')); } if (!params.plan_url) { return (ctx.body = yapi.commons.resReturn(null, 400, '测试链接不能为空')); } if (!params.plan_cron) { return (ctx.body = yapi.commons.resReturn(null, 400, 'Cron表达式不能为空')); } const webhook = params.webhook; const webhookUrl = params.webhook_url; let webhookData = params.webhook_data; const checkRepeat = await this.testPlanModel.findByName(params.plan_name); if (checkRepeat && checkRepeat._id !== id) { return (ctx.body = yapi.commons.resReturn(null, 401, '计划名重复')); } try { const data = { project_id: params.project_id, plan_name: params.plan_name, is_plan_open: params.is_plan_open, plan_cron: params.plan_cron, plan_url: params.plan_url, plan_result_size: params.plan_result_size, notice_trigger: params.notice_trigger, notifier: { target: "workWX", url: params.notifier_url }, webhook: webhook, webhook_url: webhookUrl, webhook_data: webhookData } await this.testPlanModel.update(id, data); const plan = await this.testPlanModel.find(id); //操作定时任务 if (data.is_plan_open) { this.schedule.addTestJob(id, plan); } else { this.schedule.deleteTestJob(id); } ctx.body = yapi.commons.resReturn(plan); } catch (e) { ctx.body = yapi.commons.resReturn(null, 401, e.message); } } /** * 删除测试计划 * @param {*} ctx */ async delTestPlan(ctx) { try { const id = ctx.params.id; if (!id) { return (ctx.body = yapi.commons.resReturn(null, 400, 'id不能为空')); } const result = await this.testPlanModel.del(id) this.schedule.deleteTestJob(id); ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); } } } module.exports = testPlanController;