BDD GUI自动化

时间:2018-02-15 18:46:53

标签: selenium cucumber bdd testcomplete cucumber-java

我在我的生活中开始了新的角色。我是一名前端Web开发人员,但我现在已经转向测试网络软件,或者更多,自动化测试软件。我相信我会追求BDD(行为驱动开发)方法。关于使用什么以及如何将它拼凑在一起,我很遗憾。

正在使用/编写的代码是用Java编写的Web界面供应用程序测试。我有运行测试的文档,但我很好奇如何自动化它。

我被指示为Cucumber作为其中一种语言"帮助自动化。我做了一些研究并找到了一个网站,以获取BDD工具/框架作品的概要, 8 Best Behavior Driven Development (BDD) Tools and Testing Frameworks。这有点帮助,但后来我对如何实现它有点困惑。似乎Selenium是许多用于测试GUI的BDD框架的共同点,但它似乎仍然无法帮助描述要做什么。

然后我遇到了Functional Testing tool这个词,我觉得这让我更加困惑。他们都测试了GUI吗?

我认为看起来像是一个包的SmartBear TestComplete,然后就是SmartBear的另一个类似的应用程序,SmartBear TestLeft,但我想我看到了他们仍然使用Cucumber进行BDDing。还有一些看起来可能也可以工作的其他人,但我想另一个问题是什么是最便宜的路线?

我想我最大的问题是如何使这些测试更具动态性,因为UI /浏览器尺寸可以很容易地在不同系统之间进行更改,以及如何编写可以处理此问题的自动化,并将其与BDD方法?

有人在这有什么建议吗?有没有人这样做?

提前致谢。

3 个答案:

答案 0 :(得分:2)

BDD架构

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

  1. 自然语言步骤
  2. 将步骤与其定义联系起来的布线
  3. 步骤定义,通常访问页面对象
  4. 页面对象,提供页面或小部件的所有功能
  5. 通常通过GUI实现对实际代码的自动化。
  6. 自然语言步骤和步骤定义之间的连接通常由BDD工具(Cucumber)完成。

    自动化通常使用自动化工具(Selenium)完成。有时人们会跳过GUI,可能会针对API或MVC层。这取决于网页功能的复杂程度。如果有疑问,请试试Selenium。我为桌面应用编写了自动化框架;无论如何,原则是一样的。

    保持可维护性

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

    When Fred provides his receipt
    And his receipt is scanned
    And the cashier clicks "Refund to original card"
    And the card is inserted...
    

    想想用户想要实现的目标:

    When Fred gets a refund to his original card
    

    一般情况下,一个场景会有一些Givens或Thens,但通常只有一个When(除非你有类似用户交互或时间传递的东西,需要两个事件来说明行为)。

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

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

    入门

    如果你是第一次攻击它,那么首先得到一个只运行并且没有做任何事情的空场景(让步骤为空)。完成此操作后,您将成功连接Cucumber。

    编写 使场景运行的生产代码。 (这是你通常做的方式的另一种方式;通常你首先编写场景代码。我发现这是开始的好方法。)

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

    一旦您运行了一个场景,请先尝试编写任何后续场景;这有助于您考虑您的设计以及您将要执行的操作的可测试性。当您开始添加更多场景时,也开始将该自动化提取到页面对象中。

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

    在添加更多方案时继续重构。如果步骤太大,请将它们分开。如果页面对象太大,请将它们分成小部件。我喜欢按用户/利益相关者的能力组织我的场景(通常与“何时”有关,但有时与“当时”有关),然后是不同的背景。

    总结一下:

    1. 写一个空场景
    2. 编写代码以手动传递
    3. 使用自动化工具连接场景;它现在应该运行!
    4. 编写另一个场景,这次是在生产代码
    5. 之前编写自动化
    6. 重构自动化,将其从步骤移到页面对象
    7. 在添加更多方案时继续重构。
    8. 现在你已经拥有了一个完全有线的BDD框架,而且你可以在保持可维护的同时继续前进。

      最后提示

      将此视为活文档而非测试。 BDD场景几乎没有在好的团队中找到错误;他们捕获的任何东西通常都是代码设计问题,所以在那个级别上解决它。它可以帮助人们弄清楚代码做了什么和不做什么,以及为什么它有价值。

      BDD最重要的部分是进行有关代码如何工作的对话。如果您正在自动测试已存在的代码,请查看是否可以找到某人与复杂位进行对话,并至少验证您对它们的理解。这也有助于您在场景中使用正确的语言。

      See my post on using BDD with legacy systems for more.该博客上也有很多关于初学者的提示。

答案 1 :(得分:0)

既然你对从哪里开始感到迷茫,我会告诉你一些我写过的关于你的问题的博客。

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

这个相当长而旧的帖子也可能会给你提示:

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

请注意版本已过时,但希望它可以提供一些想法。

答案 2 :(得分:0)

我不是测试自动化的专家,但我目前正在研究这部分。所以,让我分享一些想法,希望它能在现阶段帮助你。 我们使用selenium + cucumber + intellij来测试Web应用程序。我们使用testcomplete + cucumber + intellij来测试java桌面应用程序。

关于Web应用程序的测试,我们在Web应用程序中提供了一个测试模式,它允许我们获得产品和环境的一些有用的细节;并且还允许我们通过单击按钮并在测试模式下将文本输入测试面板来轻松触发事件。

我希望这些对你有所帮助。