摘要:本文将介绍如何使用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帮你的更多相关文章

  1. Junit Framework -TestRule,自动化测试中如何再次运行失败的测试用例

    有时由于服务器,浏览器等问题,会导致自动化测试用例运行失败,此处通过案例讲解如何使用Junit框架中的TestRule来实现重复运行失败的测试用例. 首先定义一个类并让它实现TestRule,代码如下 ...

  2. TestNg失败重试机制

    TestNg提供了失败重试接口IRetryAnalyzer,需要实现retry方法: package com.shunhe.testngprac.retry; import org.testng.IR ...

  3. Java测试用例简介

    最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结. JUnit简介 JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅 ...

  4. Robot Framework(十二) 执行测试用例——配置执行

    3.4配置执行 本节介绍可用于配置测试执行或后处理输出的不同命令行选项.与生成的输出文件相关的选项将在下一节中讨论. 3.4.1选择测试用例 通过测试套件和测试用例名称 按标签名称 当没有测试匹配选择 ...

  5. Robot Framework(十) 执行测试用例——测试执行

    3.2测试执行 本节描述如何执行从解析的测试数据创建的测试套件结构,如何在失败后继续执行测试用例,以及如何正常停止整个测试执行. 3.2.1执行流程 执行套房和测试 设置和拆卸 执行顺序 3.2.2继 ...

  6. Robot Framework(九) 执行测试用例——基本用法

    3.1基本用法 Robot Framework测试用例从命令行执行,默认情况下,最终结果是XML格式的输出文件和HTML 报告和日志.执行后,可以组合输出文件,然后使用rebot工具进行后处理. 3. ...

  7. TestNG测试用例重跑详解及实践优化

    测试用例运行稳定性是自动化质量的一个重要指标,在运行中需要尽可能的剔除非bug造成的测试用例执行失败,对于失败用例进行重跑是常用策略之一.一种重跑策略是所有用例运行结束后对失败用例重跑,另一种重跑策略 ...

  8. TestNg失败重跑—解决使用 dataProvider 参数化用例次数冲突问题

    问题背景 在使用 testng 执行 UI 自动化用例时,由于 UI自动化的不稳定性,我们在测试的时候,往往会加上失败重跑机制.在不使用 @DataProvider 提供用例参数化时,是不会有什么问题 ...

  9. Cypress系列(65)- 测试运行失败自动重试

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 重试的介绍 学习前的三问 什么是重试测试 ...

  10. 『德不孤』Pytest框架 — 7、Pytest预期失败

    目录 1.@pytest.mark.xfail()标记的作用 2.应用场景 3.语法参数说明 4.示例 5.忽略xfail标识 Pytest预期失败需要使用@pytest.mark.xfail()标记 ...

随机推荐

  1. ELK中 Elasticsearch和Logstash内存大小设置的考虑

    本文为博主原创,转载请注明出处: 在ELK(Elasticsearch.Logstash和Kibana)日志采集和分析场景中,适当设置Logstash和Elasticsearch的内存大小非常重要.这 ...

  2. facebook广告投放优化师

    由来(一个技术的自嗨) 你以为我是个广告优化师?错,我是个java开发从事者.一开始我是想介绍某人转行去做广告投放优化师的,毕竟自己也在某出海公司待过一段时间,对于技术来说出海的核心是支付系统业务和广 ...

  3. MVC(JSP+JavaBean+Servlet)入门实例:用户登陆验证

    一.JSP.JavaBean.Servlet的区别 1.JSP:JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无效Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才 ...

  4. Kurator v0.5.0发布,打造统一的多集群备份与存储体验

    本文分享自华为云社区<Kurator v0.5.0正式发布! 打造统一的多集群备份与存储体验>,作者: 云容器大未来 . Kurator 是由华为云推出的开源分布式云原生套件.面向分布式云 ...

  5. 这些新项目一定不要错过「GitHub 热点速览」

    本周 GitHub 热点上榜的项目有不少的新面孔,比如搞电子商务的 eShop,还有处理表数据的 onetable.还有用来方便处理数据同步问题的 loro,以及网易新开源的 tts 项目 Emoti ...

  6. C++ MiniZip实现目录压缩与解压

    Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法.它最初由Jean-Loup Gailly和Mark Adler开发,旨在成为一个高效.轻量级的压缩库,其被广泛应用于许多领域,包括 ...

  7. UIPath动态操作控制

    如果放弃太早,你永远都不知道自己会错过什么. 一.浏览器 打开浏览器:OpenBrowser: 关闭浏览器:Close Tab.Close Application.Kill Process: 二. 鼠 ...

  8. 对session.setAttribute()和session.getAttribute()的理解

    B/S架构中,客户端与服务器连接,在服务端就会自动创建一个session对象. session.setAttribute("username",username);是将userna ...

  9. [洛谷P8867] [NOIP2022] 建造军营

    [NOIP2022] 建造军营 题目描述 A 国与 B 国正在激烈交战中,A 国打算在自己的国土上建造一些军营. A 国的国土由 \(n\) 座城市组成,\(m\) 条双向道路连接这些城市,使得任意两 ...

  10. Hudi 在 vivo 湖仓一体的落地实践

    作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能.主要应用在流批同源.实时链路优化及宽表拼接等业务场景 ...