2017-05-26 8 views
2

Robot Frameworkのテストケースの結果を実行し、その結果を他のツール(ElasticSearch、ALMツールなど)にインポートしたいと考えています。Robot Frameworkでテスト結果1行を取得するにはどうすればよいですか?

私はテストごとに1行のテキストファイルを生成できるようにしたいと思います。ここでは、区切られたラインパイプの例を示します。

testcase name | time run | duration | status 

追加するフィールドは他にもありますが、基本的なものです。どんな助けもありがたい。私はrobot.result http://robot-framework.readthedocs.io/en/3.0.2/autodoc/robot.result.htmlを見ていますが、まだそれを理解していません。もし私が答えるなら、私はここに回答を掲示するでしょう。

ありがとう、

答えて

4

output.xmlファイルは、通常のXML解析ライブラリと非常に簡単に解析できます。

from __future__ import print_function 
import xml.etree.ElementTree as ET 
from datetime import datetime 

def get_robot_results(filepath): 

    results = [] 
    with open(filepath, "r") as f: 
     xml = ET.parse(f) 
     root = xml.getroot() 
     if root.tag != "robot": 
      raise Exception("expect root tag 'robot', got '%s'" % root.tag) 

    for suite_node in root.findall("suite"): 
     for test_node in suite_node.findall("test"): 
      status_node = test_node.find("status") 

      name = test_node.attrib["name"] 
      status = status_node.attrib["status"] 
      start = status_node.attrib["starttime"] 
      end = status_node.attrib["endtime"] 
      start_time = datetime.strptime(start, '%Y%m%d %H:%M:%S.%f') 
      end_time = datetime.strptime(end, '%Y%m%d %H:%M:%S.%f') 
      elapsed = str(end_time-start_time) 

      results.append([name, start, elapsed, status]) 

    return results 


if __name__ == "__main__": 
    results = get_robot_results("output.xml") 
    for row in results: 
     print(" | ".join(row)) 
4

ブライアンはそれが標準のXML解析モジュールを使用してロボットののOutput.xmlを解析するのは簡単だということです右:

は、ここでは簡単な例です。上記で使用するAPIの詳細については

from robot.api import ExecutionResult, SuiteVisitor 


class PrintTestInfo(SuiteVisitor): 

    def visit_test(self, test): 
     print('{} | {} | {} | {}'.format(test.name, test.starttime, 
             test.elapsedtime, test.status)) 


result = ExecutionResult('output.xml') 
result.suite.visit(PrintTestInfo()) 

http://robot-framework.readthedocs.io/を参照してください。別の方法としては、ロボット自身の結果解析モジュールと、あなたがそれから得るモデルを使用することができます。

+0

XMLパーサーほどシンプルではありません(あなたがrobot.apiの使い方を知らない場合に限る)。しかし、このコードがどれほど洗練されていれば、複合体の右側で簡単です。また、はるかに簡単に拡張することができます。 – MrSteve

関連する問題