Robotframework 可以用Python编写机器人框架测试(而不是关键字)吗?

Robotframework 可以用Python编写机器人框架测试(而不是关键字)吗?,robotframework,Robotframework,是否可以用Python而不是.txt格式编写Robot框架测试 在幕后,它看起来像是通过pybot将.txt测试转换成Python,所以我希望这只是导入正确的库并从正确的类继承的问题,但我还没有弄清楚如何做到这一点 (我们已经有了很多套件,并且已经用这两种格式编写了关键字,但有时RF语法使得在Python中做简单的事情变得非常困难。我知道可以用同样的方式为每个测试编写Python关键字,再加上'wrap'设置和拆卸函数,但这似乎很麻烦。)Robot在运行测试用例之前不会在后台将它们转换为pyth

是否可以用Python而不是
.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_关键字(“检查用户已连接”,用户)


好吧,只要用python编写测试逻辑,就不应该关心python代码是否表示测试或关键字

最好是将一些html表保持为robot格式。每一行都是对关键字的调用。关键字可以用python实现,并且在逻辑上表示整个测试(尽管在robot术语中它仍然是一个“关键字”)

显示如何从python代码访问robot上下文

  • 机器人变量

    BuiltIn().get_变量_值(${USERNAME}”)

  • java关键字

    从com.mycompany.myproject.testtools导入LoginRobotKeyword LoginRobotKeywords()。登录(用户,pwd)

  • 机器人关键词 BuiltIn().run_关键字(“检查用户已连接”,用户)


Robotframework不支持直接用python编写测试用例。我已经提交了一份增强PR,请在这里查看

但我已经尝试通过将所有测试用例逻辑移到python代码中来实现这一点,并将RF测试用例作为它们的入口点

这里有一个例子

我们可以创建一个包含所有测试逻辑和设置/拆卸逻辑的python文件,如下所示

#***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