トップレベルのPythonファイル/パッケージがたくさんあり、-cover-packageを使用してそれらすべてを手動で一覧表示するのは面倒なので、自分用に2つのエイリアスを作成しました。Aliasnosetests_cover
は、-cover-packageにリストされているすべてのトップレベルのPythonファイル/パッケージでカバレッジを実行します。Aliasnosetests_cover_sort
は同じことを行い、さらに結果をカバレッジ率で並べ替えます。
nosetests_cover_cmd="nosetests --with-coverage --cover-erase --cover-inclusive --cover-package=\$( ls | sed -r 's/[.]py$//' | fgrep -v '.' | paste -s -d ',' )"
alias nosetests_cover=$nosetests_cover_cmd
alias nosetests_cover_sort="$nosetests_cover_cmd 2>&1 | fgrep '%' | sort -nr -k 4"
ノート:
- これは私の.bashrcファイルからのものです。bashを使用しない場合は、適切に変更してください。
- これらは、最上位ディレクトリから実行する必要があります。そうしないと、パッケージ名が正しくなくなり、カバレッジはサイレントにそれらを処理できなくなります(つまり、-cover-packageが正しくないことを通知する代わりに、オプションをまったく指定しなかったように動作します)。
- 私は現在、Ubuntu13.10でPython2.7.6を使用しており、noseバージョン1.3.0とcoverageバージョン3.7.1を使用しています。これは、私がこれらのコマンドをテストした唯一のセットアップです。
- 使用法で、必要に応じて--cover-eraseと--cover-inclusiveを削除します。
- 逆順ではなく通常の順序で並べ替える場合は、sortコマンドで
-nr
に置き換えます。-n
- これらのコマンドは、すべてのトップレベルのPythonファイル/パッケージがドットなしで名前が付けられていることを前提としています(「.py」のドットを除く)。これが当てはまらない場合は、以下の「詳細」セクションを読んでコマンドの部分を理解してから、必要に応じてコマンドを変更してください。
詳細:
これらが私が望む結果を達成するための最も効率的なコマンドであるとは言いません。それらは私がたまたま思いついたコマンドです。= P
説明する主なことは、-cover-packageへの引数です。次のように、最上位のPythonファイル/パッケージ名のコンマ区切りリスト(ファイル名から「.py」を削除)を作成します。
\$
$
-二重引用符で囲まれた文字列で文字をエスケープします。
$( )
--内に含まれるコマンドの結果を挿入します。
ls
-現在のディレクトリ内のすべての名前を一覧表示します(最上位のPythonディレクトリである必要があります)。
| sed -r 's/[.]py$//'
-リストで、「foo_bar.py」を「foo_bar」に置き換えます。
| fgrep -v '.'
-リストで、ドットのないすべての名前を削除します(たとえば、foo_bar.pycとnotes.txtを削除します)。
| paste -s -d ','
-リストを改行区切りからカンマ区切りに変更します。
並べ替えについても説明する必要があります。
2>&1
--stderrとstdoutに参加します。
| fgrep '%'
-文字なしのすべての出力行を削除します%
。
| sort -nr -k 4
--残りの行を4番目の列(カバレッジ率の列)で番号の逆順に並べ替えます。逆順ではなく通常順が必要な場合は、に置き換え-nr
て-n
ください。
これが誰かに役立つことを願っています!=)