Automated tests 自动化验收测试-UI还是API?

Automated tests 自动化验收测试-UI还是API?,automated-tests,qa,continuous-deployment,Automated Tests,Qa,Continuous Deployment,在过去的几天里,我一直在研究自动验收测试,学习BDD和JBehave、FitNesse和Slim、Selenium和WebDriver等 我刚刚观看了Robert C.Martin的视频,他在视频中演示了如何使用FitNesse编写和维护此类测试。最后,有人问这些测试是否击中了用户界面。Martin接着解释说,将验收测试耦合到UI可能代价高昂,因为UI的更改非常频繁。我还可以猜测,这样的测试只能在UI开发完成后才能编写,这将使测试人员在定义上落后于计划 我要问:还有什么选择?Martin似乎暗示

在过去的几天里,我一直在研究自动验收测试,学习BDD和JBehave、FitNesse和Slim、Selenium和WebDriver等

我刚刚观看了Robert C.Martin的视频,他在视频中演示了如何使用FitNesse编写和维护此类测试。最后,有人问这些测试是否击中了用户界面。Martin接着解释说,将验收测试耦合到UI可能代价高昂,因为UI的更改非常频繁。我还可以猜测,这样的测试只能在UI开发完成后才能编写,这将使测试人员在定义上落后于计划

我要问:还有什么选择?Martin似乎暗示测试应该命中一个隐藏层,该层将操纵应用程序的业务层。我的理解是,这将需要额外的工作,更不用说它将公开一个新的API,该API需要在生产环境中进行一次安全保护

通过应用程序服务进入业务层就足够了吗

你有什么经验


谢谢分享

不幸的是,两者都需要。一般来说,您可能希望使用类似于适应度的工具自动化业务层测试。避免使用UI基本上可以保证定义的业务规则始终有效。通过UI实现自动化可能需要更多的维护。但从好的方面来说,由于大部分UI使用平台提供的机制(例如c#/Winforms),因此只有在其他类型的测试(如业务层)覆盖良好的情况下进行更改,才能进行大部分UI测试。自动化测试需要维护和更新,但UI测试往往需要更多的维护,并且随着时间的推移,可靠性往往会降低。

通过UI或直接触及业务层的测试可以被视为两种不同类型的测试,具有不同的优缺点

如果您直接测试UI,那么您就是在测试用户看到的内容,您不必为了能够测试它而更改代码。然而,测试极端情况或系统如何对异常情况(如异常)做出反应变得非常困难。正如罗伯特·马丁所说,这是脆弱的。如果接口发生更改,则需要更改测试。因此,通过UI进行测试取决于UI的成熟度。在项目的后期,UI更加稳定,因此通过UI进行测试更有意义。此外,通过UI测试某些东西很困难或复杂

如果您正在测试业务层,那么您可以更轻松地测试拐角条件,并且您对UI中的更改不太敏感。但是,正如您所说,软件必须以允许进行此类测试的方式编写。您甚至可能需要公开一个新的接口来允许它,然后必须对其进行维护。根据我的经验,有时很难让开发人员支持这种接口。它被认为没有真正的界面那么重要。但这总是可能的。这种接口需要开发人员的认可,否则随着时间的推移,您可能会面临“不受支持”的风险

如果您没有外部接口,那么尝试请求它。你永远不知道,你也许能说服他们这是个好主意。在一个项目开始的时候更容易

如果您有外部接口,那么使用它来测试您的业务逻辑

否则,您将不得不使用UI来测试这些东西。一种方法是使用UI进行烟雾测试,以回答以下问题:此软件可测试吗?想一想每次从开发人员那里获得构建时都必须测试的常见问题。我可以登录吗,我可以注销吗,主页是否出现,我可以执行简单的命令吗?从这些东西中选择5或6个,并构建一个自动化测试套件来测试这些东西。使用这些测试作为指导,了解您可以通过UI实际测试多少功能,以及它有多有用


然后,当您去找开发人员并要求提供外部接口时,您可以将此用作参数。

创建用于测试的接口是“测试人员的梦想”,但启用/禁用它将是部署的噩梦。您可能需要使用不同的冒烟测试进行“测试构建”和“部署构建”。但只要你限制UI自动化测试,任何妥协都是好的。

我强烈主张在验收测试中使用非UI自动化模式。您可能面临的问题是,向传统的代码盲测试人员推销该想法时,他们会发现验收标准的非可视验证概念不充分。我更喜欢中间路线,通过两组测试测试验收标准。第一组完全以逻辑为中心,因此针对API/服务/远程层实现。这台机器是100%自动化的。第二组是相同需求的UI验证。我个人的观点是,由于其他答案中所述的原因,不应自动执行第二套。至于编写测试所针对的层,则取决于团队。如果团队真正致力于质量,他们会将其视为产品开发的重要组成部分。然而,在现实世界中,这是一个艰难的推销。除非从一个项目开始就明确地调用它,否则在一个正在运行的项目中改造这样的接口是很困难的。我建议,如果您想要实现自动化验收测试,请尽早进行。随着产品的老化,实施此类黑客攻击的可能性急剧降低。

我只能说UI测试,问答风格:

A)我们的用户界面已经稳定,还是仍有可能发生很大变化?

稳定-自动化带来额外价值

可能会更改-不要自动化,您将花费更多时间维护(重做)这些测试


B)我们的UI是稳定的,我们应该尽可能多地自动化它吗?

上帝不

1) 把你所有的钱都拿走