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个随机测试,并且所有测试都结束于“欢迎页面”状态。
安装
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ebc47695f54ee66764efc921c69baab0d40b28ba4a69cf03eae30b9f2232fe9 |
|
MD5 | 4da07d05fdc32a307d3724b73e4d3ee2 |
|
BLAKE2b-256 | c6cdd3de0a099abeb4ca51497ef9a4c4d875ea0c401b2915fc3f6ec031fadefd |