【问题标题】:scenario outline in robot framework with Gherkin带有 Gherkin 的机器人框架中的场景大纲
【发布时间】:2017-12-01 18:51:42
【问题描述】:

我想在 Robot Framework 中以最“优雅”的方式将多个参数传递给我的测试用例。许多框架中使用的场景大纲允许用表中的值替换变量/关键字。表格中的每一行都被视为一个场景。

Robot Framework 中的场景大纲是否有任何等价物?

例如我们有这样的测试用例:

Given users email is ${email}
And users password is ${password}
When user is on login page
Then user can sign in 

例如,我们希望将多个电子邮件和密码作为一个数组传递给这个测试用例,并运行与该数组中的行一样多的次数。我可以在不将测试用例转换为关键字以使用模板的情况下做到这一点吗?

【问题讨论】:

  • 测试用例不带参数。您能否更清楚地了解“将参数传递给我的测试用例”是什么意思?你问test templates怎么用?
  • 我添加了一个例子来说明我的意思,我希望现在已经清楚了。 :)

标签: selenium testing automated-tests robotframework gherkin


【解决方案1】:

您不能将 BDD 样式的测试与数据驱动的测试混用。最接近的方法是以 BDD 样式编写关键字,然后在实际测试用例中使用该关键字。

例如,您可以这样做:

*** Keywords ***
users email is 
    [Arguments]  ${email}
    set test variable  ${current email}  ${email}

users password is
    [Arguments]  ${password}
    set test variable  ${current password}  ${password}

User is on login page
    log  pretend we are on the login page

User can sign in
    should contain  ${current password}  !
    ...  password for ${current email} doesn't contain '!' (${current password})
    ...  values=False

User login template
    [Arguments]  ${email}  ${password}

    Given users email is  ${email}
    And users password is  ${password}
    When user is on login page
    Then user can sign in

*** Test Cases ***
Scenario: user can sign in with valid credentials
    [Template]  User login template

    # username        # password
    larry@example.com   heymo!
    moe@example.com     wiseguy!
    curly@example.com   nyuknyuk!

【讨论】:

  • 好的,我知道这是在机器人框架中执行此操作的方法。但是请看这个例子:link 不是将数据驱动测试与 BDD 混合在一起吗?对我来说,这是一个相当合理的解决方案,而在机器人框架中这似乎很不清楚。但我是这个主题的初学者,我可能会弄错。 ;)
  • @Ewa:该链接指向不同的测试框架。黄瓜和机器人是两个完全不同的东西。每个测试框架中有很多事情是其他测试框架无法做到的。机器人框架从未设计为支持黄瓜语言 gherkin。
  • 是的,我知道这些是不同的框架。我的问题是我是否可以在机器人框架中做类似场景大纲的事情。我想现在我知道这不是完全可能的。谢谢你的回答。 :)
【解决方案2】:

请参阅这篇优秀的blog,了解如何在 Robot Framework 中使用类似 Gherkin 的数据表(这是一个优雅的解决方法)。

这是示例代码:

*** Settings ***
Force Tags        OnlyThisOne
Resource          BDD.robot

*** Test Case ***     \          Closed Period             Open Period               Run Import On    Old Manager Stops    New Manager Starts
1                     Example    1.11.2009 - 30.11.2009    1.12.2009 - 31.12.2009    11.11.2009       30.11.2009           1.12.2009

2                     Example    1.11.2009 - 30.11.2009    1.12.2009 - 31.12.2009    1.11.2009        31.10.2009           1.11.2009

3                     Example    1.11.2009 - 30.11.2009    1.12.2009 - 31.12.2009    1.12.2009        30.11.2009           1.12.2009

*** Keyword ***
Example
    [Arguments]    ${periodClosed}    ${periodOpenAndModified}    ${importDay}    ${oldManagerValidUntil}    ${newManagerValidFrom}
    Given initialized criteria for bonus commercial
    And a branch B with branch manager M_OLD and employee E1
    And evaluation for E1 for period ${periodClosed} which is closed
    And evaluation for E1 for period ${periodOpenAndModified} which is open and modified
    When M_NEW becomes new manager of branch B
    And import service is called on ${importDay}
    Then the new branch manager of branch B is M_NEW valid from ${newManagerValidFrom}
    And branch manager M_OLD manages employee E until ${oldManagerValidUntil}
    And branch manager M_NEW manages employee E from ${newManagerValidFrom}
    And Evaluations for E1 still have the same content
    Given initialized criteria for bonus commercial
    But M_NEW becomes new manager of branch B
    But import service is called on ${importDay}
    And M_OLD becomes new manager of branch C

BDD.robot 资源文件:

*** Settings ***
Documentation     Library de.codecentric.fourtexx.robot.ModelKeyword
#*** Test Cases ***
#Branch, Manager and Worker
#    Given a branch A with branch manager Boss and employee Worker
*** Keywords ***
the new branch manager of branch ${branch} is ${manager} valid from ${newManagerValidFrom}
    assert branch manager valid from    ${branch}    ${manager}    ${newManagerValidFrom}
initialized criteria for bonus commercial
    No Operation
a branch ${branch} with branch manager ${manager} and employee ${employee}
    No Operation
evaluation for ${employee} for period ${periodClosed} which is closed
    No Operation
evaluation for ${employee} for period ${periodOpenAndModified} which is open and modified
    No Operation
${manager} becomes new manager of branch ${branch}
    No Operation
import service is called on ${importDay}
    No Operation
branch manager ${manager} manages employee ${employee} until ${oldManagerValidUntil}
    No Operation
branch manager ${manager} manages employee ${employee} from ${newManagerValidFrom}
    No Operation
Evaluations for ${employee} still have the same content
    No Operation
assert branch manager valid from
    [Arguments]    ${arg1}    ${arg2}    ${arg3}
    Evaluate    True

【讨论】:

    【解决方案3】:
    *** Test Cases ***
    Scenario: eating cucumbers
        [Template]  Scenario Outline: eating cucumbers
    
        # Examples:
        # start  eat  left
        12       5    7
        20       5    15
        33       11   22
        35       15   20
    
    *** Keywords ***
    Scenario Outline: eating cucumbers
        [Arguments]  ${start}  ${eat}  ${left}
        Given there are ${start} cucumbers
        When I eat ${eat} cucumbers
        Then I should have ${left} cucumbers
    

    字体:https://gist.github.com/Tset-Noitamotua/8f06bd490918a56b0485630016aef60b

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2015-05-08
      相关资源
      最近更新 更多