是否有可能在Python中编写Robot Framework测试(而不是关键字)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (113)

是否可以用Python而不是.txt格式编写Robot Framework测试?

在幕后,看起来.txt测试被转换为Python,pybot所以我希望这只是导入正确的库并从正确的类继承但我无法弄清楚如何做到这一点。

(我们已经拥有一堆套件,并且有两种格式的关键字,但有时RF语法使得在Python中执行简单的操作非常困难。我知道可以为每个测试编写一个Python关键字加'以同样的方式包装'setup和teardown功能,但这看起来很麻烦。)

提问于
用户回答回答于

在运行之前,Robot不会在后台将测试用例转换为python。相反,它解析测试用例,然后遍历每个关键字,调用实现关键字的代码。从来没有一个阶段存在完全纯粹的python表示测试用例。

不可能在python中编写测试,并且通过提供的测试运行器将这些测试与传统的机器人测试一起运行。就像您在问题中所说的那样,您唯一的选择是将单个测试用例的所有逻辑放在一个关键字中,并从测试用例中调用该关键字。

可以创建并仅通过公布的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'])

上面的例子来自这里:

http://robot-framework.readthedocs.org/en/2.8.1/autodoc/robot.running.html

用户回答回答于

Robotframework不支持直接在python中编写测试用例。我已提交增强版PR,请在此处查看

https://github.com/robotframework/robotframework/issues/3128

但我试图通过将所有测试用例逻辑移动到python代码来做到这一点,并使RF测试用例成为它们的入口点。

这是一个例子。

我们可以创建一个python文件来包含所有测试逻辑和setup / teardown逻辑,就像这样

# *** case0001.py *****
from SchoolClass import SchoolClass
schCla = SchoolClass()

class case0001:

    def steps(self):
        print('''\n\n***** step 1 ****  add school class \n''')
        self.ret1 = schCla.add_school_class('grade#1', 'class#1', 60)
        assert self.ret1['retcode'] == 0



        print('''\n\n***** step 2 ****  list school class to check\n''')

        ret = schCla.list_school_class(1)
        schCla.classlist_should_contain(ret['retlist'],
                                    'grade#1', 
                                    'class#1',
                                    60,
                                    self.ret1['id'])


    def setup(self):
        pass

    def teardown(self):
        schCla.delete_school_class(self.ret1['id'])

然后我们创建一个Robot文件。其中所有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测试用例创建一个自动生成它们的工具。

扫码关注云+社区

领取腾讯云代金券