首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BDD GUI自动化

BDD GUI自动化
EN

Stack Overflow用户
提问于 2018-02-15 18:46:52
回答 3查看 1.5K关注 0票数 1

我在我的生活中开始了一个新角色。我是一个前端的web开发人员,但是现在我已经被转移到测试web软件,或者更多的是自动化软件测试。我相信我将追求一种BDD (行为驱动的开发)方法。我完全不知道该用什么,怎么把它拼凑在一起。

正在使用/编写的代码是用Java编写的,用于编写用于应用程序测试的web接口。我有要运行的测试文档,但我一直好奇如何实现自动化。

我被指示到Cucumber作为一种“语言”来帮助自动化。我已经做了一些研究,并遇到了一个网站的BDD工具/框架工作的概要,8最佳行为驱动开发(BDD)工具和测试框架。这有点帮助,但后来我对如何实现它感到有点困惑。在许多用于测试GUI的BDD框架中,Selenium似乎是一个共同点,但它似乎仍然无助于描述该做什么。

然后我遇到了功能测试工具这个词,我觉得这更让我困惑。他们都测试GUI吗?

我觉得看起来像一个包的那个是SmartBear TestComplete,然后是SmartBear的另一个类似的应用程序SmartBear TestLeft,但我想我看到他们仍然用Cucumber做BDDing it。还有一些其他的看起来也同样有效,但我想另一个问题是,最便宜的路线是什么?

我想我最大的问题是如何使这些测试更加动态,因为UI/浏览器维度可以很容易地从一个系统更改到另一个系统,以及如何编写能够处理这个问题并与BDD方法相结合的自动化?

这里有人有什么建议吗?外面有人这么做吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-21 14:50:02

BDD体系结构

BDD自动化通常由几个层组成:

  1. 自然语言步骤
  2. 将这些步骤与其定义联系起来的线路
  3. 步骤定义,通常访问页对象。
  4. 页对象,这些对象提供页面或小部件的所有功能。
  5. 通常通过GUI对实际代码执行的自动化。

自然语言步骤和步骤定义之间的连接通常由BDD工具(Cucumber)完成。

自动化通常是使用自动化工具(Selenium)完成的。有时,人们确实跳过GUI,可能是针对API或MVC层。这取决于网页中的功能有多复杂。如果有疑问,试一试硒。我为桌面应用程序编写了自动化框架;不管怎么说,原则是一样的。

保持它的可维护性

为了使这些步骤易于维护和更改,请将步骤保持在相当高的水平上。这通常被称为“声明式”,而不是“命令式”。例如,这太详细了:

代码语言:javascript
复制
When Fred provides his receipt
And his receipt is scanned
And the cashier clicks "Refund to original card"
And the card is inserted...

想一想用户想要达到的目标:

代码语言:javascript
复制
When Fred gets a refund to his original card

通常,一个场景会有一些Givens或Thens,但通常只有一个场景(除非您有用户交互或时间传递之类的东西,需要这两个事件来说明这种行为)。

在这个场景中,您的页面对象很可能是"RefundPageObject“,或者,如果太大,可能是"RefundToCardPageObject”。此模式允许多个场景步骤在不重复的情况下访问相同的功能,这意味着如果功能的执行方式发生变化,您只需要在一个地方更改它们。

不同的页面对象也可以用于不同的系统。

入门

如果您是第一次攻击这一点,那么首先获取一个只运行并通过而不执行任何操作的空场景(使步骤为空)。当你这样做的时候,你就可以成功地连接到黄瓜上了。

编写使方案运行的生产代码。(这与通常的做法相反;通常情况下,您会首先编写场景代码。我发现这是一个很好的开始方式。)

当您可以手动运行您的场景时,直接将自动化添加到步骤中(此时只有一个场景)。使用您最喜欢的断言包(JUnit)来获得您想要的结果。您可能需要更改您的代码,以便您可以轻松地对其进行自动化处理,例如:向网页中的元素提供相关的测试in。

一旦运行了一个场景,首先尝试编写任何后续的场景;这将帮助您思考您的设计和您将要做的工作的可测试性。当您开始添加更多的场景时,也开始将自动化提取到页面对象中。

一旦有了一些场景,就可以考虑如何处理不同的系统。如果可能的话,避免使用大量的" if“语句;这些语句很难维护。注入不同的页面对象实现可能更好(框架现在很可能支持这一点;我已经有一段时间没有使用它们了)。

在添加更多场景时,请继续重构。如果台阶太大,就把它们分开。如果页面对象太大,将其划分为小部件。我喜欢根据用户/涉众能力(通常与“何时”相关,但有时与“当时”)来组织我的场景,然后根据不同的上下文来组织。

因此,总结一下:

  1. 编写一个空的场景
  2. 编写代码使之手动传递
  3. 使用您的自动化工具连接这个场景;它现在应该运行!
  4. 编写另一个场景,这一次在生成代码之前编写自动化。
  5. 重构自动化,将其从步骤中移出页对象
  6. 在添加更多场景时,请继续重构。

现在,您已经拥有了一个完全连接的BDD框架,您可以在使其易于维护的同时继续工作。

最后提示

把这看作是活的文档,而不是测试。BDD场景几乎不会在好的团队中发现bug;他们捕捉到的任何东西通常都是代码设计问题,所以请在这个级别上解决它。它帮助人们弄清楚代码做什么和不做什么,以及为什么它有价值。

BDD最重要的部分是讨论代码是如何工作的。如果您正在对已经存在的代码进行自动化测试,那么看看您是否可以找到一个人来谈论这些复杂的部分,至少,并与他们验证您的理解。这也将帮助您在场景中使用正确的语言。

有关更多信息,请参见我关于在遗留系统中使用BDD的文章。在这个博客上也有很多给初学者的提示。

票数 2
EN

Stack Overflow用户

发布于 2018-02-17 10:24:10

既然你对从哪里开始感到不知所措,我会提醒你一些我写的关于你的问题的博客。

一些可能对你有帮助的类别:

  • http://www.thinkcode.se/blog/category/Cucumber
  • http://www.thinkcode.se/blog/category/Selenium

这个很长很旧的帖子也会给你一些提示:

http://www.thinkcode.se/blog/2012/11/01/cucumberjvm-not-just-for-testing-guis

请注意,版本已经过时了,但希望它能给出一些想法,作为什么太期待。

票数 0
EN

Stack Overflow用户

发布于 2018-02-18 23:55:01

我不是测试自动化方面的专家,但我目前正在这部分工作。因此,让我分享一些想法,并希望它将有助于您在现阶段。我们使用selenium+cucumber+intellij来测试web应用程序。我们使用testcomplete+cucumber+intellij测试java桌面应用程序。

对于web应用程序的测试,我们在web应用程序中提供了一种测试模式,它使我们能够获得产品和环境的一些有用的细节,还可以通过单击按钮并将文本输入测试面板,从而方便地触发事件。

我希望这些对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48814283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档