基于云化测试平台的功能拨测与告警

一、前言

1、拨测是什么

拨测是指对系统、应用或网站进行测试,以确定其是否正常工作。在软件开发的不同阶段,拨测都扮演着至关重要的角色。它可以帮助开发团队及时发现和解决问题,确保软件的质量和稳定性。
虽然拨测是保证软件质量的必要步骤,但如何进行有效的拨测也是非常关键的。一方面,开发团队需要具备一定的技术和经验,以确保拨测结果的准确性和可靠性。另一方面,开发团队也需要投入大量的时间和精力进行拨测,从而影响软件开发的进度和质量。以下是一些进行有效拨测的建议:

  1. 设计拨测计划: 在进行拨测前,开发团队需要制定拨测计划,明确拨测的目的和范围,以及测试的时间和资源。这有助于确保拨测的有效性和可重复性,并减少不必要的浪费。
  2. 选择适当的拨测工具和服务: 选择适当的拨测工具和服务非常重要,可以大大提高拨测的效率和准确性。开发团队可以选择一些成熟的拨测工具和服务。
  3. 模拟真实环境: 在进行性能测试时,开发团队需要模拟真实的使用环境,以确保测试结果的准确性。例如,如果软件需要在高负载环境下运行,那么在进行性能测试时,需要模拟这种高负载环境。
  4. 定期进行拨测: 软件开发是一个持续不断的过程,因此定期进行拨测非常重要。定期拨测可以帮助发现潜在的问题和漏洞,并及时进行修复和优化,从而提高软件的质量和可靠性。
  5. 分析拨测结果: 在完成拨测后,开发团队需要对测试结果进行分析和归纳,以确定哪些方面需要改进和优化。例如,如果发现性能问题,开发团队可以考虑优化代码或增加硬件资源来提高性能。

简而言之,拨测是指对系统、应用或网站进行测试,以确定其是否正常工作,是质量看护的一项重要手段

2、带业务逻辑与不带业务逻辑

在明白的拨测的用途后,我们还需要对拨测做一个简单区分。
这里,我们从复杂度以及具体用途的视角,可以将拨测分为两类:一类是带业务逻辑的拨测,一类则是不带业务逻辑的拨测。

  • 所谓不带业务逻辑的拨测,指的是发起的测试更多的关注点在于网络、接口等的具体可用性,是否通常正常。我们常用的health_check就是比较常见的不带业务逻辑的拨测,诸如“页面元素检测”、“API可用性快速检查”、“阿里云网络拨测工具
    ”等都是属于不带业务逻辑的类型,其特点主要是方便快捷、能够以秒级的形式做快速检查
  • 所谓带业务逻辑的拨测,则是指发起的测试并非简单的网络检查,而是会编写较为复杂的测试用例、构造满足条件的运行环境与数据、定义不同检查点及对应状态等,以此检查服务具体的业务逻辑可用性与正确性。这里的测试用例严格要求满足setupteststepteardown等步骤,需要大量的执行机与资源环境,因此其特点主要是可测试完整、复杂的业务逻辑,但执行要求较高、速度较慢

3、云化场景下的新挑战

到了今天,在企业总体上云、开发DevOps化后,看护现网质量的诉求呼声也越来越高,其中拨测作为质量看护的重要手段,也转变为基于云化测试平台的在线测试。

然而,虽然在线的云化测试平台简化的测试人员编写用例、构建执行环境的工作量,但海量的测试用例如何有效地利用、定时发起在线拨测,并采取分层分级的有效告警以满足研发段/现网的问题快速发现与拦截,成为了现阶段全新的挑战。

针对上述问题,我们构建了专属的测试任务管理调度与告警平台,在实现妥善管理在线拨测测试任务的同时,实现了现网的快速预警。

这里,我们主要使用如下技术栈:

  • Django + Python
    • 使用Django作为开发基础框架,一方面框架较为成熟、易用;另一方面方便我们快速搭建前端交互与管理看板。
  • Celery + RabbitMQ
    • 拨测本质上需要我们快速、定时发起测试任务,因此异步任务必不可少。这里,我们使用了Celery作为异步任务调度框架。
    • Celery 需要一个中间件来进行接收和发送消息,通常以独立的服务形式出现,称为消息中间人(Broker)——这里,由于RabbitMQ 的功能比较齐全、稳定、便于安装,因此我们使用它作为Broker。
  • 基于API Gateway(网关)的API调用
    • 服务间的交互、测试任务数据的获取与发起等,都设计到我们自身的微服务与在线云化平台的交互,由于不涉及大批量的数据同步,因此我们主要使用API进行信息与数据的传递。
    • 同时,为方便API的管理、授权、流控等,我们使用API Gateway来实现接口额访问。

二、基本方案

1、拨测的实现

总体来说,我们通过定义定时触发的异步任务的方式,对被看护服务在PaaS云化在线测试平台所配置的测试任务进行出发、检查执行结果并做相关告警。

在具体实现上:

  1. 服务首先会在云化测试平台中完成用例撰写、组织测试任务,确保在线用例可正确、成功运行;之后,我们自身服务会利用测试平台所提供的API进行任务详情信息获取(任务id、任务信息、标签信息等),并通过测试任务标签做拨测看护任务的筛选。
    • 首先,在云化测试平台可以很方便的通过可视化的拖拽的方式完成用例的撰写、并自动生成测试脚本,这里拖拽的是一种名为ActionWord的单元,可以理解一个个原子化的接口,其本身也是通过API文档yaml所生成的。前置/后置/检查点等内容也可以很方便的设置。同时,也支持将不同的用例放在一起作为一个测试任务(测试套),总体执行、计算通过率等各项指标。
    • 其次, 服务可以灵活使用标签机制,对测试用例、测试任务打上不同类型、不同等级的标签,这样既方便管理、也为我们后续拨测与告警提供分层分级的依据。
    • 最后,我们通过API所获取的并不是测试脚本内容或其他,而是通过对标签类型的查询筛选,先找到所有需要拨测的测试任务id信息,通过此id可以进一步通过调用API的方式在云化测试平台自动发起测试任务。
  2. 在完成必要的前置步骤后,我们会对获取来的这些测试任务信息进行定时触发、并定义回调接口在任务执行完成是自动将测试任务执行结果回传,而后我们直接对执行结果做判断分析,以实现对研发段/现网接口与功能特性的巡检与问题的快速发现。
    • 首先,我们对测试任务的发起与结果获取均通过API进行交互;这里,由于本身测试任务执行时间长短不一(几秒钟到十几分钟不等),因此我们定义的回调接口方便快速获取测试任务的执行结果
    • 其次,实际测试任务的执行并不是在我们服务侧处理,而是在云化测试平台执行。这时因为实际用例的执行还是需要执行机与执行环境的,这些需要大量的资源,而我们服务本身主要负责任务的触发调度与告警监控,没有条件、也没有必要大包大揽完成所有工作。
  3. 在获取到了测试任务执行结果后,我们会对结果数据做相关分析,判断异常点与异常情况,并根据异常等级发起告警。
    • 对于异常情况而言,首先在线用例在撰写时都要求定义对应的CheckPoint:也就是所期望的接口的返回结果,例如状态码应该是200、返回值中应当带有Success等字段等,如果不满足检查点中所定义的条件,用例本身就会报错、显示执行失败。除了上述既定的失败的判断,我们还会根据接口失败的具体返回结果信息做进一步分析,尝试先于用户一步给出接口失败的原因。
    • 对于拨测策略而言,我们会根据测试任务标签类型来对测试任务做不同的分类:
      • 对于服务的核心特性,我们会以极高的频次(例如数秒)快速发起测试,以一种探活的逻辑确保现网接口健康,避免重大故障发生;
      • 对于服务的重要特性,我们会对该类型的测试任务进行高频次(例如1分钟)的任务调度,及时发现重要故障;
      • 对于服务的普通特性,我们更偏向于以较低的频率(例如30分钟)进行类似巡检的策略确保总体功能可用;
    • 对于告警策略而言,首先必须要说明的是,告警的分层分级必不可少,否则让服务被事无巨细的海量淹没会彻底丧失意义。对于拨测告警,我们一方面会根据出现故障的特性重要程度来判断,另一方面也会根据故障所处环境类型、故障服务等级、任务用例失败比例等来定义告警等级:
      • 首先,告警等级一般分为:致命、严重、普通、提示四类;
      • 其次,核心特性 > 重要特性 > 普通特性;生产环境故障 > 预发环境故障 > 测试环境故障;测试任务全量失败 > 测试任务部分失败;
      • 而后,告警本身也会有升级机制:例如若某个服务、某个环境下测试任务连续失败多次,会根据实际情况将服务等级从N提升至N+1级;
      • 最后,告警会根据不同的等级有不同的发送方法,包括但不限于:电话、短信、EIM卡片消息、邮件等等。

三、结语

在这篇文章中,我们简单对云化场景下的功能拨测能力建设作了方案实践的简单阐述,这其中云化测试平台还能够提供很多质量看护工程方案建设的能力(例如流水线门禁检查等),同时对于告警能力方面可展开的内容也非常丰富,这也是我们的核心重点工作之一,后续会做详细说明,这里不做赘述。

总而言之,功能拨测能力虽然在总计方案设计与能力建设上并不算复杂,但对于服务多维度的现网看护需求而言却是恰到好处的。

参考资料:

拨测:保障软件质量的必要步骤 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt/QML编程之路:OpenGL的示例(39)

Qt编程之后,会发现有版本问题,有时候一个示例不同的版本下可能会跑不同,有些Qt5跑不同Qt6已经完善,可以跑通。 我就看到有个关于OpenGL的示例: 这个示例是演示怎么基于OpenGL编程的,但是调试时却发现glViewXXX等gl打头的函数说找不到reference,或者什么link不上之类的错…

FindMy技术与游戏手柄结合

游戏手柄作为游戏的重要配件,它极大地提升了玩家的游戏体验,推动了游戏市场的不断扩大。游戏手柄的触摸感应技术为游戏开发者提供了更多的创意空间,也为硬件制造商带来了新的商机。游戏手柄的个性化定制也为玩家社区的发展提供了动力&#xf…

红队打靶练习:BOB: 1.0.1

目录 信息收集 1、netdiscover 2、nmap 3、nikto 4、whatweb 目录探测 1、dirb 2、gobuster 3、dirsearch WEB 主页: robots.txt 其他页面 反弹shell 提权 系统信息收集 jc账户 本地提权 信息收集 1、netdiscover ┌──(root㉿ru)-[~/kali] └…

命令执行拼接符实例图解

命令执行常用到的5个拼接符,分别是逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)和linux系统特有的分号(;) 1、&&&#xf…

运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心

目 录 一、视频智能运维平台介绍 (一)平台概述 (二)结构图 (三)功能介绍 1、运维监控 2、视频诊断 3、巡检管理 4、告警管理 5、资产管理 6、工单管理 7、运维…

【C++干货铺】C++11常用新特性 | 列表初始化 | STL中的变化

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 C11简介 列表初始化 std::initializer_list std::initializer_list使用场景 decltype关键字 STL中的一些变化 新容器 array forward_list 容器中的一些新…

chrony介绍和安装

chrony介绍和安装 1.chrony(时间同步服务) 1.1 chrony介绍 Chrony 是一个用于时间同步的软件,它旨在提供高精度的系统时钟同步。Chrony 软件包括一个 NTP(Network Time Protocol,网络时间协议)服务器和客…

Python基础第二篇(Python基础语法)

文章目录 一、字面量二、注释三、变量四、数据类型五、数据类型转换六、标识符七、运算符八、字符串扩展内容(1)字符串定义(2)字符串拼接、(3)字符串格式化(4)字符串格式化的精度控制…

Qt之QByteArray内容判断和填充

判断是否为空 可以使用函数isEmpty()来判断字节数组是否为空,即size是否为0。函数isEmpty()的原型声明如下: bool isEmpty(); 如果字节数组的size为0,则返回true,否则返回false下列代…

【算法与数据结构】Java实现查找与排序

文章目录 第一部分:查找算法二分查找插值查找分块查找哈希查找树表查找 第二部分:排序算法冒泡排序选择排序插入排序快速排序 总结 第一部分:查找算法 二分查找 也叫做折半查找,属于有序查找算法。 前提条件:数组数据…

TestNG注释

目录 TestNG注释列表 BeforeXXX和AfterXXX注释放在超类上时如何工作? 使用BeforeXXX和AfterXXX TestNG注释 TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由…

某马头条——day05

文章定时发布 实现方案对比 实现方案 延迟队列服务实现 按照文档进行项目的导入并准备数据库表导入对应实体类和nacos配置中心 乐观锁集成 redis集成和测试 成功集成通过测试 添加任务 ①:拷贝mybatis-plus生成的文件,mapper ②:创建task类…

ConcurrentHashMap 原理

ConcurrentHashMap ConcurrentHashMap的整体架构ConcurrentHashMap的基本功能ConcurrentHashMap在性能方面的优化 concurrentHashMap: ConcurrentHashMap的整体架构 concurrentHashMap是由数组链表红黑树组成 当我们初始化一个ConcurrentHashMap实例时&#xff0c…

基于74LS191+74LS160的8位二进制转BCD码应用电路设计

一、74LS191简介: 74LS191为可预置的四位二进制加/减法计数器,RCO进位/借位输出端,MAX/MIN进位/借位输出端,CTEN计数控制端,QA-QD计数输出端,U/D计数控制端,CLK时钟输入端,LOAD异步并行置入端(低电平有效)。 二、74LS191功能表: 三、74LS191逻辑框图: 四、74LS160…

美易官方:贝莱德预计美联储将在6月份开始降息,欧洲央行紧随其后

正文: 根据贝莱德的最新预测,美联储将在6月份开始降息,这一消息早于欧洲央行的预期。贝莱德高级投资策略师Laura Cooper表示:“我们更倾向于6月份降息、然后重新校准政策。”预计美联储在年底前将会降息75至100个基点。 与此同时…

2024美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

2024年【裂解(裂化)工艺】考试题及裂解(裂化)工艺免费试题

题库来源:安全生产模拟考试一点通公众号小程序 裂解(裂化)工艺考试题参考答案及裂解(裂化)工艺考试试题解析是安全生产模拟考试一点通题库老师及裂解(裂化)工艺操作证已考过的学员汇总&#xf…

CentOS7 配置静态IP

目录 在解决了刚安装不能联网后配置静态IP1.查看配置好网卡后,DHCP动态分配的IP地址2. 查看网关3. 更改IP地址文件4. 重启网络服务5. 检查配置6. 更新路由(如果需要) 在解决了刚安装不能联网后 解决centos 7刚安装不能联网 配置静态IP 在 C…

程序员遇到不会的问题怎么办

程序员遇到不会的问题怎么办:回答一: 1.百度调试软件 2.杰凡IT有偿问答平台,为广大程序员朋友提供一个高效解决问题的渠道。在这里您可以发布自己的问题,也可以为别人解决问题赚点钱。还可以搞自学指导带徒弟。 网站网址&#xff…

git add -u 什么意思

git add -u 是 Git 命令的一部分,用于将已跟踪的文件的修改添加到暂存区(也称为索引)。这个命令只关注那些已经被 git 跟踪的文件,即那些在之前的提交中已经被添加到仓库的文件。 具体来说: git add -u 会将所有已跟…