2017-06-09 12 views
0

Robot Frameworkにまだ新機能 - クイック質問: Robot Frameworkを介して実行されるコマンドは、端末でエラーダンプを生成します。私はエラーを拾い、Robot Frameworkレポートのlog.html#s1-t1に入れたいと思います。ここでRobot Frameworkレポートへのスタッフ端末コマンドエラー

は私のPythonのコードです:ここでは

from test.testing import testcase 
from testers import * 

def run_testcase(): 
     main(module=testcase, action='simulate') 

は私のロボットFrameworkのコードです:

*** Settings *** 
Library    testing_testcase.py 


*** Test Cases *** 
Testing the testcase - (TC462) 
    Run testcase 

私が欲しいのは、端末内のコマンドによって生成されたエラーをキャプチャする方法についていくつかの助けでありますそれをRobot Frameworkレポートに埋め込みます。

これらはダンプです。レポートに取り込みたいと思います。このコマンドは、手動で実行されました:

Johns-MacBook-Pro:~ john.doe$ ~/models/.venv/bin/python /Users/john.doe/models/cores/mumimo/pycores/mumimo/testing_testcase.py simulate 
Traceback (most recent call last): 
    File "/Users/john.doe/models/cores/mumimo/pycores/mumimo/testing_testcase.py", line 138, in <module> 
    main3() 
    File "/Users/john.doe/models/src/mymytask/mymytask.py", line 529, in main3 
    env = environment() 
    File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 125, in __call__ 
    self.srcline, *args, **kwargs) 
    File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 158, in __init__ 
    self.subs = _flatten(func(*args, **kwargs)) 
    File "/Users/john.doe/models/src/mymytask/mymytask.py", line 527, in environment 
    tb = args.testbench(ports, params) 
    File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 125, in __call__ 
    self.srcline, *args, **kwargs) 
    File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 158, in __init__ 
    self.subs = _flatten(func(*args, **kwargs)) 

答えて

1

キーワードが失敗し、あなたが実行中conosleでそれを見るわけ端末上で発生したエラーによって場合は、キーワードRun Keyword And Ignore Errorを使用する - それは2つの変数、ステータスを返します成功した場合の出力、失敗した場合のエラー/例外(必要な場合)のいずれかを指定します。

だからあなたのテストケースの本体は、次のようになります。

更新質問を見てみると
Testing the testcase - (TC462) 
    ${rc} ${msg} Run Keyword And Ignore Error Run testcase 
    Run Keyword If '${rc}' == 'FAIL' Log The error is: ${msg} 
       ... ELSE Log the keyword did not fail, its output is: ${msg} 

    Run Keyword If '${rc}' == 'FAIL' Fail Failing the case, the keyword failed 

、それあなたが特定の例外ではないだけを記録したい私にはだ - と起こることになります上記のコードだけでなく、完全なスタックトレースも必要です。

これがそうであれば、実行する必要のあるPythonコードに変更があります。関数の一部として取得して返す必要があります。

ちょうどそのためのPythonモジュール - tracebackがあります。具体的にはformat_execです。ここでそれを行うことができる方法のサンプルですが、少しあなたのニーズに応じて、それを形作る:

import traceback 
from test.testing import testcase 
from testers import * 

def run_testcase(): 
    try: 
     main(module=testcase, action='simulate') 
    except Exception as e: 
     tb = traceback.format_exc() 
     raise Exception(tb) 

ので キャッチされる任意の例外(つまり、幅の広いネットが、あなたはより具体的な何かにそれを変更したい場合があります)、スタックトレースは tbに文字列として格納され、その後RFがキャッチしてキーワードが失敗とマークされ、最初の部分のコードがそれを記録します。

+0

ありがとう@Todor - 非常に便利です。ただし、実行中のコンソールエラーは複数行であり、提供したコードはコンソールにダンプされたエラーメッセージ全体を記録しません。さらに、このテストではFAILとマークする必要がありますが、このテストではPASSとマークされます。 – pythonian

+0

キーワードが失敗した場合に失敗するには、 '$ {rc} '値に基づいて明示的に呼び出す必要があります。私はそれを答えに加えます。質問にコンソールに何を表示しているのか、そしてログに何を表示したいのですか? – Todor

+0

ログに記録したいものを追加しました。助けてくれてありがとうBTW。 – pythonian