首页 > 解决方案 > Robot Framework API - 使用一个类获取测试套件/子套件结果和测试用例结果

问题描述

我有一个带有多个子套件的测试套件。每个子套件中有一个或多个测试用例。例如:

TestSuite
  Subsuite-1
    TestCase-1
    TestCase-2
  Subsuite-2
    TestCase-1
  Subsuite-3
    TestCase-1
    TestCase-2
    TestCase-3

到目前为止,我一直在将此代码与单独的类一起用于套件和测试用例结果:

from robot.api import ExecutionResult, ResultVisitor


class GetRfSuiteResults(ResultVisitor):
    suite_results = {}

    def visit_suite(self, suite):
        self.suite_results[suite.name] = suite.status


class GetRfTestResults(ResultVisitor):
    test_results = {}

    def visit_test(self, test):
        self.test_results[test.parent,test.name] = test.status

由于它们都继承相同ResultVisitor的内容,是否可以使用这样的一个类来获得结果?

from robot.api import ExecutionResult, ResultVisitor


class GetRfResults(ResultVisitor):
    suite_results = {}
    test_results = {}

    def visit_suite(self, suite):
        self.suite_results[suite.name] = suite.status

    def visit_test(self, test):
        self.test_results[test.parent,test.name] = test.status

我不知道如何visit_test在这个解决方案中访问。

标签: pythonrobotframework

解决方案


虽然它提到SuiteVisitor而不是ResultVisitor我会冒险猜测它的行为相同。从API 文档

扩展 SuiteVisitor 的访问者可以通过覆盖合适的 visit_x() 方法或通过从任何 start_x() 方法返回显式 False 来停止访问某个级别。

因此,如果您覆盖visit_suite它将停止访问那里。

如果您想要一个ResultVisitor同时获取套件和测试状态的工具,您可以尝试以下操作:

class MyResultVisitor(ResultVisitor):

    def __init__(self):
        self.suite_results = {}
        self.test_results = {}

    def visit_suite(self, suite):
        self.suite_results[suite.name] = suite.status
        for test in suite.tests:
            self.test_results[test.parent,test.name] = test.status
            
        for suite in suite.suites:
            self.visit_suite(suite)
            
        return False

仅访问顶层套件,您也可以递归访问所有子套件及其测试。


推荐阅读