我听说过很多关于自动化测试的“滥用”,尤其是基于UI的自动化测试。由于用户界面非常脆弱且易于更改(尤其是在敏捷商店中)。就我个人而言,我的自动化测试比发现缺陷给了人们对操作系统更大的信心。


自动UI测试的成功率是多少?还是您如何定义自动化UI测试的成功?


评论

我对自动GUI测试的意见在这里。 Angryweasel.com/blog/?p=7

#1 楼

我在大型Web系统上每天运行1000多个测试套件的真实经验是,您的直觉是正确的,并且他们发现的bug并不多。关键事项:


它们释放了宝贵的时间,使测试人员原本不得不花费回归测试来进行探索性测试以发现错误。快速自信地进行重构或进行大的更改。


评论


是的,他说的短于我。 :)

–汉尼拔
2011年5月4日,11:45

我认为这会使中断/修复周期加载更快。

– terryp
2011年5月4日,11:49

+1您不必花时间重新探索被遮盖的地面。您找到了该错误,并为此编写了测试,并且我们有时间花时间测试未开发的途径。

–corsiKa♦
2011年5月5日22:52

#2 楼

先前的张贴者是正确的-自动化永远不会发现新的错误,只能通过智能测试来完成-但是自动化会发现回归错误,通常不是您要寻找的错误。但是,对自动化测试结果进行明智的分析可能会发现很多重大问题。我们遇到了一些测试间歇性失败而没有任何明确原因的情况(该区域的代码是稳定的,已经有一段时间没有被使用了。)测试结果,我什么都看不到。测试标准之一是页面标题为“ foo”,当我查看断言失败的地方时,我可以看到实际的页面标题包含“ http 403”。

在断言失败的情况下,我立即有了一个失败的大致时间表,并且可以更快地隔离出完全无关的问题,该问题无意中使站点停机了几个小时,也许每周一次。

如果没有回归套件,我不能说我们的测试团队是否会发现该bug,但是肯定会花更长的时间。

评论


您的示例并不是测试自动化的失败,而是一个设计不佳的自动修改测试以及设计不佳的oracle的示例。我可以举多个反例,说明使用随机测试数据生成和数据驱动的组合测试的随机输入在GUI自动化测试中发现了许多错误。

– Bj Rollison
2011年5月6日15:27



设计不良的测试-从我提供的简短轶事中您如何精确地进行这项工作?

– CBA
2011年5月9日19:36

您是对的,这可能是我的错误假设。从您的轶事陈述“测试间歇性失败”和“没有明确的原因”中,我跳出了针对此类问题的潜在结论,其中可能包括脚本中的同步/定时/竞赛条件以及缺乏可诊断性(例如,期望“ foo”, http 403”和秒表功能)。我的评论并不是要不尊重您的自动化项目,而只是为了反驳您关于自动化永远找不到新错误的说法。

– Bj Rollison
2011年6月3日下午5:41

#3 楼

您必须了解以下内容...

自动化永远不会发现新的错误。

如果您的系统已更新,它将发现错误。如果系统由于某种原因而停机,并且您正在床上睡觉,并且在一夜之间启用了自动化,它将发现错误。它会向您发送紧急电子邮件,您将在该网站关闭一个小时左右的早晨阅读这些电子邮件。

不会找到人类通过错误回归发现的错误。它不会在系统中发现需要分析和不断改进的错误。它不会发现隐藏的错误。它将仅找到编程查找的错误。

这就是说...自动化可以帮助您集中精力解决那些隐藏的错误。它将完成很多测试。像multy浏览器一样,无休止地输入各种数据组合。整理任务,例如创建测试数据,公司,用户等。压力测试,负载测试,功能。所有可以覆盖的内容。

因此,自动化测试的成功将确保开发人员检入代码后,可以确保在您熟睡的夜晚将应用程序的大部分还原。而且,您可以确保它会发现更改,更新产生的缺陷,除非您没有为此编写测试,否则不会引起任何注意。

评论


我不同意你的第一句话。 “回归”测试将永远不会发现新的错误,但是数据驱动的自动化测试或基于模型的自动化测试会发现新的错误。

–艾伦
2011年5月5日13:08

我要补充一点,在原始问题的上下文中,@ hannibal的答案是正确的,因为该问题是关于GUI回归测试的。我只是想知道如何称呼我的基于性能,压力和模型的自动测试,这些自动测试始终发现新的错误。

–艾伦
2011年5月5日13:23

是的,因为我的回答没有考虑到有关GUI性能测试的问题。另外,对于新产品,我的意思是说,如果您有一组测试来搜索产品的一个部分,那么它发现的错误将始终来自该部分。但是永远不要从别的地方来。我不知道这是否足够清楚。 :)

–汉尼拔
2011年5月5日13:34

如果您的自动化测试是脑筋急转弯的scriptlet,其中包含大量硬代码操作/数据,那么我同意您的说法。但是,声称GUI测试自动执行将“永远不会发现新的错误”完全是错误的。设计良好的自动化测试可以并且确实会发现新的错误。

– Bj Rollison
2011年5月6日15:25

自动化测试只能执行您编程的操作。除非您开发了AI。证明你的说法,我会给你权利。

–汉尼拔
2011年5月6日18:11

#4 楼

我发现自动化测试通常对于确保旧功能不会被新代码破坏非常有用,并且我已经看到旧回归测试发现了新代码中的新错误。我尝试在不使用UI的情况下尽可能多地测试功能,然后进行一些其他集成测试,以确保在验证功能本身之后,UI调用正确的功能。这种做法导致测试更加可维护。

由于可维护性成本,我宁愿避免在不需要从该测试中获取所需信息的情况下进行UI测试。以我的经验,由于这种持续的维护负担,与其他形式的自动化相比,UI自动化在减少技术债务方面做得更少。我更喜欢先编写更具可维护性的功能测试,然后在时间用完(所有其他条件均相等)之后手动测试UI。当然,某些项目的UI测试维护负担要比其他项目高,因此应该相应地优先考虑自动化工作。我从事的项目中维护问题的两个主要来源是UI更改和时间更改。 UI测试如果看不到预期的行为,则往往会超时,因此,一个失败的测试不会阻止其余测试的执行,但是通常会有噪音,这也可能导致超时和错误的失败。 >当我最终确定UI测试是剩下的最高优先级的自动化测试时,我发现UI测试的某些问题可以通过良好的设计大大减轻。所有超时值和CSS / XPath /可访问性导航/等字符串都应放在一个位置,以便可以轻松配置它们。尽管我还没有听说过这个名字,但是我通过反复试验学会了使用“页面对象”技术,这对我们的UI测试设计有很大帮助。与开发人员的良好沟通也是必须的,以避免花费大量时间编写由于UI更改而立即被破坏的测试。开发人员通常还可以将其代码设计为可通过其他自动化测试尽可能地进行测试,因此,您可以通过UI测试将目标表面积最小化,从而仅检查GUI逻辑以及与其余代码的交互,而不是功能。测试。

#5 楼

要考虑的一件事是,在许多情况下,您的回归套件是基于一组静态的回归数据或准则来工作的。回归套件具有更高价值的一种方法是尝试开发启发式预言与静态预言。在3月1日我去Seaspin的一次演讲中,Harry Robinson谈到了从静态测试自动化过渡到更具动态性的变化。在一张幻灯片中,他举了一个例子:

启发式测试Oracles

验证SUT的一些结果

使用
–检查其他结果–简单算法
–一致性检查
静态oracle:sqrt(17)= 4.1231056
启发式oracle:sqrt(N)* sqrt(N)= N

从他的演示幻灯片可在上面的seaspin网站上找到。如果您可以通过这种方式测试很多Broder系列值,那么这个想法就成为现实。

#6 楼

是的,我们的自动化测试套件可以并且确实可以找到严重的错误。我很少会想到,但我却常常想到这两次。重复性任务,让他们专注于自己擅长的真正智能的测试。
我要补充一点,尽管我们自动化的回归测试是应用程序中最重要的区域之一(最终用户经常使用),所以当自动化测试确实捕获到错误时,它们是非常重要的。 />

#7 楼

作为一名开发人员,自动回归测试无疑使我度过了很多日子。但是质量检查专家可能并不知道这一点。原因如下:

确定性测试只能发现一次错误:当我(开发人员)运行测试套件并看到我犯了一个愚蠢的错误时,我会立即修复此错误-而且没有测试人员会看到它。如果没有测试套件,该错误会将其放入存储库中。

从我的经验中,我最大的受益于简单的集成测试:当一个组件中明显有益的更改对另一个组件产生了不良影响时。