簡體   English   中英

如何在使用 Robot Framework 時打印可用標簽

[英]How to print available tags while using Robot Framework

如果我在 Robot Framework 中有一個大型測試套件並且有很多標簽,是否可以了解套件中可用的標簽名稱列表?

像 pybot --listtags 這樣的東西??

這對實際要運行測試的人很有用。

例如,在與新聞文章發布相關的場景中,測試用例可能被標記為“publish”、“published”或“publishing”。

測試人員不會隨意使用 RIDE。 因此他/她可能不知道確切的標簽名稱。

在這些情況下,我認為提取可用標簽進行顯示會很有用——無需運行任何測試。 然后他/她可以選擇使用所需的標簽運行測試

我搜索了機器人框架用戶指南,但沒有看到執行此操作的任何命令行選項。

機器人沒有提供任何信息來提供這些信息。 但是,編寫一個使用機器人解析器獲取所有標記信息的python腳本非常容易。 這是一個我覺得正確的快速破解(雖然我只是非常簡單地測試過):

from robot.parsing import TestData
import sys

def main(path):
    suite = TestData(parent=None, source=path)
    tags = get_tags(suite)
    print ", ".join(sorted(set(tags)))

def get_tags(suite):
    tags = []

    if suite.setting_table.force_tags:
        tags.extend(suite.setting_table.force_tags.value)

    if suite.setting_table.default_tags:
        tags.extend(suite.setting_table.default_tags.value)

    for testcase in suite.testcase_table.tests:
        if testcase.tags:
            tags.extend(testcase.tags.value)

    for child_suite in suite.children:
        tags.extend(get_tags(child_suite))

    return tags

if __name__ == "__main__":
    main(sys.argv[1])

請注意,這不會獲得Set Tags關鍵字創建的任何標記,也不會考慮刪除標記刪除的標記

將代碼保存到文件,例如get_tags.py,然后像這樣運行:

$ python /tmp/get_tags.py /tmp/tests/
a tag, another force tag, another tag, default tag, force tag, tag-1, tag-2

我使用了Robot Framework輸出文件監聽器來列出當前套件的所有標簽。

from lxml import etree as XML

"""Listener that prints the tags of the executed suite."""

ROBOT_LISTENER_API_VERSION = 3

tags_xpath = ".//tags/tag"

def output_file(path):
    root = XML.parse(path).getroot()
    tag_elements = root.xpath(tags_xpath)

    tags = set()

    for element in tag_elements:
        tags.add(element.text)

    print("\nExisting tags: " + str(tags) + "\n")

您可以使用此類偵聽器以及干運行模式來快速獲取套件的標簽數據。

robot --listener get_tags.py --dryrun ./tests

標簽將列在控制台日志的輸出文件部分。

==============================================================================

Existing tags: {'Tag1', 'a', 'Tag3.5', 'Feature1', 'b', 'Tag3', 'Feature2'}

Output:  D:\robot_framework\output.xml
Log:     D:\robot_framework\log.html
Report:  D:\robot_framework\report.html

在機器人 3.2 中,API 有所不同,以下是我所做的:

from robot.api import get_model
import ast
def _check_tags(self, file):
    class TestTagPrint(ast.NodeVisitor):
        def visit_File(self, node):
            print(f"{node.source}")
            # to get suite level force tags
            for section in node.sections:
                for sect in section.body:
                    try:
                        if sect.type == 'FORCE_TAGS':
                            print(sect.values)
                    except AttributeError as ae:
                        pass
                    self.generic_visit(node)
    
        def visit_TestCase(self, node):
            for statement in node.body:
            # to get tags at test case level
               if statement.type == "TAGS":
                    print(statement.values)
    
model = get_model(file)
printer = TestTagPrint()
printer.visit(model)

兩個打印語句都會返回元組。
在這個 API 中可能有更簡單或更好的方法。
我看到 API 對於機器人框架 4 是不同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM