测试用例又双叒叕失败了,NLP帮你
摘要:本文将介绍如何使用AI技术实现失败测试用例的智能分析。
本文分享自华为云社区《测试用例又双叒叕失败了,啥原因?NLP帮你来分析》,作者: 敏捷的小智 。
随着软件行业的快速发展,为了实现高质量的快速迭代,越来越多的公司开始推进测试自动化来缩短测试周期,较成熟的软件公司开始追求80%甚至更高的测试自动化率。一轮耗时一周的手工测试在自动化后可能一天或更短时间内就能完成全部执行。在每一轮自动化测试中,对失败用例进行根因分析是一份十分重要的工作,而海量测试日志的人工分析开始成为瓶颈。本文将介绍如何使用AI技术实现失败测试用例的智能分析。
基于日志分析辅助开发人员发现及定位系统问题早已不是新鲜课题,在过去几十年里都有广泛的研究。随着数据的持续积累,学术界的研究和工业实践都有尝试使用机器学习来求解,包括监督方法和非监督方法。在发现问题方面,2017年的一篇《DeepLog: Anomaly Detection and Diagnosis from System Logs》引起了广泛的关注。文中介绍了通过多重LSTM模型,学习日志模板及日志参数组成的时序数据特征,对系统行为及系统状态进行异常检测,辅助开发人员提前感知系统的潜在风险。本文将从定位问题的角度,介绍如何使用日志分析的技术在测试场景下辅助失败用例的根因定位。
本文的使用的算法简单很多,但对测试日志及历史分析有较高的要求。首先,基于大数定律,样本量越大越能接近数据的原始分布,所以要求待分析的失败用例要有足够的量级,-否则不仅有杀鸡用牛刀之嫌,效果也不会好。其次,要有一定的失败测试用例分析数据,本文介绍的是有监督学习的解决方案,带标签的数据质量将会决定学习效果的上线。
好了,既然上来就揭了谜底:用文本分类模型来实现失败测试用例的根因定位。就先给大家展示一下完整的解决方案。
图一:失败测试日志分析服务构建流程
如图一所示,失败测试日志分析服务构建流程可以概括为以下步骤:
1. 测试日志分析数据的准备:确认测试日志被正确记录并保存,对失败测试日志的根因分析也被妥善保存。日志中应该包含可以用来定位根因的高价值信息,如系统返回的错误码、报错信息等。
2. 模型的训练:根据已有的分析数据训练模型。
a) 日志清洗:在失败用例的日志中, 充斥的大量与失败原因不相关的内容。这些噪音数据会增加模型训练的不确定性。结合历史经验,对日志数据进行清洗,提取关键信息,在训练初期是不可缺少的关键一步。例如,实践中发现,几乎所有失败用例中都有系统返回的错误信息。如果没有,需要仔细检查一下是日志设计不合理,还是可以直接认定为测试环境问题。测试人员拿到失败测试用例,看到错误信息基本就能定位大概的失败原因。所以在日志清洗时,只截取错误信息,是目前实践下来效果较好的一个预处理步骤。
样例:
Case001 配置问题 参数比对失败
Case002 环境问题 无法连接*.*.*.*
……
b) 日志预处理:人参与的越少,后期维护的成本越低,所以在日志预处理阶段,只对日志做简单预处理,如分词、去除停用词等。
c) 模型训练:将历史分析数据载入TextCNN文本分类模型。TextCNN最大的优势是网络结构简单,在多项数据集上轻松超越benchmark。网络结构简单,参数数目少,计算量少,训练速度较快。想了解模型细节的同学,可以戳Convolutional Neural Networks for Sentence Classification 。
d) 模型调参:通过修改embedding dim长度、调整随机策略等,尝试获得最优的模型。当模型能在实验室实现train test的准确率在85%左右,可以认为是ready to go的模型。
3. 将步骤2训练获得的模型host成在线分析服务。
4. 测试自动化执行中,失败测试用例的日志在预处理后,被自动post到预测服务,获得预测的结果,包括预测的根因和置信度。
测试人员可以在一轮测试执行后立刻得到测试结果分析报告。
首先测试人员结合历史经验,对可直观感知到失败原因的测试用例及时进行定位并做出处理,比如是测试环境问题则修复环境,重新执行测试用例。
其次,结合模型输出的置信度,对预测结果做好分级。历史上大量出现过的的错误日志,一般置信度较高,直接给出根因。置信度较低的失败用例,可能是新增问题,及时给出警告。
不同的业务场景会生成不同的日志,随着业务场景的不断增加,日志的特征空间趋于无限,无法用同一个模型适配所有场景。尽量减少人工参与,针对特定业务场景,使用较轻量级的模型快速训练迭代,是能够在工业界落地实现的一个很重要的特性,本文介绍的TextCNN文本分类模型目前实践来看是能够满足以上要求的。在提升模型准确度上,结合主动学习提升数据质量,引入小样本学习减少人工依赖将是后续重点的探索方向。
参考资料
1. Experience Report: System Log Analysis for Anomaly Detection, 2016.
测试用例又双叒叕失败了,NLP帮你的更多相关文章
- Junit Framework -TestRule,自动化测试中如何再次运行失败的测试用例
有时由于服务器,浏览器等问题,会导致自动化测试用例运行失败,此处通过案例讲解如何使用Junit框架中的TestRule来实现重复运行失败的测试用例. 首先定义一个类并让它实现TestRule,代码如下 ...
- TestNg失败重试机制
TestNg提供了失败重试接口IRetryAnalyzer,需要实现retry方法: package com.shunhe.testngprac.retry; import org.testng.IR ...
- Java测试用例简介
最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结. JUnit简介 JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅 ...
- Robot Framework(十二) 执行测试用例——配置执行
3.4配置执行 本节介绍可用于配置测试执行或后处理输出的不同命令行选项.与生成的输出文件相关的选项将在下一节中讨论. 3.4.1选择测试用例 通过测试套件和测试用例名称 按标签名称 当没有测试匹配选择 ...
- Robot Framework(十) 执行测试用例——测试执行
3.2测试执行 本节描述如何执行从解析的测试数据创建的测试套件结构,如何在失败后继续执行测试用例,以及如何正常停止整个测试执行. 3.2.1执行流程 执行套房和测试 设置和拆卸 执行顺序 3.2.2继 ...
- Robot Framework(九) 执行测试用例——基本用法
3.1基本用法 Robot Framework测试用例从命令行执行,默认情况下,最终结果是XML格式的输出文件和HTML 报告和日志.执行后,可以组合输出文件,然后使用rebot工具进行后处理. 3. ...
- TestNG测试用例重跑详解及实践优化
测试用例运行稳定性是自动化质量的一个重要指标,在运行中需要尽可能的剔除非bug造成的测试用例执行失败,对于失败用例进行重跑是常用策略之一.一种重跑策略是所有用例运行结束后对失败用例重跑,另一种重跑策略 ...
- TestNg失败重跑—解决使用 dataProvider 参数化用例次数冲突问题
问题背景 在使用 testng 执行 UI 自动化用例时,由于 UI自动化的不稳定性,我们在测试的时候,往往会加上失败重跑机制.在不使用 @DataProvider 提供用例参数化时,是不会有什么问题 ...
- Cypress系列(65)- 测试运行失败自动重试
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 重试的介绍 学习前的三问 什么是重试测试 ...
- 『德不孤』Pytest框架 — 7、Pytest预期失败
目录 1.@pytest.mark.xfail()标记的作用 2.应用场景 3.语法参数说明 4.示例 5.忽略xfail标识 Pytest预期失败需要使用@pytest.mark.xfail()标记 ...
随机推荐
- Go 包操作之如何拉取私有的Go Module
Go 包操作之如何拉取私有的Go Module 在前面,我们已经了解了GO 项目依赖包管理与Go Module常规操作,Go Module 构建模式已经成为了 Go 语言的依赖管理与构建的标准. 在平 ...
- Jenkins-插件安装-多实例
1,Jenkins插件安装: Jenkins最大的功能莫过于插件丰富,基于各种插件可以满足各项需求,Jenkins本身是一个框架,真正发挥作用的各种插件.Jenkins默认自带很多插件,如果没有添加新 ...
- 一个基于Vue模型的表单生成器
哈喽,我是老鱼,一名致力于在技术道路上的终身学习者.实践者.分享者! Vuetify Form Base是一个基于模型的表单生成器,目的是提供一个工具,以便以较少的努力从任何模型数据生成可编辑的表单, ...
- 【慢SQL性能优化】 一条SQL的生命周期
一. 一条简单SQL在MySQL执行过程 一张简单的图说明下,MySQL架构有哪些组件和组建间关系,接下来给大家用SQL语句分析 例如如下SQL语句 SELECT department_id FROM ...
- disabled_button
根据题目提示,是前端的知识 进入页面,flag按钮灰了按不下去 右键检查发现按钮地方的样式,发现有一个disabled,这里就直接把他删掉点击回车就可以点击了
- 计算机网络之防火墙和Wlan配置
一.防火墙 防火墙(firewall)是一种安全设备,它的位置一般处于企业网络边界与外网交界的地方,用于隔离不信任的数据包 准确点讲,它就是隔离外网和内网的一道屏障,用于保护内部资源信息安全的一种策略 ...
- java读取照片Exif信息到实体类
前言 1.总共读出来了228个参数信息,但是我挑选了36个我认为比较有价值的参数,弄成了实体类 (其实是因为很多参数我看不明白是啥意思) 2.为了方便,所以实体类里我直接用中文字段了 效果图 导入依赖 ...
- 3. Shell 条件判断
重点: 条件测试. read. Shell 环境配置. case. for. find. xargs. gzip,bzip2,xz. tar. sed. 1)Shell 的配置文件 Bash Shel ...
- 飞腾E2000板载以太网适配
飞腾E2000板载以太网适配 e20005.4.18macbyt8521 1. 设备树移植 2. MACB驱动移植 3. 网络连通性调试 3-1. MACB驱动环回测试 3-2. YT8521 PHY ...
- nordic的nrf52系列32M速率的SPI-SPIM3
简介:在nordic的nrf52系列中的nrf52833和nrf52840的SPIM3都是支持最大32M的spi速率,其余的只有8M,当在需要刷屏,或者一些需要高速32M-SPI时,这是一个很好的使用 ...