如何使用BDD从头开始创建Web应用程序?

时间:2017-07-29 10:12:49

标签: testing web-applications tdd bdd

我想开始一个宠物项目,以便从头开始创建Web应用程序,并且我想使用BDD和TDD。 我在“面向对象的软件增长:测试指导”中读到,我们应该从系统的最薄片开始,这样我们就可以拥有整个应用程序的行走骨架,这样我们就可以快速反馈并开始对生产/部署程序。

在BDD中编写验收测试之后,我将转向更精细的粒度测试,例如单元测试。

想象一下,Web应用程序是关于找到与你更相似的超级英雄,我会编写一个BDD场景,例如:

When I insert my information
Then the system should tell that the superhero I'm more similar to is "Batman"

我故意忽略身份验证,因此我们可以专注于系统的主要功能。此方案假定后面有一个工作基础架构,因此可以自动,端到端地复制上面的场景。

假设我想在不同的层(Web服务器,应用服务器和数据库)中布局Web应用程序,我该如何实现此测试? 假设我想使用Selenium WebDriver来模拟用户,必须模拟哪些层以及首先测试哪个层? 我还考虑过从仅测试API开始,但这不是端到端测试,但我们只会部分测试应用程序。

2 个答案:

答案 0 :(得分:1)

Cucumber是BDD的一个很好的框架。 UI / Selenium测试可能有点不稳定,所以我建议少一些(参见测试金字塔)。 我个人认为我会像你为初学者建议的那样在API级别工作,然后你将UI与应用程序分离。

在API级别编写一些应用程序的Cucumber集成测试(BDD),描述高级功能。我不会在这个级别上嘲笑,因为你想看到整个应用程序在这一点上工作。

然后在实现这些时,使用TDD,在这里你需要模拟文件IO /数据库之类的外部。完成所有TDD单元测试后,应该通过整体功能。继续,直到完成所有功能。

继续这样,然后你就可以在API级别拥有一套可靠的单元测试和一组可靠的集成(功能)测试。

一旦完成(或并行获得垂直切片)使用“快乐的一天”场景硒测试启动UI,所有真正需要测试的是UI代码并且正确地连接到App,作为主要应用程序已经过充分测试。

我的观点 - 希望它有所帮助。

答案 1 :(得分:0)

我为此使用了Cucumber(但我非常偏颇),我首先要围绕应用程序的核心部分编写一些场景。

编写方案时要遵循的一些重要规则

  1. 使用您的域名语言
  2. 只讨论你在做什么以及为什么重要
  3. 不要谈论你是如何做事的。
  4. 因此,对于您的超级英雄网站,您可以从思考开始时需要做的事情开始。

    通常,当您发现资源(超级英雄)时,您将可以探索一些基本的CRUD操作,所以

    • 创建超级英雄
    • 编辑超级英雄
    • 删除超级英雄
    • 比较超级英雄**这是你的关键起点**

    让我们开始比较超级英雄的情景

    Given there are superheroes Batman and Superman And I am like Batman When I find my superhero Then I should see I am like Batman

    现在让我们开始实现这个场景。这里一个重要的事情是不要将所有代码放在步骤定义中。而是将每个步骤定义调用为辅助方法。

    注意:以下所有代码都是ruby

    Given 'there are superheroes Batman and Superman' do create_superhero batman create_superhero superman end

    现在我们可以进入BDD红/绿测试周期了。

    因此,我们将开始收到No method found create_superheroundefined constant batman等错误。我们可以在步骤定义中使用辅助模块解决这些问题。

    module CreateSuperHeroStepHelper
      def create_superhero(attrs={})
        Superhero.create(attrs)
      end
    
      def batman
        {
          ...
        }
      end
    
      ...
    
    end
    

    从这段代码中我们可以开始处理我们应用程序的域对象,例如超级英雄。

    要使此步骤正常工作,您必须与底层Web框架进行交互。一旦你有了它的工作,你可以用最基本的形式进入下一步。

    在此过程中,您将对下一步做什么做出各种选择。如果您坚持使用这个核心方案,那么您必须聪明地了解如何实现这些方案。如果您决定处理看起来像先决条件的方案,例如用户帐户,创建超级英雄,输入您的超级英雄特征,添加超级英雄特征。然后,您最终应该使用可用于核心方案的工具(例如,您将拥有create_superhero)但是您需要更长时间才能进入应用程序的核心。

    这里没有必要考虑单元测试,图层或模拟。这是关于你做什么事情的低级细节。只要您在Web框架中具备一些基本能力,您应该开始探索您的域并使用BDD创建可用于探索超级英雄世界的简单工具。

    祝你好运