14

假设我在本地目录中有 2 个测试套件 foo 和 bar,并且我想按照 foo 然后 bar 的顺序运行测试套件。

我试图运行pybot -s foo -s bar .,但它只是运行 bar 然后 foo (即按字母顺序)。

有没有办法让 pybot 运行机器人框架套件以按照我定义的顺序执行?

4

5 回答 5

16

机器人框架可以使用可用于指定执行顺序的参数文件(文档):

这是来自较旧的文档(不再在线):

参数文件的另一个重要用途是以特定顺序指定输入文件或目录。如果按字母顺序的默认执行顺序不合适,这将非常有用:

基本上,您创建类似于启动脚本的东西。

--name My Example Tests
tests/some_tests.html
tests/second.html
tests/more/tests.html
tests/more/another.html
tests/even_more_tests.html

有一个简洁的功能,您可以从参数文件中调用另一个可以覆盖先前设置的参数的参数文件。执行是递归的,因此您可以根据需要嵌套任意数量的参数文件

另一种选择是使用启动脚本。比您必须处理其他方面,例如您正在运行测试的操作系统。您还可以使用 python 在多个平台上启动脚本。这部分文档中有更多内容

于 2014-07-22T09:19:07.463 回答
12

如果 RF 目录中有多个测试用例文件,则可以通过将数字作为测试用例名称的前缀来指定执行顺序,如下所示。

01__my_suite.html -> 我的套房 02__another_suite.html -> 另一个套房

如果这些前缀与套件的基本名称用两个下划线分开,则它们不会包含在生成的测试套件名称中:

更多细节在这里。

http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#execution-order

于 2013-05-03T10:59:05.103 回答
4

您可以使用标记

将测试标记为foobar,以便您可以单独运行每个测试:

pybot -i foo tests

或者

pybot -i bar tests

并决定顺序

pybot -i bar tests || pybot -i foo tests

或在脚本中。

缺点是您必须为每个测试运行设置。

于 2013-05-02T16:53:56.860 回答
1

这样的东西会有用吗?

pybot tests/test1.txt tests/test2.txt

所以,要反转:

pybot tests/test2.txt tests/test1.txt
于 2013-05-01T18:33:43.183 回答
0

我成功使用了监听器:

监听器.py

class Listener(object):
    ROBOT_LISTENER_API_VERSION = 3

    def __init__(self):
        self.priorities = ['foo', 'bar']

    def start_suite(self, data, suite):
        #data.suites is a list of <TestSuite> instances
        data.suites = self.rearrange(data.suites)

    def rearrange(self, suites=[]):
        #Do some sorting of suites based on self.priorities e.g. using bubblesort
        n = len(suites)
        if n > 1:
            for i in range(0, n):
                for j in range(0, n-i-1):
                    #Initialize the compared suites with lowest priority
                    priorityA = 0
                    priorityB = 0
                    #If suite[j] is prioritized, get the priority of it
                    if str(suites[j]) in self.priorities:
                        priorityA = len(self.priorities)-self.priorities.index(str(suites[j]))
                    #If suite[j+1] is prioritized, get the priority of it
                    if str(suites[j+1]) in self.priorities:
                        priorityB = len(self.priorities)-self.priorities.index(str(suites[j+1]))
                    #Compare and swap if suite[j] is of lower priority than suite[j+1]
                    if priorityA < priorityB:
                        suites[j], suites[j+1] = suites[j+1], suites[j]             
        return arr

假设 foo.robot 和 bar.robot 包含在名为“tests”的顶级套件中,您可以像这样运行它:

pybot --listener Listener.py tests/

这将即时重新安排儿童套房。您可以使用 prerunmodifier 预先修改它。

于 2019-11-01T13:47:07.400 回答