0

我正在尝试学习 BDD cucumber,并且正在尝试为具有有效和无效用户名的登录场景编写功能文件。对于有效用户将被记录并注销,但是对于无效用户名,用户将被要求再次进入登录页面并要求写入正确的凭据。

我想问一下,《情景大纲》中能有正反两面吗?你能帮我为这个简单的场景编写完美的功能文件吗?看看我的功能文件代码(PS,我是初学者:))


Feature: Login Action 
    Description: This feature will test a LogIn and LogOut functionality


Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    When User navigate to Login Page
    Then User enters "<username>" and "<password>" 
    And Keeping case as Valid
    Then User should get logged in
    And Message displayed Login Successfully
    Then User enters "<username>" and "<password>" 
    And Keeping case as InValid
    Then user will be asked to go back to login page
    And Provide correct credentials

Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|
        |abc1@gmail.com|dfsd2|InValid|


Scenario: Successful logout from application 

    When user logs out from application 
    Then Message displayed Logout successfully 
    And Browser quit by driver
4

3 回答 3

1

正如在一个很好的答案中指出的那样 - 每个场景本质上都是一个测试用例,因此必须清楚地分开。

尽管如此,重要的是要理解 Given/When/Then(在它们最基本的本质上)等同于系统测试的传统三个阶段:Arrange/Act/Assert,因此:

Given:将系统安排在已知状态

时间:命令系统(您要测试的内容)

然后:断言结果是你所期望的。

而已!(当然 BDD 远不止这些——但这些是可执行规范的基础)

Given User is on Home Page不是将系统安排在已知状态,Given I am registered 而是. 虽然仅仅陈述这一点可能还不够,因为一旦你了解了场景的原因和内容,你就会很快意识到你错过了一些更具体的例子。

套用上一个答案:

Given I am registered-> 将用户(但谁重要?)设置为在系统中注册(数据库条目?),注册什么?对结果有影响吗?

When I sign in-> 向系统发出登录命令(谁?)——这可以通过 Web 表单或 API(或通过电话?)来完成。什么时候登录有关系,可以立即登录吗?

Then I should be signed in-> 检查来自网络应用程序、数据库、会话的响应?曲奇饼?

话虽如此,登录场景可能不值得使用 BDD 来解决,因为它们与 CRUD 一样定义良好 - 几乎不需要分析。

于 2018-10-18T11:43:22.840 回答
1
Scenario: Good sign in
  Given I am registered
  When I sign in
  Then I should be signed in

Scenario: Not registered sign in
  Given I am not registered
  When I sign
  Then I should not be signed in
  And ...

Scenario: Registered with wrong password
  Given I am registered
  When I sign in with a bad password
  Then I should not be signed in
  And ...

提示:

  • 保持简单
  • 不要使用轮廓
  • 将您如何做事的细节保留在场景之外
  • 每条路径都有一个场景
  • 10 个简单的场景胜过一个复杂的场景。

您可以在https://github.com/diabolo/cuke_up/tree/master/features查看有关如何(在 Ruby 中)编写此类场景的详细信息。

注意事项:

  • 这只是一个人的意见
  • 您需要能够编写代码以这种方式工作(当您将有关如何从黄瓜中完成事情的所有细节推送到帮助代码中时)。
  • 注册是登录的先决条件
于 2018-06-01T09:05:00.630 回答
1

'完美' - 没有这样的事情......

您编写的 ScenarioOutline 非常令人困惑,并且可能对scenariooutline 的工作方式有错误的解释。基本上,您使用示例表的每一行登录两次,即。相同的用户名和密码(SO 中的第 3 行和第 7 行)。在一个场景大纲中,所有步骤都将与您在示例中提供的每一行数据重复。请参阅多个可用教程。

为什么要混淆有效登录和无效登录?将它们放在不同的场景中。易于遵循。
将注销移至单独的功能文件。然后,您可以将登录场景的前 3 步移到后台。减少重复。

您将在检查登录功能以获取多个数据的有效案例时遇到问题。一旦有效用户登录,大多数 Web 应用程序将登录凭据存储在 cookie 等中。因此,当对登录页面发出新请求时,它可能会跳过登录页面并登陆也许可以说主页。然后,当 selenium 代码查找用户 ID 输入框时,您将得到 NoSuchElementException。因此,对于有效的情况,您也需要注销。

@Login
Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    ....
    ....

@Valid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

@InValid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

要运行Valid Login案例,请使用 runner 中的 tags 选项,{"@Login","@Valid"}或者如果在 cucumber 2 上@Login and @Valid。对于无效的一个替换为@InValid。

于 2018-06-01T08:35:22.180 回答