PylonsでNoseを使用して単一のテストを実行する方法


152

test / functionalディレクトリにたくさんのテストを含むPylons 1.0アプリがあります。奇妙なテスト結果が出ました。ただ1つのテストを実行したいのですが。ノーズのドキュメントには、コマンドラインでテスト名を渡すことができるはずですが、何をしてもImportErrorsが表示されます

例えば:

nosetests -x -s sometestname

与える:

Traceback (most recent call last):
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
   module = resolve_name(addr.module)
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
   module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname

私は同じエラーを受け取ります

nosetests -x -s appname.tests.functional.testcontroller

正しい構文は何ですか?

回答:


233

nosetests appname.tests.functional.test_controller 動作するはずですが、ファイルには名前が付けられています test_controller.pyです。

特定のテストクラスとメソッドを実行するには、フォームのパスを使用しますmodule.path:ClassNameInFile.method_name。つまり、モジュール/ファイルのパスとファイル内のオブジェクトをコロンで区切ります。module.pathファイルへの相対パスです(例:)tests/my_tests.py:ClassNameInFile.method_name


1
ああ、私が試さなかった1つの組み合わせ。ため息。ありがとう!
Ben

2
これにより、テストコントローラー/モジュールですべてのテストが実行されます。単一のテストメソッドの実行についてはどうですか?のようなものappname.tests.functional.test_controller.name_of_test_method
ryonlife 2011年

69
特定のテストクラスとメソッドを実行するには、フォームのパスを使用しますmodule.path:ClassNameInFile.method_name。つまり、モジュール/ファイルのパスとファイル内のオブジェクトをコロンで区切ります。
James Murty、2011

9
混乱している人のために:module.pathファイルへの相対パス(例my_tests.py:ClassNameInFile.method_nameimport
:)

1
@bcoughlan私はこれを答えに追加しました!これは本当に混乱しました。
シュラマー2013

47

Nosetests 1.3.0を使用している私にとって、これらのバリアントは機能しています(ただし__init__.py、testsフォルダーにあることを確認してください)。

nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page

モジュール名とクラス名の間の単一のコロンに注意してください。


1
2番目のオプションをありがとう、bashオートコンプリートの助けを借りて、間違いなく最も便利なオプションです。
Peter Kilczuk 2014

パラメーター化されたテスト(@ parameterized.expandを使用するテスト)を呼び出すには、次の構文を使用する必要があることに注意してください:test_file.py:ClassNameInFile.MethodName_TestNumber、TestNumberは1、2、3、...パラメータ化されたテスト
luca

2

「.py」ファイル拡張子を追加する必要があります。つまり、

r'/path_to/my_file.py:' +  r'test_func_xy'

多分これは、ファイルにクラスがないためです。なしでは.py、鼻が不満を言っていました:

ファイル/ path_to / my_fileで呼び出し可能なtest_func_xyが見つかりません:ファイルはPythonモジュールではありません

そして、これは私が__init__.pyフォルダに持っていますが/path_to/


0

以前の回答に基づいて、この小さなスクリプトを書きました。

#!/usr/bin/env bash

# 
# Usage:
# 
#     ./noseTest <filename> <method_name>
# 
# e.g.:
# 
#     ./noseTest test/MainTest.py mergeAll
#     
# It is assumed that the file and the test class have the _same name_ 
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#

testFile="$1"
testMethod="$2"

testClass="$(basename "$testFile" .py)"

nosetests "$testFile:$testClass.test_$testMethod"

0

以下は私にとってはうまくいきました:

nosetests test_file.py:method_name

私のテストはクラスではないことに注意してください。テストメソッドは1つのファイルに含まれていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.