测试平台系列(74) 测试计划定时执行初体验

简介: 测试计划定时执行初体验

大家好~我是米洛


我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持。


回顾


上一节我们设计好了测试计划表并编写了CRUD接口,还没来得及测试,我们就要马不停蹄地编写定时任务相关内容了。今天我们就来编写一个完善的demo,可以定期执行测试计划的用例,并生成报告。

至于后面的通知,要等到以后完善了。

调整Executor类里面的部分方法


之前我们虽然支持了多条case异步运行并写入测试报告,但为了支持测试计划,我们还需要进行一些调整。

  • 修改run_multiple方法
    我们的核心还是这个方法,因为里面已经包装好了运行多条case的方法。但我们要做一些改动:

3.jpg

变更参数

首先我们要调整它的参数,因为我们运行case的模式,有很多种,按照之前定义的mode字段:

4.jpg

这个是测试报告表中定义的

5.jpg

调整一下

这样,当我们调用run_mutiple方法的时候,就可以知道case的模式是什么模式了,究竟是隶属于测试计划呢,还是属于普通执行的case。我们调整一下,改成图2的数据。

plan_id可以为空,如果有plan_id的话,可以直接跳转到测试计划相关页面。方便编辑测试计划,也方便排查问题。

ordered这个方法区分同步还是异步,因为我们先前的run_multiple都是默认异步的,但我们测试计划又新增了同步模式,所以需要定义这样一个参数

  • 修改ReportDao

6.jpg

image

也是添加这2个参数,透传进来。方便报告里面表明,这是什么模式的执行,以及是否有测试计划id。

  • 调整执行逻辑

7.jpg

image

根据ordered字段判断是否是同步执行,如果不是则和以前一致,是的话则用for的方式执行,保证用例执行的顺序性

新增run_test_plan方法



@staticmethod
    async def run_test_plan(plan_id: int):
        """
        通过测试计划id执行测试计划
        :param plan_id:
        :return:
        """
        plan = await PityTestPlanDao.query_test_plan(plan_id)
        if plan is None:
            Executor.log.info(f"测试计划: [{plan_id}]不存在")
            return
        # 设置为running
        plan.state = 1
        await PityTestPlanDao.update_test_plan(plan, plan.update_user)
        # if plan.disabled:
        #     # 说明测试计划已禁用
        #     Executor.log.info(f"测试计划: [{plan.name}]未开启")
        #     return
        env = list(map(int, plan.env.split(",")))
        case_list = list(map(int, plan.case_list.split(",")))
        await asyncio.gather(
            *(Executor.run_multiple(0, int(e), case_list, mode=1,
                                    plan_id=plan.id, ordered=plan.ordered) for e in env))
        # TODO 后续通知部分
        plan.state = 0
        await PityTestPlanDao.update_test_plan(plan, plan.update_user)

先通过query方法查到测试计划数据,如果plan是None,说明没有这个测试计划,可能被删掉了。

否则我们走执行逻辑: 根据plan的env字段取出环境,并转换为[1, 2]这样的数组。

这里可能有点绕,因为我们数据库存的env和case_list都是这样的形式:

1,2,3,4

通过逗号分开,我们split以后,会得到: ["1", "2", "3", "4"]这样的数组,所以我们需要批量转为int。

最后,由于一般环境之间会隔离,所以我们的ordered根据环境走就可以了,多环境执行我们可以按照异步处理。

所以最后也选用了gather。

编写Scheduler类


我们在utils目录下新建scheduler.py文件:


from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from app.utils.executor import Executor
class Scheduler(object):
    scheduler: AsyncIOScheduler = None
    @staticmethod
    def init(scheduler):
        Scheduler.scheduler = scheduler
    @staticmethod
    def configure(**kwargs):
        Scheduler.scheduler.configure(**kwargs)
    @staticmethod
    def start():
        Scheduler.scheduler.start()
    @staticmethod
    def add_test_plan(plan_id, plan_name, cron):
        return Scheduler.scheduler.add_job(func=Executor.run_test_plan, args=(plan_id,),
                                           name=plan_name, id=str(plan_id),
                                           trigger=CronTrigger.from_crontab(cron))
    @staticmethod
    def edit():
        pass
    @staticmethod
    def remove():
        pass
    @staticmethod
    def list():
        job_list = Scheduler.scheduler.get_jobs()
        return job_list

这里我们对scheduler进行了非常简单的封装,然后定义了add_test_plan方法。


这个方法可以添加Executor.run_test_plan到定时任务,他接受id,name和cron3个参数,这个数据最终会落到定时任务表里面去。

在添加测试计划接口调用add_test_plan方法


8.jpg

当测试计划添加成功的时候,我们自动添加定时任务

测试一下


FastApi深度结合了Swagger,所以我们只需要打开: http://localhost:7777/docs便可以找到我们的测试方法:

9.jpg

填入token和测试计划相关信息即可

由于我已经添加过了,并且是每分钟一次,所以我们只需要启动服务,静静等待即可。

10.jpg

启动服务的时候,提示我这个每分钟执行的任务被miss了,我们再等一分钟

11.jpg

可以看到,环境1和环境2保持每分钟都在写入测试报告到数据库

12.jpg

image


那今天的简单demo就完成到这里,下一节我们完善删改查的内容。



相关文章
|
28天前
|
关系型数据库 MySQL 测试技术
【分享】AgileTC测试用例管理平台使用分享
AgileTC 是一个脑图样式测试用例管理平台,支持用例设计、执行与团队协作,帮助测试人员高效管理测试流程。
172 116
【分享】AgileTC测试用例管理平台使用分享
|
26天前
|
人工智能 数据可视化 测试技术
AI测试平台自动遍历:低代码也能玩转全链路测试
AI测试平台的自动遍历功能,通过低代码配置实现Web和App的自动化测试。用户只需提供入口链接或安装包及简单配置,即可自动完成页面结构识别、操作验证,并生成可视化报告,大幅提升测试效率,特别适用于高频迭代项目。
|
1月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
1月前
|
人工智能 测试技术 项目管理
测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
在实际项目中,需求文档分散、整理费时、测试遗漏等问题常困扰测试工作。霍格沃兹推出AI智能体测试平台全新功能——项目资料套件,可将多个关联文档打包管理,并一键生成测试用例,提升测试完整性与效率。支持套件创建、文档关联、编辑删除及用例生成,适用于复杂项目、版本迭代等场景,助力实现智能化测试协作,让测试更高效、更专业。
|
2月前
|
存储 人工智能 算法
AI测试平台实战:深入解析自动化评分和多模型对比评测
在AI技术迅猛发展的今天,测试工程师面临着如何高效评估大模型性能的全新挑战。本文将深入探讨AI测试平台中自动化评分与多模型对比评测的关键技术与实践方法,为测试工程师提供可落地的解决方案。
|
28天前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
2月前
|
存储 人工智能 文字识别
从零开始打造AI测试平台:文档解析与知识库构建详解
AI时代构建高效测试平台面临新挑战。本文聚焦AI问答系统知识库建设,重点解析文档解析关键环节,为测试工程师提供实用技术指导和测试方法论
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
750 23
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
721 24

热门文章

最新文章