Robot Framework中的关键字是什么?

The*_*ist 5 python python-3.x robotframework

我无法在任何地方找到解释.即使在引入关键字的教程中,也没有解释我将如何从这个概念中受益.

所以要明确我的问题:说我有一个我编程的客户端和服务器.我想使用Robot Framework来测试它们的协同工作."关键字"在哪里适用?这可以用简单和抽象的测试术语来解释吗?

PS:非常感谢解释其他概念,例如库和变量(尽管它们看起来很明显).

Bry*_*ley 14

概观

将关键字视为单个测试步骤.正如测试在概念上由许多步骤组成,机器人测试由许多关键字组成.关键字是构建所有机器人测试的基础.

机器人提供了通用关键字,您可以自己创建特殊用途的关键字.机器人框架的真正强大之处在于您创建自己的关键字,以便测试可以专注于测试逻辑而不是底层实现.

例如,让我们考虑登录服务器的验收测试可能是什么.从敏捷产品所有者或首席设计师的角度来看,它可能看起来像这样:

  1. 打开浏览器到Super Website 2000!
  2. 输入有效的用户名
  3. 输入有效密码
  4. 单击"开始"按钮
  5. 您应该在仪表板页面上

这可能是产品所有者在故事卡或故障单跟踪系统中作为验收标准添加的字面意思.如果这是一个有人可以运行的实际测试,那不是很好吗?

示例测试用例

这些步骤中的每一步都可以被视为关键字.机器人的一大优点是你可以编写一个看起来几乎与原始规范相同的测试:

*** Test Cases ***
Login of an existing customer
    [Setup]     Open a browser to Super Website 2000!
    [Teardown]  close all browser windows

    Enter a valid username
    Enter a valid password
    Click the GO button
    You should be on the dashboard page
Run Code Online (Sandbox Code Playgroud)

关键字实现示例

要运行此测试用例,您需要定义这些关键字,因为机器人不知道"打开浏览器到Super Website 2000"!手段.您可以用python或其他几种语言编写它们,也可以通过组合现有关键字来编写它们.

例如,可以使用Selenium2Library关键字实现前几个关键字,如下所示:

*** Settings ***
Library    Selenium2Library

*** Variables ***
${ROOT}     http://super.website2000.com
${BROWSER}  chrome

*** Keywords ***
Open a browser to Super Website 2000!
    # this is a pre-defined Selenium2Library keyword
    Open browser  ${ROOT}    ${BROWSER}

Enter a valid username
    # these are pre-defined Selenium2Library keywords
    wait until element is visible    id=username_input
    input text    id=username_input  Test User #1

Enter a valid password
    # these are pre-defined Selenium2Library keywords
    wait until element is visible      id=password_input
    input text    id=password_input    LetMeIn!
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以使用关键字来生成非常易读的测试用例.可以使用其他关键字设计关键字,也可以使用编程语言编写关键字.

替代示例没有自定义关键字

当然,您不必编写这样的关键字.您可以在测试中直接使用Selenium2Library关键字,这将使您的测试看起来像这样:

*** Test Cases  ***
Login of an existing customer
    [Setup]      Open browser  ${ROOT}    ${BROWSER}
    [Teardown]   close all browsers

    wait until element is visible      id=username_input
    input text    id=username_input    Test User #1
    wait until element is visible      id=password_input
    input text    id=password_input    LetMeIn!
    wait until element is enabled      id=submit_button
    click button  id=submit_button
    wait until element is visible      id=//div[@class='dashboard']
    location should be  ${ROOT}/dashboard
Run Code Online (Sandbox Code Playgroud)

就个人而言,我认为测试的第一个版本更具可读性,代价是必须维护一些自定义关键字.

自定义关键字的优点

通过使用关键字,您可以隐藏网页实现的详细信息,以便您可以专注于测试的逻辑.此外,多个测试可以重复使用相同的关键字.

实现的实际细节(元素ID,URL等)都可以嵌入到关键字中.如果这些细节发生变化,则无需更改任何测试用例.相反,您更改关键字,您的测试将继续运行.想象一下,如果开发人员将输入的ID更改为- username_form_field并且password_form_field您是否要编辑每个必须登录的测试用例,或者您是否要编辑所有测试共享的一个或两个关键字?

变量

机器人框架中的变量非常强大.例如,您可以在一个位置定义站点的根URL,而不是在每个测试中对其进行硬编码.对于大多数生产站点,您必须使用两个,三个甚至更多URL运行测试.例如,您可能有一个本地开发框,一个qa框,一个临时框和一个生产框.

Robot允许您在命令行或参数文件中覆盖变量.这意味着您可以创建一组适用于多个系统的测试.例如,要在登台时使用firefox运行测试,您可以执行此操作(为清晰起见,分为多行):

$ pybot \
   --variable ROOT:http://staging.example.com \
   --variable BROWSER:firefox \
   /path/to/tests
Run Code Online (Sandbox Code Playgroud)

要使用chrome在QA1上运行完全相同的测试,您可以执行以下操作:

$ pybot \
   --variable ROOT:http://qa1.example.com \
   --variable BROWSER:chrome \
   /path/to/tests
Run Code Online (Sandbox Code Playgroud)

图书馆

简而言之,关键字被组织到库中.机器人附带了许多图书馆,互联网上还有更多图书馆.

库可以用这些示例中的机器人语法编写,但库也可以用编程语言编写,例如python和java.使用编程语言可以执行复杂的逻辑,使用机器人语言可以更轻松地将现有关键字组合成新的关键字.

敏捷环境中的关键字

如果您正在开发Scrum团队,那么关键字驱动的方法可以帮助团队提高效率.例如,如果您的测试人员技能不高,开发人员可以创建一个关键字库,以便与测试进行交互,以便测试人员不必担心页面的详细信息.

另一方面,如果您拥有高技术测试人员,他们可以承担编写关键字本身的任务,以便开发人员可以将更多时间用于实际产品.

在这两种情况下,关键字驱动的方法使qa和开发团队能够共同合作以创建高质量的产品.