Robotframework 可以用Python编写机器人框架测试(而不是关键字)吗?
是否可以用Python而不是Robotframework 可以用Python编写机器人框架测试(而不是关键字)吗?,robotframework,Robotframework,是否可以用Python而不是.txt格式编写Robot框架测试 在幕后,它看起来像是通过pybot将.txt测试转换成Python,所以我希望这只是导入正确的库并从正确的类继承的问题,但我还没有弄清楚如何做到这一点 (我们已经有了很多套件,并且已经用这两种格式编写了关键字,但有时RF语法使得在Python中做简单的事情变得非常困难。我知道可以用同样的方式为每个测试编写Python关键字,再加上'wrap'设置和拆卸函数,但这似乎很麻烦。)Robot在运行测试用例之前不会在后台将它们转换为pyth
.txt
格式编写Robot框架测试
在幕后,它看起来像是通过pybot
将.txt
测试转换成Python,所以我希望这只是导入正确的库并从正确的类继承的问题,但我还没有弄清楚如何做到这一点
(我们已经有了很多套件,并且已经用这两种格式编写了关键字,但有时RF语法使得在Python中做简单的事情变得非常困难。我知道可以用同样的方式为每个测试编写Python关键字,再加上'wrap'设置和拆卸函数,但这似乎很麻烦。)Robot在运行测试用例之前不会在后台将它们转换为python。相反,它解析测试用例,然后迭代每个关键字,调用实现该关键字的代码。从来没有一个阶段是测试用例的完全纯python表示 用python编写测试是不可能的,这些测试由提供的测试运行程序与传统的robot测试一起运行。正如您在问题中所说,您唯一的选择是将单个测试用例的所有逻辑放在单个关键字中,并从测试用例调用该关键字 可以仅通过发布的API在python中创建和执行测试。这可能不是您真正想要的,因为最终您仍然在创建关键字,您只是通过python创建它们
from robot.api import TestSuite
suite = TestSuite('Activate Skynet')
suite.imports.library('OperatingSystem')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Set Environment Variable', args=['SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
以上示例取自此处:
Robot在运行测试用例之前不会在后台将它们转换为python。相反,它解析测试用例,然后迭代每个关键字,调用实现该关键字的代码。从来没有一个阶段是测试用例的完全纯python表示 用python编写测试是不可能的,这些测试由提供的测试运行程序与传统的robot测试一起运行。正如您在问题中所说,您唯一的选择是将单个测试用例的所有逻辑放在单个关键字中,并从测试用例调用该关键字 可以仅通过发布的API在python中创建和执行测试。这可能不是您真正想要的,因为最终您仍然在创建关键字,您只是通过python创建它们
from robot.api import TestSuite
suite = TestSuite('Activate Skynet')
suite.imports.library('OperatingSystem')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Set Environment Variable', args=['SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
以上示例取自此处:
好吧,只要用python编写测试逻辑,就不应该关心python代码是否表示测试或关键字 最好是将一些html表保持为robot格式。每一行都是对关键字的调用。关键字可以用python实现,并且在逻辑上表示整个测试(尽管在robot术语中它仍然是一个“关键字”) 显示如何从python代码访问robot上下文
- 机器人变量 BuiltIn().get_变量_值(${USERNAME}”)
- java关键字 从com.mycompany.myproject.testtools导入LoginRobotKeyword LoginRobotKeywords()。登录(用户,pwd)
- 机器人关键词 BuiltIn().run_关键字(“检查用户已连接”,用户)
- 机器人变量 BuiltIn().get_变量_值(${USERNAME}”)
- java关键字 从com.mycompany.myproject.testtools导入LoginRobotKeyword LoginRobotKeywords()。登录(用户,pwd)
- 机器人关键词 BuiltIn().run_关键字(“检查用户已连接”,用户)
#***case0001.py*****
从课堂导入课堂
schCla=学校班级()
类别个案0001:
def步骤(自我):
打印(''\n\n****步骤1****添加学校班级'\n'')
self.ret1=schCla.add#u school#u class('grade#1','class#1',60)
断言self.ret1['retcode']==0
打印(“'\n\n****步骤2****列出要检查的学校班级”\n')
ret=学校名单、班级(1)
类列表应该包含(ret['retlist'],
“1级”,
“1级”,
60,
self.ret1['id'])
def设置(自):
通过
def拆卸(自):
schCla.delete_school_class(self.ret1['id'))
然后我们创建一个机器人文件。其中所有RF测试用例的形式都相同,只是作为上面python测试用例的入口点 像这样
*** Settings ***
Library cases/case0001.py WITH NAME C000001
Library cases/case0002.py WITH NAME C000002
*** Test Cases ***
add class - tc000001
[Setup] C000001.setup
C000001.steps
[Teardown] C000001.teardown
add class - tc000002
[Setup] C000002.setup
C000002.steps
[Teardown] C000002.teardown
您可以看到,通过这种方式,RF测试用例是相似的。我们甚至可以创建一个工具,通过扫描Python测试用例来自动生成它们 Robotframework不支持直接用python编写测试用例。我已经提交了一份增强PR,请在这里查看 但我已经尝试通过将所有测试用例逻辑移到python代码中来实现这一点,并将RF测试用例作为它们的入口点 这里有一个例子 我们可以创建一个python文件来包含所有testi