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

时间:2014-04-08 18:53:02

标签: robotframework

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

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

(我们已经有了很多套件并且都有以两种格式编写的关键字,但有时RF语法使得在Python中执行简单的操作非常困难。我知道可以为每个编写一个Python关键字test plus'wrap'设置和拆卸功能相同,但这看起来很麻烦。)

3 个答案:

答案 0 :(得分:2)

在运行之前,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

答案 1 :(得分:1)

好吧,只要你在python中编写测试逻辑,你就不应该关心你的python代码是代表测试还是关键字。

您可以做的最好的事情是以机器人格式保留一些html表格。每一行都是对关键字的调用。该关键字可以在python中实现,并且在逻辑上代表整个测试(尽管在机器人术语中它仍然是“关键字”)。

This post显示了如何从python代码访问机器人上下文。

  • 机器人变量

    内建()。get_variable_value( “$ {USERNAME}”)

  • java关键字

    从com.mycompany.myproject.testtools导入LoginRobotKeyword LoginRobotKeywords()。login(user,pwd)

  • 机器人关键字 BuiltIn()。run_keyword(“check user connected”,user)

答案 2 :(得分:0)

Robotframework不支持直接在python中编写测试用例。我已经提交了增强型PR,请在此处进行检查

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

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

这里是一个例子。

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

# *** 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'])


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