更新:有了 Robot Framework,这已经改变并且变得更容易了。
发布说明:Running and result models have been changed。
-
TestSuite、TestCase 和 Keyword 对象曾经具有包含其中使用的关键字的关键字属性。这个名字有误导性
现在他们也有 FOR 和 IF 对象。与TestCase 和
Keyword 属性已重命名为 body 和 TestSuite 它
被完全删除。关键字属性仍然存在,但它是
只读且已弃用。
- 新的
body 没有create() 用于创建关键字的方法,就像旧的关键字一样,而是它有单独的
create_keyword()、create_for() 和 create_if() 方法。这个
意味着像test.keywords.create() 这样的旧用法需要更改
到test.body.create_keyword()。
例如,查看其他答案:How to write FOR loop and IF statement programmatically with Robot Framework 4.0?。
在 Robot Framework 4.0 之前:
IF声明
if 语句应该是带有您需要的参数的 Run Keyword If 关键字。它与其他关键字一样是关键字,因此您应该在其 args 列表中列出所有其他内容。
- 条件。
-
True 分支的关键字名称。
- 如果有的话,将任何
args 与True 分支的关键字分开。单独列出。
-
ELSE IF 关键字(如果需要)。
-
ELSE IF 条件。
-
ELSE IF 分支的关键字名称。
- 如果有的话,将任何
args 与ELSE IF 分支的关键字分开。单独列出。
-
ELSE 关键字。
-
ELSE 分支的关键字名称。
- 如果有的话,将任何
args 与ELSE 分支的关键字分开。单独列出。
from robot.api import TestSuite
suite = TestSuite('Activate Skynet')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Run Keyword If', args=[True, 'Log To Console', 'Condition was TRUE', 'ELSE', 'Log To Console', 'Condition was FALSE'])
test.keywords.create('Run Keyword If', args=[False, 'Log To Console', 'Condition was TRUE', 'ELSE', 'Log To Console', 'Condition was FALSE'])
suite.run()
这是它在日志中的样子:
FOR循环
至于for 循环。它是基于robot.running.model.Keyword 类的robot.running.model.ForLoop 类实现的特殊关键字。这是构造函数:
它有一个flavor 参数,就是要说的循环类型。所以是IN、IN RANGE、IN ZIP等。
现在您实例化一个robot.running.model.Keyword,尽管您可以将其类型设置为for,但它不会有flavor 属性。因此,当您执行代码时,它会抛出您看到的错误。这是因为ForRunner 会尝试访问flavor 属性。
File "/usr/local/lib/python3.7/site-packages/robot/running/steprunner.py", line 52, in run_step
runner = ForRunner(context, self._templated, step.flavor)
AttributeError: 'Keyword' object has no attribute 'flavor'
所以你必须使用ForLoop 类。另外我使用的是 Robot Framework 3.1.2,所以在我的情况下错误可能会有所不同,但方法应该是相同的。
它应该是这样的:
from robot.running.model import ForLoop
for_kw = ForLoop(['${i}'], ['10'], flavor='IN RANGE')
test.keywords.append(for_kw)
不,这仍然会失败并出现错误:
FOR 循环不包含关键字。
所以你必须像这样填充它:
for_kw.keywords.create('No Operation')
完整的例子:
from robot.api import TestSuite
from robot.running.model import ForLoop
suite = TestSuite('Activate Skynet')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Log Many', args=['SKYNET', 'activated'], type='setup')
test.keywords.create('Log', args=['SKYNET'])
for_kw = ForLoop(['${i}'], ['10'], flavor='IN RANGE')
for_kw.keywords.create('No Operation')
test.keywords.append(for_kw)
suite.run()
如果你运行它只会产生一个输出 XML,你必须手动运行 rebot 以获得一个日志和报告 HTML 文件。