跳转到主要内容

Robot Framework的测试数据生成器

项目描述

RoboMachine

一个为Robot Framework提供的测试数据生成器。

这个工具是用来做什么的?

你知道用户报告的那些丑陋的bug,这些bug似乎都被你所有的ATDD-、TDD-和探索性测试忽略了?那些潜伏在您正在构建的系统复杂性的角落里的bug。那些会让您的应用程序用户憎恨您的bug...

这个工具就是为了帮助你在用户找到它们之前找到并摧毁这些bug。

它能够生成大量的测试,这些测试可以遍历大量的类似(或不那么类似)的测试场景。

这是什么?

如果您知道正则表达式:正则表达式是一个模式,代表所有匹配该模式的所有可能的字符串。RoboMachine以类似的方式工作。机器以紧凑的方式表示一组测试。这个机器可以用来生成它所表示的所有(或部分)测试。

如果您知道基于模型测试或自动机理论:使用RoboMachine,您可以定义一个扩展的有限状态机(以类似Robot Framework的语法),它表示一组测试。RoboMachine还包含可以从RoboMachine模型生成实际可执行Robot Framework测试的算法。

如果您了解组合测试或喜欢数据驱动测试:使用RoboMachine,您可以定义数据集和关于该数据的数据规则,这些规则可用于生成数据驱动测试(也可以是关键字驱动测试)。这允许您将数据保存在紧凑的集合中,并让系统从那里生成实际的测试数据向量。

它看起来像什么?

这里是一个示例机器(使用组合技术),可以生成针对SeleniumLibrary演示的测试。

*** Settings ***
Suite Setup     Open Browser  ${LOGIN_PAGE_URL}   googlechrome
Suite Teardown  Close Browser
Test Setup      Go to  ${LOGIN_PAGE_URL}
Library         SeleniumLibrary

*** Variables ***
${USERNAME_FIELD}  username_field
${PASSWORD_FIELD}  password_field
${LOGIN_BUTTON}    LOGIN
${VALID_USERNAME}  demo
${VALID_PASSWORD}  mode
${LOGIN_PAGE_URL}  http://localhost:7272/html/

*** Machine ***
${USERNAME}  any of  ${VALID_USERNAME}  ${VALID_PASSWORD}  invalid123  ${EMPTY}
${PASSWORD}  any of  ${VALID_PASSWORD}  ${VALID_USERNAME}  password123  ${EMPTY}

# Add an equivalence rule to reduce the number of generated tests
${USERNAME} == ${VALID_PASSWORD}  <==>  ${PASSWORD} == ${VALID_USERNAME}

Login Page
  Title Should Be  Login Page
  [Actions]
    Submit Credentials  ==>  Welcome Page  when  ${USERNAME} == ${VALID_USERNAME}  and  ${PASSWORD} == ${VALID_PASSWORD}
    Submit Credentials  ==>  Error Page    otherwise

Welcome Page
  Title Should Be  Welcome Page

Error Page
  Title Should Be  Error Page

*** Keywords ***
Submit Credentials
  Input Text      ${USERNAME_FIELD}  ${USERNAME}
  Input Password  ${PASSWORD_FIELD}  ${PASSWORD}
  Click Button    ${LOGIN_BUTTON}

这里还有一个示例机器(使用基于有限状态机的基于模型的测试)

*** Settings ***
Suite Setup     Open Browser  ${LOGIN_PAGE_URL}   googlechrome
Suite Teardown  Close Browser
Test Setup      Go to  ${LOGIN_PAGE_URL}
Library         SeleniumLibrary

*** Variables ***
${USERNAME_FIELD}  username_field
${PASSWORD_FIELD}  password_field
${LOGIN_BUTTON}    LOGIN
${VALID_USERNAME}  demo
${VALID_PASSWORD}  mode
${LOGIN_PAGE_URL}  http://localhost:7272/html/

*** Machine ***
Login Page
  Title Should Be  Login Page
  [Actions]
    Submit Valid Credentials  ==>  Welcome Page
    Submit Invalid Credentials  ==>  Error Page

Welcome Page
  Title Should Be  Welcome Page
  [Actions]
    Go to  ${LOGIN_PAGE_URL}  ==>  Login Page

Error Page
  Title Should Be  Error Page
  [Actions]
    Go to  ${LOGIN_PAGE_URL}  ==>  Login Page

*** Keywords ***
Submit Valid Credentials
  Submit Credentials  ${VALID_USERNAME}  ${VALID_PASSWORD}

Submit Invalid Credentials
  Submit Credentials  invalid_username   invalid_password

Submit Credentials
  [Arguments]     ${username}        ${password}
  Input Text      ${USERNAME_FIELD}  ${USERNAME}
  Input Password  ${PASSWORD_FIELD}  ${PASSWORD}
  Click Button    ${LOGIN_BUTTON}

注意!此机器可以生成无限数量的测试序列,因此您需要对其进行约束。例如

robomachine --tests-max 10 --actions-max 20 --to-state 'Welcome Page' --generation-algorithm random [MACHINE_FILE_NAME]

将生成最多包含20个操作的10个随机测试,并且所有测试都结束于“欢迎页面”状态。

安装

Python包索引

pip install RoboMachine

从源

git clone git://github.com/mkorpela/RoboMachine.git
cd RoboMachine
python setup.py install

在此之后,您应该有一个名为robomachine的命令行工具可用。有关命令行工具的用法,请参阅robomachine --help

语法

  • 仅支持空格分隔的Robot Framework格式。
  • 您应使用.robomachine后缀为您的机器文件命名。
  • 您可以在机器文件的开始处有一个Robot Framework Settings表。
  • 您可以在可选的Settings表之后有一个Robot Framework Variables表。
  • 必须有一个Machine表。
  • 您可以在Machine表之后有一个Robot Framework Keywords表。

Machine表语法

用于机器变量的必须是在机器表开始处引入的。有效的机器变量是仅包含大写字母A-Z、数字(不是开头)0-9和下划线(_)的有效Robot Framework变量。例如:${VALID_123}是一个有效的机器变量。

一个有效的机器变量定义行的示例:

${VALID_VARIABLE_1}  any of  Value 1  Value 2  Value 3

机器变量的规则应接下来。规则构建块

  • 变量条件
    • ${VARIABLE} == value
    • ${VARIABLE} != value
    • ${VARIABLE} < value
    • ${VARIABLE} <= value
    • ${VARIABLE} > value
    • ${VARIABLE} >= value
    • ${VARIABLE} in (a, b) # 等同于 ${VARIABLE} == a 或 ${VARIABLE} == b
    • ${VARIABLE} ~ REGEX # python正则表达式:re.search(REGEX, ${VARIABLE}) != None
    • ${VARIABLE} !~ REGEX # 取反的正则表达式匹配
  • 并且规则:[某些条件] 和 [某些其他条件]
  • 或规则:[某些条件] 或 [某些其他条件]
  • 非规则:not ([某些条件])
  • 蕴含规则:[某些条件] ==> [某些条件]
  • 等价规则:[某些条件] <==> [某些条件]
  • [某些条件]:变量条件 OR (规则)

规则可用于删除在测试生成中不应使用的变量组合。

一个有效的规则行的示例

${VARIABLE_1} == Value 1  ==>  (${FOO} == bar  or  ${FOO} == zoo)

这意味着:当${VARIABLE_1}的值为"Value 1"时,则${FOO}应为"bar"或"zoo"。

接下来是状态块。第一个状态块是起始状态。

状态块以包含状态名称的行开始。有效的状态名称仅包含大写和小写字母a-zA-Z、数字(不是开头)0-9和空格(不是开头或结尾,并且只在单词之间)。

接着是当处于该状态时应执行的Robot Framework步骤。

接着可以定义一个动作块。

动作块以[Actions]标签开始,后面跟着一个或多个动作行。

动作行有四个部分

  • 当动作发生时执行的Robot Framework步骤(动作标签)(您也可以省略此部分 - 使用tau转换)
  • ==> 右箭头,前后各两个空格
  • 当采取动作时,机器最终所处的状态的名称(结束状态)
  • 可选规则(当操作可用时):该规则以when开头,或者以otherwise开头——表示当所有其他具有相同操作标签的操作不可用时,应执行此操作。

一个有效的状态定义示例:

State Name
  Robot Framework  Step  with  ${arguments}
  Log  something  WARN
  [Actions]
    Log  other thing  ==>  Other State  when  ${FOO} == bar
    Log  other thing  ==>  Another State  when  (${FOO} == zoo  and  ${BAR} == goo)
    Log  other thing  ==>  End State  otherwise
    Log  nothing      ==>  End State
    ==>  Some state # This here is a tau transition that does not write a step to the test

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分布

RoboMachine-0.10.0.tar.gz (12.6 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面