RSpecでのテクニックをpytestで実行するための逆引きメモ
背景
副業のプロダクト開発で、pytestを使ってユニットテストを書いています。 それまでRubyのRSpecでしか書いたことがなく、他の言語・フレームワークでのテストの書き方について戸惑った箇所があったので、今回は自分と同じようにRSpecを書いていた人がpytestを書くときに役立つような話を書きたいと思います。

RSpec: Behaviour Driven Development for Ruby
pytest documentation
知っておいてよかったこと
普段はRSpecでの書き方に慣れているため、pytestでのテストの書き方に最初は戸惑っていましたが、いくつかpytestでもRSpecでよく使う機能と同じことができることがわかりましたので、よくつかうものを紹介します。
pytestでは-kオプションをつけることで、実行するテストを指定できる
まずはテストの実行時です。
RSpecでは、実行ファイルを指定した後に:を続けて実行する行数も指定することできます。
$ rspec spec/sample_spec.rb:12
pytestでは-kオプションをつけることで、実行するテストを指定することができます。
ただし、渡した文字列と完全一致ではなくて部分一致するテストが実行されるので、注意です。
$ pytest -k sample_test
とした場合にはsample_testを含むsample_test_1や sample_test_2という名前のテストが実行されます。
fixtureでテスト前にモックやダミーデータの準備ができる
RSpecではbefore句を使うことでテスト前に実行したい処理を記述できます。
before do
# テスト前に実行したい処理
end
relishapp.com/rspec/rspec-core/v/2-0/docs/hooks/before-an…
こちらはpytestではfixtureを使ってデータを用意したりします。
pytest fixtures: explicit, modular, scalable — pytest documentation
下記で使い方を書いたので、もしご興味があればこちらも読んでいただければと思います。
/blog/tech/クリーンアーキテクチャでの依存層をpytestのfixtureでモックすることで簡単にテストした
ダミーデータを用意するにはfactory_boyが使える
ダミーデータの用のために、自分はRSpecではfactorybotを用いて実現してきました。
FactoryBot.define do
factory :user do
name { 'name' }
end
end
GitHub - thoughtbot/factory_bot_rails: Factory Bot ♥ Rails
Factory Bot ♥ Rails. Contribute to thoughtbot/factory_bot_rails development by creating an account on GitHub.
これと同様のものを、pytestではfactoryboyを使って実現できます。
import factory
from app.models import User
class UserFactory():
class Meta:
model = User
name = 'name'
factory_boy — Factory Boy stable documentation
pdb.set_trace()でデバッガを呼び出せる
テストの途中でコンソールを使ってデバッグを行いたいときなどにはRailsだとbinding.pryなどを使います。
requre 'pry';binding.pry
pytestではどうするpdb.set_trace()を使うことができます。
import pdb
pdb.set_trace()
また、実行時に--pdbオプションをつけてテスト実行すると、テストが失敗した際に自動的にデバッガを起動してくれるので便利です。
$ pytest --pdb sample_test
参考

pytestでデバッグする際の個人的頻出オプション - Qiita
はじめに 個人的に頻繁に使うオプションの紹介です。 こちらで紹介しているのは最低限ですので気になった方はご自身で調べてみてください。 オプション 結果 -k 特定のテストケースを実行する -s printを出力する --pdb テスト失敗時にデバッグ...

Pythonデバッガ(pdb)とテスト(pytest)についてのメモ - c-bata web
はじめに 今までテストを書くどころかデバッガを使ったことがなかったのですが、id:Kesinさんの↓の記事を読んで、このままではマズイと思ったので勉強しました。 研究のプログラミングにおける悲劇を無くすためのGitとテスト デバッガ Pythonには標準でpdbというデバッガが付いてるらしい。 pdb — Python デバッガ Pythonのpdbモジュールでデバッグする こちらによると、 使い方はいろいろあるみたいだけど、とりあえず set_trace は便利なのですぐにでも使ってみるべき。pdb.set_trace() でデバッグ用の対話シェルが実行される。 とのこと。他のサイトでもプロ…
記事の更新をメールで受け取る
質問・リクエストを送る
記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。