共计 3323 个字符,预计需要花费 9 分钟才能阅读完成。
上一篇,介绍了测试流动测试输出、测试执行、测试剖析、测试定位和测试评估五个步骤中测试输出智能化钻研和实际,蕴含异样单测生成、接口用例生成、动作集生成等钻研与实际。本章节重点介绍测试执行环节的智能化实际。测试执行是指将测试生成的用例集、数据集利用手动和自动化的形式对这些汇合运行,测试执行实质上不能晋升揭错程度,但如何高效稳固的执行完测试汇合也是影响测试成果的要害。
测试执行智能化通过将数据、算法、工程等相干技术有机联合,个别蕴含测试用例举荐、测试流量筛选、测试任务调度、智能构建、执行自愈等方面,在学术界和工业界均有十分优良的钻研和实际。方法论上个别蕴含基于覆盖率相关性抉择算法、基于数据建模或两者联合的形式。本章节将从多个实际的角度,介绍相干畛域的指标、思路、波及到的技术点、成果,心愿能给到大家肯定参考。
01 基于危险的手工用例举荐
测试执行,因为代码变动、环境等因素,往往不须要执行全副的用例,如何在用例全集中找到最有可能揭错的用例,是本方向的钻研畛域,也是业绩钻研最多的畛域。
手工测试用例举荐次要指通过代码变更举荐出关联手工用例,一个要害指标是心愿能精选覆盖度高的用例组合,尽早发现问题。间接应用代码覆盖率关联举荐,会呈现公共函数关联的多个用例将被冗余举荐,执行效率低,也不利于问题的及时发现。因而引入基于危险的手工用例举荐,优先依据危险代码举荐用例,更为精准。首先,数字化度量代码,将代码形象为语法树,抽取了代码环路、分支信等 21 个能够反映设计复杂度和程序开发难度的指标;其次,选取适合的模型进行推理,获取针对代码的有缺点预测和无缺点预测,获取关联的用例;最初,排序去重,选取预测有缺点的后果和无缺点中重要水平比拟高的用例作为举荐后果。其中,缺点推理可应用贝叶斯分类、SVM、KNN、逻辑回归等算法,也能够向深度学习转移,联合长短期记忆模型(LSTM)和深度神经网络(DNN)进行缺点预测。落地该计划后,用例举荐比继续降落由 50% 压缩到 20%,回归天数由 3 天升高到 1 天,举荐发现 bug 的用例比例继续进步。
02 基于并行覆盖率的流量筛选计划
在测试过程中,常常会遇到利用线上流量对系统进行 diff、性能和压测,如何从线上海量的流量选取最合适的流量进行测试,是本课题钻研的要害。
并行覆盖率的流量筛选计划,是为了可能从海量的线上流量中,找出笼罩最多测试场景较小的流量集,从而达到测试笼罩场景,缩小问题的漏出,保障系统的稳定性的目标。在传统场景下,通常不可能把线上全流量的数据照搬到线下,因为量级太大,所以会有一些筛选计划;最罕用的就是依据机房、工夫等属性随机抽样,尽量晋升抽样的覆盖面,然而这样随机性太强,不确定最终业务和场景的覆盖面。基于并行覆盖率的流量筛选计划次要在覆盖率的指引下,尽量减少流量的量级,晋升业务的笼罩。次要分为两个步骤:通过对源日志进行剖析,进行流量初筛,经典场景有通过设施,地区,用户属性等,筛选能够笼罩这些场景的最小集,在第一步能够通过日志初筛出大部分有意义的流量。第二步通过对于发压流量的覆盖率进行剖析,应用贪婪算法,针对不同流量的覆盖率进行剖析,通过尽可能少的流量笼罩尽可能多的场景。以上两点,能够从业务理论场景和覆盖率两个方面联合一起晋升流量筛选的覆盖面。目前曾经多个产品线和模块利用,在覆盖率无损,甚至晋升 60% 前提下,流量缩减了一半,晋升效率的前提下也保障的流量的笼罩。
03 智能构建
智能构建致力于在动态 CI 工作编排中动静执行工作,实现工作精简、工作跳过、工作勾销、后果复用、自愈、主动标注等性能,保障测试工作高效稳固构建实现。在日常的变更中,可能常常遇到以下场景:
1、变更仅批改了日志、格局或不重要的一些性能,这时是否有必要回归全量测试工作;
2、代码重复迭代,同一工作执行屡次是否有必要;
3、同一次工作在分支和骨干阶段是否有必要反复运行。
传统做法是执行全量工作,但会导致测试构建效率低,资源耗费大。
利用智能构建就能够依据变更场景动静调整构建工作,无效缩短构建工夫,晋升构建效率。具体来说,智能构建可拆分为剖析和决策两局部,剖析是针对业务代码库,以及本次变更 (如 git diff),利用工具算出进行本次变更的特征分析 (变更代码行数、变更代码的具体函数、变更代码的调用链信息等等);决策工作是否执行 / 期待 / 重启 / 勾销等行为,做出最终的决策,比方业务设置业务相干的的白名单,若剖析特色全命中白名单则可跳过指定工作;智能构建是在保障测试用例揭错能力的前提下,利用无限的资源满足用户对时效性的需要。目前百度已创立蕴含策略开发、插件方、业务线在内的智能构建体系,其中策略开发者依照构建零碎接口标准开发策略,并将策略注册进入构建零碎,构建零碎凋谢策略给业务方应用;插件通过构建策略进行响应操作,如有效工作的勾销执行、偶发工作的自愈、流程管控工作的拦挡等;业务方则通过构建零碎进行流水线上策略的配置;目前智能构建已辐射 3000+ 个模块。
04 基于工作优先级的算法调度
本方向钻研的是如何在无限的资源状况下,依据稳定性和揭错能力调度测试工作。
在测试执行阶段,在无限的资源下大量的并行测试任务调度艰难,因为用户感知的等待时间是所有测试工作的排队工夫和执行工夫,不合理的测试调度会导致测试效率的低下。因而摸索一种基于工作优先级的算法调度策略用以解决上述问题。
在挪动端测试中,针对大量并行任务提交,建设工作优先级队列。依据工作重要水平,等待时间,资源需要,生成了有益于升高重点工作排队工夫的优先级公式。基于公式剖析后果,优化测试任务调度。在保障均匀排队工夫的状况,升高重点工作的均匀排队工夫。
针对单个 case 工作的执行效率,最后咱们基于离线历史工作分组的时长,单位工夫覆盖率等数据,寻找最优收敛点用以预测工作的最佳进行工夫,优化测试工作执行时长。成果上,外围产品线在覆盖率,问题发现数量未进化的状况下,执行时长缩短了 10%,但仍存在无奈感知工作实时状态问题,因而在此基础之上,建设进行决策模型,通过实时监控工作的执行状况,基于执行工夫,截图数,测试控件笼罩变化率等特色,实时决策工作是否可达到进行状态,并辨认出执行成果不佳的工作,提前终止,升高有效执行的耗时。在优化成果上,在测试覆盖率进步 10% 的同时,执行时长缩小 12%。
05 UI 自动化自愈
App 自动化用例在执行过程中,上下文环境会遇到各种非预期的简单状况,如,App 触发降级弹窗、页面加载迟缓呈现白屏、页面 xpath 门路变更等。现有自动化运行机制,不具备解决这些异样边界状况的能力,导致 Case 执行中断而失败。这些自动化稳定性问题,带来自动化用例保护老本的减少,大大降低了自动化工作的 ROI。咱们剖析现有自动化工作 top 失败起因,应用 3 类通用 Case 执行自愈技术,晋升 case 执行稳定性,升高保护老本。
1、异样弹窗解决,当自动化执行遇到弹窗而失败后,应用弹窗检测技术去除弹窗后持续复原执行。面对弹窗品种多样的难点,应用对象检测技术,实现泛化的弹窗及弹窗敞开控件的辨认;面对不同语境下举荐动作不统一难点,利用基于页面文案进行弹窗分类的技术,实现不同场景下的弹窗都可能被精确了解,并举荐正确动作去除。
2、原子期待技术,自动化执行过程中的异步加载期待技术属于畛域里公认技术瓶颈,咱们利用视觉 UI 了解技术,在 Case 执行过程中,应用高效的视频流并行采集,以及图像识别算法对间断图片剖析,实现页面稳固态和非稳固态的智能断定,领导 Case 实时的智能提早期待和智能缩短等待时间,保障 Case 稳固高效执行。
3、通用 Case 自愈技术,提供基于时空上下文的 Locator,去弹窗,图像等辨认形式按程序进行辨认自愈,具体来讲,将历史执行胜利时刻的 xpath,icon 图片等信息记录下来,当呈现失败时,尝试用历史胜利过的元素类型顺次进行重试。
通过以上 Case 执行自愈的技术,在咱们自动化执行实际过程中,实现了 51% 的 Case 自愈修复成果,无效晋升自动化用例执行稳定性。
举荐浏览【技术加油站】系列:
揭秘百度智能测试在测试主动生成畛域的摸索
【技术加油站】浅谈百度智能测试的三个阶段
【技术加油站】揭秘百度智能测试规模化落地