Java 小黄瓜-你如何用英语写一个明确的测试用例?

Java 小黄瓜-你如何用英语写一个明确的测试用例?,java,automated-tests,gherkin,Java,Automated Tests,Gherkin,英语可能是模棱两可的,在我看来,在使用小黄瓜的方法论中有一个假设,即任何一个说英语到一定程度的人都可以编写和理解测试用例,甚至在编写任何代码之前 鉴于以下需要自动化的简单测试场景,该方法如何指导您工作: 在图书馆应用程序中,要向图书馆添加一本书,用户单击“添加”,弹出“图书信息”对话框,用户需要填写图书标题等,然后单击“确定” 假设QA人员编写以下内容: 场景:单击添加按钮 给定已登录到应用程序的用户 当用户单击“添加”按钮时 然后显示“书本信息”对话框 够简单吗?这是一个好的测试吗? 我想我

英语可能是模棱两可的,在我看来,在使用小黄瓜的方法论中有一个假设,即任何一个说英语到一定程度的人都可以编写和理解测试用例,甚至在编写任何代码之前

鉴于以下需要自动化的简单测试场景,该方法如何指导您工作:

在图书馆应用程序中,要向图书馆添加一本书,用户单击“添加”,弹出“图书信息”对话框,用户需要填写图书标题等,然后单击“确定”

假设QA人员编写以下内容:

场景:单击添加按钮
给定已登录到应用程序的用户
当用户单击“添加”按钮时
然后显示“书本信息”对话框
够简单吗?这是一个好的测试吗? 我想我会说英语,但我听不懂

对话框中的字段应该是空的,也许有些字段应该有一些默认值或初始值。也许测试人员希望实现“Then the Book Info dialog is display”(然后显示图书信息对话框)来确保所有这些,但是实现人员知道吗?这是如何沟通的

也许这个测试应该写成

场景:单击添加按钮
给定已登录到应用程序的用户
当用户单击“添加”按钮时
然后将显示“图书信息”对话框,所有字段均为空
单击添加和显示对话框之间可能需要几秒钟的时间。因此,测试可能会失败,因为如果对话框启动,实现检查得太早,或者没有等待足够长的时间让对话框显示,测试就会失败

进行手动测试的人员不需要参与该问题,除非对话框出现的时间太长。以上就是这个人编写测试的方式(这里的要点是测试人员需要足够聪明来考虑这一点,或者一些开发人员需要解释这一点,或者他们只是在测试失败后修复它)

不知何故,这个简单的动作需要更多的信息。。。何时在编写测试的人员和执行测试操作的人员之间进行沟通

也许这个测试应该写成

场景:单击添加按钮
给定已登录到应用程序的用户
当用户单击“添加”按钮时
然后在几秒钟内显示“图书信息”对话框,所有字段均为空
或者它应该写为:

场景:单击添加按钮
给定已登录到应用程序的用户
当用户单击“添加”按钮时
用户等待几秒钟
然后将显示“图书信息”对话框,所有字段均为空
用英语写测试的人是否期望

  • 在测试行动中写下所有期望,例如。 “然后在几秒钟内显示图书信息对话框,并且所有字段均为空”,或
  • 在“图书信息对话框显示”中写下简短的陈述,然后再写一个额外的文档(用英语)描述此陈述的含义,以及所有期望值是什么

  • 在一般情况下,我支持(更接近)第二种观点

    如果你通过添加假设而用重复的“噪音”污染你的场景,你就失去了BDD想要实现的简洁、有针对性的理想。也很难知道在哪里停下来

    也就是说,如果您的故事/场景对这些有特定的要求,或者即使您希望它对这些有影响,也没有什么可以阻止添加附加子句,例如
    ,并且所有输入字段都是空的


    请记住,如果您使用的是like,您将对Done有一个单独的定义,尽管更像业务或流程,但它可以包含接受故事的“全局”要求。这些可能包括测试覆盖率的级别或性能要求。。。可以说,这与您在这里讨论的内容非常接近。

    我认为您的问题是从您糟糕的场景描述(构思糟糕)开始的,错误会层叠到您的场景步骤中。“单击添加按钮”不是一个场景,而是一个步骤。你甚至把它作为你的“when”步骤,含蓄地承认了这一点D

    如果我不知道您的用户在这个场景中的目标是什么,也不知道您试图通过这个测试向用户证明什么,那么我无法告诉您在您的步骤中包括或不包括多少特定性

    而且,如果没有您在问题中提供的所有解释和背景,就无法从您的场景文本中获得任何解释和背景

    因此,这里有一个适当场景描述的漏洞:

     Scenario: An authenticated user invokes the add book dialog
    
    但这种情况仍然存在一个问题。也就是说,这还不是一个情景。这是在一定条件下采取的行动。这就是全部。我仍然不知道用户想要完成什么

    Scenario: An authenticated user adds a new book to the library database
    
    现在我确切地知道了用户是谁,用户想要完成什么,以及我们向该用户承诺的内容:他将能够向图书馆数据库添加一本新书

    现在我知道我的测试必须证明什么了:我(作为一个经过身份验证的用户)试图添加的书,实际上已经添加到数据库中了。现在,我可以构建一个完整的场景,如下所示:

    Scenario: An authenticated user adds a new book to the library via the add book dialog
        Given I am an authenticated user
        And I have a new book to add to the database
        When I add the new book via the add book dialog
        Then the book info is displayed in the book list
    
    您可以使用步骤定义构建可重用代码,“通过添加书本对话框添加新书”,或检查“我是经过身份验证的用户”,或确保“显示书本信息”。在这个步骤代码中,您可以随心所欲地显式

    但是如果你用小黄瓜来测试输入字段的有效性,那么你是在测试错误的东西。如果您想在显示对话框时测试输入字段是否正确为空,那么应该编写javascript(或php,或pyth)