质量保证
回到专栏主页
在测试作业中使用机器学习
使用机器学习技术来克服测试作业中的各项挑战
定义参数
https://www.qualitestgroup.com/white-papers/lets-perform-right-performance-testing-planning-overcoming-challenges/
鸣谢:
本人感谢Christy Jacob和Nikhil Guddati在本白皮书中所用到的ML算法和性能测试数据方面的技术协助。
摘要
在机器学习在包括社交媒体、产品推荐等领域中越发受到欢迎的环境下,本白皮书将集中论述机器学习算法在性能测试领域中的运用。
总览:监督式学习是机器学习在完成函数学习,或使用训练数据库建立一套输入及输出功能后所进行的机器学习任务。这项已学习的函数将被进一步用于为测试数据库的新输入集合预测输出结果。
回归是一种监督式学习任务,用于在数据库所获取的各个变量的基础上对目标值进行预测。
测试环境是性能测试中所遇到的一项关键挑战。
理想的情况是,性能测试环境应与产品的体量相同,从而避免发生任何与解释产品运行环境系统性能参数所相关的风险。然而,由于预算问题,行业一般也都无法提供专用的测试环境,而业内也会因为安保原因放弃在产品专有环境下进行测试。于是,测试员也只能以相应降低的测试环境来执行性能测试。这些测试将造成额外的风险。
而我们则将使用机器学习来解决上述挑战。这些测试的结果也将记录于本白皮书当中。
为了在性能测试中运用机器学习,我们将讨论创建并评估一个ML模型过程中的各个阶段:
开始。我们必须确认输入内容并定义我们所需要的输出结果。响应时间是一项关键参数,并需要对其在性能测试过程中进行严密的监控。因此在这个例子中,我们将通过上传整体样本、发送字节数、接收字节数以及需求名称的方式对一个页面/需求的响应时间进行预测。
输出(标签)->响应时间
输出(功能)->线程、发送字节数、接收字节数、需求/页面
生成训练数据
首个以及最为关键的步骤是收集与我们问题陈述所相关的数据。我们通过在一个可控的测试环境中使用JMeter(以消除来自服务器性能或额外网络流量的噪音)进行性能测试的方式生成了输入数据。
性能报告将从包含以下数据的测试中进行生成:发送字节数、字节数、线程、需求名称以及响应时间。
以下所记录的性能测试已经为每个页面要求生成了490个记录结果。
线程 启动时间(秒) 每个迭代的总页面数 迭代
选择一个ML模型
ML模型的训练流程包括分配一个ML模型算法(学习算法),从而通过数据库进行学习。ML模型指由训练流程所产生的输出结果。
我们安装了机器学习库并向其上传了我们的性能测试。学习库使用不同的计算指令评估了多种算法和设定,从而确定最佳性能模型。
针对我们的测试数据,以下算法都进行了评估。FastTreeRegression算法的最高准确率达到了82.3%。
训练员 拟合度 绝对损失 平方损失 RMS损失
评估模型
模型评估旨在判断基于未来(本文未包含/范例外)数据的广义模型准确性。由于我们已经有了一个ML模型,我们便用它来预测了一个新数据集的响应时间(这个数据集并未被用于训练模型)。我们将ML模型的测试结果与实际数据进行了比对,而其误差则位于允许范围之内。
功能(输入) 标签(输出)
需求名称 每页面总样本 字节数 发送字节数 预测响应时间 实际响应时间 误差(毫秒)
实际值和算法所得出的预测值只存在毫秒级别的误差范围。因此,我们成功评估了应用的性能且无需对产品环境进行还原和复制。
每个应用的表现在负载情况下都各不相同,因此对最佳模型的生成将基于收集自性能测试的各项数据。基于应用的表现,我们需要评估哪部分的数据将提供最为准确的结果。那就是为什么获得一系列的测试数据,是进行更好预测的关键所在。
参考
https://www.agileconnection.com/presentation/machine-learning-and-data-science-quality-and-performance-engineering
https://www.datasciencecentral.com/profiles/blogs/performance-testing-training
https://data-flair.training/blogs/machine-learning-applications/