私は、自動システムテストのために「テストフレームワーク」を評価しています。これまで私はPythonフレームワークを探しています。 py.testやnoseでは、私はGoogleテストフレームワークから知っているEXPECTマクロのようなものを見ることができません。 最初の失敗時にテストを中止しないで、1回のテストで複数のアサーションを作成したいと思います。 これらのフレームワークで何か不足しているのですか?これは機能しませんか? 自動システムテストに使用できるpythonテストフレームワークの提案はありますか?致命的ではない障害をサポートするPythonテストフレームワーク
答えて
私は鼻を使って機能テストをしたいと思っていました。私は最終的にこれを思いつきました:
def raw_print(str, *args):
out_str = str % args
sys.stdout.write(out_str)
class DeferredAsserter(object):
def __init__(self):
self.broken = False
def assert_equal(self, expected, actual):
outstr = '%s == %s...' % (expected, actual)
raw_print(outstr)
try:
assert expected == actual
except AssertionError:
raw_print('FAILED\n\n')
self.broken = True
except Exception, e:
raw_print('ERROR\n')
traceback.print_exc()
self.broken = True
else:
raw_print('PASSED\n\n')
def invoke(self):
assert not self.broken
つまり、テストが合格したか失敗したかを示す文字列が出力されています。テストの終わりに、実際にのアサーションを実行するinvokeメソッドを呼び出します。確かに好ましくないですが、この種のテストに対応できるPythonのテストフレームワークは見ていません。この種のことをするために鼻のプラグインを書く方法を知りたかったわけでもありません。 :/
良いアイデア。 私たちは鼻を使うことにしたので、プラグインは素晴らしいでしょう。 – housemaister
ノーズは、コマンドラインで-x
オプションを渡すと、最初の失敗時にのみ中止されます。
test.py:-xオプションなし
def test1():
assert False
def test2():
assert False
:
C:\temp\py>C:\Python26\Scripts\nosetests.exe test.py FF ====================================================================== FAIL: test.test1 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 2, in test1 assert False AssertionError ====================================================================== FAIL: test.test2 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 5, in test2 assert False AssertionError ---------------------------------------------------------------------- Ran 2 tests in 0.031s FAILED (failures=2)
-xオプション付き:
C:\temp\py>C:\Python26\Scripts\nosetests.exe test.py -x F ====================================================================== FAIL: test.test1 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 2, in test1 assert False AssertionError ---------------------------------------------------------------------- Ran 1 test in 0.047s FAILED (failures=1)
あなたはthe nose documentationの見直しを検討する必要があります。
質問は、* one *テストでの複数のアサーションについてですが、複数のテストではなく、失敗する可能性があります。 –
提案がありましたので、robot frameworkを提案します。
何らかの理由で、私はキーワード駆動型テストフレームワークatmを使用できません。しかし、今後のプロジェクトでは、このことを念頭に置いていきます。ありがとう。 – housemaister
奇妙なことに、私のclaft
(コマンドラインとフィルタテスター)のようなものを探しているようです。それは似ているが、はるかに成熟している。
claft
は(これまでのところ)私がプログラミング演習で生徒を助けるために書いたおもちゃです。この考え方は、自動テストにも適している一方で、プログラムの要件を合理的に人間が読める(そしてプログラム的ではなく宣言的な)観点で表す簡単な構成ファイルを演習に提供することです。
claft
すべての定義済みのテストを実行し、引数と入力をそれぞれに提供し、戻りコードをチェックし、出力(stdout
)とエラーメッセージ(stderr
)を正規表現パターンと照合します。リスト内のすべての失敗を収集し、各スイートの終わりにリスト全体を表示します。
入力/出力シーケンスの任意のダイアログをまだ実行していません。これまでのところ、データをフィードしてすべてのデータ/エラーを読み取ります。また、タイムアウトも実装されておらず、実際には失敗した実行の試行もキャプチャされません。 (私はちょうどおもちゃだと言っていましたが、これまでのところ、私はしていませんでした)。私はまだセットアップ、ティアダウン、および外部チェックスクリプトのサポートを実装していません(私はそうする計画があります)。
「ロボットのフレームワーク」についてのブライアンの提案は、あなたのニーズに適しているかもしれません。それを見てみると、私の目的よりもはるかに関与していることが示唆されています。(私は、プログラミングに慣れていない生徒が自分のエクササイズに集中でき、テストハーネスを設定することで多くの時間を費やさずに済むように、物事をシンプルに保つ必要があります)。
claft
をご覧になるか、そこから独自のソリューション(BSDライセンス)を使用してください。明らかにあなたは歓迎して元気になれるでしょう。 (これは[bitbucket] :(http://www.bitbucket.org/)にありますので、Mercurialを使ってクローンを作成し、自分のリポジトリをフォークしてください...あなたの変更を自分のレポにマージすることを望むなら、 "pull request"
また、おそらく私はあなたの質問を誤解しています。
なぜ(unittest
で、これは任意の枠組みの中で動作するはずです):
class multiTests(MyTestCase):
def testMulti(self, tests):
tests(a == b)
tests(frobnicate())
...
機能が
testlist = []
x.testMulti(testlist.append)
assert all(testlist)
- 1. E_UNEXPECTED UWP致命的な障害
- 2. 致命的なシグナル11(SIGSEGV)、コード1、障害addr 0x9 in tid 31051
- 3. 致命的なシグナル11(SIGSEGV)、コード1、障害のADDR 0x18のTID 5091で
- 4. 致命的なエラー:キャッチされないにSoapFault例外:[石鹸:サーバー]は障害が
- 5. 一時的な障害
- 6. 致命的なPythonエラー:Py_Initialize()
- 7. 致命的なエラーのpython
- 8. phpでは致命的ではなく致命的ではないエラー?
- 9. WCFの障害 - どのような障害ですか?
- 10. Pythonで致命的でないエラーをキャッチする方法
- 11. 一時的な障害[errnoに-3]ドッカー
- 12. 一般的な障害建物ブートストラップ
- 13. WCFコールバックのタイムアウトとVisual Studioの致命的な故障
- 14. 致命的な信号7(SIGBUS)、コード2、故障ADDR 0x8e020c98
- 15. 潜在的な障害に対応する良い方法
- 16. 致命的なPythonエラー:PyEval_RestoreThread:NULL tstate
- 17. QuantLib 1.9 Build Pythonの致命的なエラー
- 18. PHP致命的なエラー:Forループでサポートされていないオペランドタイプ
- 19. CALayerの障害?
- 20. jqGrid 4.3.2障害
- 21. Segementation障害(コアダンプ)
- 22. 列障害()
- 23. SOAP障害コードリスト
- 24. QT:ユニットテストセグメンテーション障害
- 25. アブロスキーマ障害
- 26. ブール障害
- 27. BACKBONE.JSルーティング障害
- 28. チェックサム障害
- 29. JVM障害 - フェールオーバー
- 30. IRQハンドラトリプル障害
に包まれているように、あなたの実装MyTestCaseを想定しては、私の答えにあなたのコメントを見ました。私は正確に何をしようとしているのか分かりません。「最初の失敗時にテストを中断せずに、あるテストでいくつかのアサーションをしたいと思います」と答えました。私はちょうど骨格のアプローチを与えた、明らかにあなたが例外ハンドラにしたい場合は、リスト内のすべての例外情報をキャプチャすることができます。私は自分の答えを更新しました。 –
答えはどこにありますか? 削除しましたか?また、(複数のユーザーから、私が正しくリコールしたときの)コメントも表示されますか? – housemaister