タグ

pythonとtestingに関するsh19910711のブックマーク (128)

  • 構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog

    こんにちは。 Nintendo Switch 2 の抽選予選に無事コマを進め続けている、SREチームの高 (@nogtk) です。早く当選してこの大会からドロップアウトしたいものです。 今回は、構造化ログのユニットテストを書いたときのプチハマりと、それを解決した方法についてご紹介したいと思います。 なぜログのテストコードを書いたか 前回のブログで、Django アプリケーションが出力するログを構造化したお話をご紹介致しました。 nealle-dev.hatenablog.com ログを構造化するにあたって、出力されるログのエントリを定義しそれに沿ってログが出力されるような実装を追加しています。その中には Datadog APM への連携するためのトレース・スパン情報の付加したり、structlog の contextvars というモジュールを使ってコンテキストをログエントリに含めたりなど

    構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog
    sh19910711
    sh19910711 2025/06/20
    "ログ出力がデグレを起こしていることを人間が発見するのは非常に難しい / 人間の目はJSONを良い感じにパースしてくれませんし、各エントリの差分やメッセージフォーマットの変化に気づくのは容易ではありません"
  • hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog

    技術部 R&D研究員の前嶋です。梅雨の季節ですが、少しでも快適に過ごせるようにOnのCloud 5 wpを購入しました。水に強くて軽快な履き心地で最高ですね。(追記:この記事の公開作業をしている間に梅雨が終わってしまいました) 今回は、データフレームのテストについての記事です。 データフレームのテストをどう書くか データが中心となるサービスのネックになるのが テストをどう書くか です。というのも、データフレームは行×列の構造になっているため、入力あるいは出力値がデータフレームになるような関数が多いプログラムでは、テストケースを書くのが非常に面倒です。仕様の変更があった場合、それぞれのテスト用の疑似データに修正を加えることを考えると、より簡潔にデータフレームのバリデーションをする方法が欲しいところです。実は、データフレームのテストはProperty Based Testingという考え方と

    hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog
    sh19910711
    sh19910711 2025/06/11
    2022 / "データフレームのテスト / Property Based Testing(PBT) は、Haskellの QuickCheck で導入された概念だと言われ / 契約による設計(Design by Contract, DbC)を実現するテスト手法として、名著『達人プログラマー』でも推奨"
  • click を使ったエラーケースのテスト方法 - Tak's Notebook

    背景 実装 コード テスト方法 まとめ 背景 コマンドラインインターフェイスの click のテスト方法についてのメモ 実装 コード 以下のコードをテストしたい場合を考える。 # src/main.py import click @click.group() def cli(): pass @cli.command() @click.option("--name", type=str, required=True, help="The person to greet.") def hello(name): if name == "Bob": raise ValueError("Sorry, Bob is not allowed.") click.echo(f"Hello {name}!") @cli.command() @click.option("--name", type=str, r

    click を使ったエラーケースのテスト方法 - Tak's Notebook
    sh19910711
    sh19910711 2024/10/13
    "click: テストでは click.testing.CliRunner を使用 / 異常系のテストでは CliRunner.invoke の返り値の Result.exit_code と Result.exception を利用"
  • pytest プラグインを開発して DRY に自動テストを書こう

    sh19910711
    sh19910711 2024/10/06
    "hook関数: pytestの様々なイベントに対して特定の処理を実行できる / cookiecutter-pytest-pluginなどを参考 / pytest11というエントリポイントを探してプラグインを発見する"
  • pythonのunittest.Testcaseでmockする・patchする - エイエイレトリック

    テストコードで活躍する mock。 だが毎回 これってどこをmockすればいいんだ…… と必要以上に mock.patch を書いてしまいます。 python の公式ドキュメントや解説記事では、mock 単体の振る舞いについて紹介していることが多く、最初の頃は でも実際どう組み込めばいいの? と悩むことが多かったです。 そんなわけで、実装した python のクラスに対して unittest.Testcase のテストコードで mock を使ってみて、仕様を確認してみます。 実行環境 macOS 12.4 (Monterey) python3.8 テストするクラス テストで mock が必要になるのは、個人的には大きく 2 つあるかなと個人的に思っています。 外部にアクセスする e.g. requests, boto3, データベース テストケース を考えるのが面倒 が複雑 e.g. クラ

    pythonのunittest.Testcaseでmockする・patchする - エイエイレトリック
    sh19910711
    sh19910711 2024/06/21
    "公式ドキュメントや解説記事では、mock 単体の振る舞いについて紹介していることが多く + 実際どう組み込めばいいのと悩む / まずは テストケースを考えるのが面倒なのでmockしてしまおう と思えるクラスを作り" 2022
  • 既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita

    はじめに この記事は 2020 年の RevComm アドベントカレンダー 18 日目の記事です。 17 日目は @enotesupa さんの 「SOQLでSELECT * FROM SOME-TABLEっぽいことする」 でした。 @zomaphone と申します。普段は NLP 系を仕事を主にしておりますが、音声認識周辺の整備とかもしています。 今回は既存のシステムに対して pytest-mock と pydantic を活用してどのようにして短時間で総合テストのテストコード作成したかについて紹介します。 コードが修正しにくい、テストコード書く時間がないという人にとっては意味のある記事かもしれません。 やりたかったこと revcomm で開発している解析システムは音声データを入力し、他のシステムと通信をしながら処理をし、最後に解析結果を POST (送信) するというような構成となってお

    既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-mock で POST する関数をモックし、pydantic で 渡されたデータが正しい形になっているかを確認 / pytest-mock: unittest.mock の薄いラッパーで、既存ライブラリや関数等をモック" 2020
  • APIドキュメントから生成したFastApiスタブをPysenに怒られないようにするまで - Qiita

    以前はFlaskを使ってゆるい型もないゆるゆるフワフワしたAPIを作って居たものです。 しかしながら、最近は型の概念がいかに素晴らしいかというのをTypeScriptやらGolangやらで体感したので、たとえPythonであっても、しっかりした型でいい感じのコードを書きたくなりました。 開発環境 Poetry+Pysen これが今どきの最新っぽい雰囲気でおすすめされてたので使います openapi-generator-cli 別に何で生成してもいいと思いますが、以前から何度か使っていて慣れているので使う Stoplight 初めからStoplight使って居るので、無いとやってられない、もはや手書きでは書けない 1 ドキュメントを作る Stoplightでガリガリ書きます 2 Python-templeteを使い PysenとPoetry入ったプロジェクトを生成 で作ったあと、git cl

    APIドキュメントから生成したFastApiスタブをPysenに怒られないようにするまで - Qiita
    sh19910711
    sh19910711 2024/06/17
    "最近は型の概念がいかに素晴らしいかというのをTypeScriptやらGolangやらで体感したので、たとえPythonであっても、しっかりした型でいい感じのコードを書きたく / Poetry+Pysen: 今どきの最新っぽい雰囲気でおすすめされ" 2022
  • Python 3 + Falcon を使った RESTful API の開発/テスト/デバッグ - Qiita

    はじめに 単純な Web API を用意する必要があり、Falcon という若干マイナーな WSGI フレームワークを使ってみました。Falcon の公式サイトのサンプルやドキュメントの情報は十分なので、インストールしてすぐに使い始めるのはとても簡単です。しかし、細かいところで追加情報が必要だと感じることが多かったので、この記事で補いたいと思います。 Falcon - The minimalist Python WSGI framework https://falconframework.org/ 公式情報を日語訳するだけのことは避けたいので、インストール方法や使い方を日語で読みたいという方は、Qiita にある他の記事が参考になると思います。既に Falcon タグが作られています。この記事が記念すべき 10 件目。 Falconに関する9件の投稿 - Qiita http://qi

    Python 3 + Falcon を使った RESTful API の開発/テスト/デバッグ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "単純な Web API を用意する必要があり、Falcon という若干マイナーな WSGI フレームワークを使ってみました / 公式ドキュメントもシンプル: 記述が簡潔過ぎて知りたい情報が書かれていなかったり" 2017
  • pytestでテストケースの前後処理をする - Qiita

    セットアップコードのモジュールはconftest.pyという名前にしないとpytestが拾ってくれません。 テストケースのモジュールはtest_*.pyのような名前にしないと、同じくpytestが拾ってくれません。 モジュールに限らず、testと接頭辞をつける系の小ネタはpythonテスト界隈の全般的なお作法なようですね(Javaのspock時は割とフリーダムな名前をつけていたことを思い出しながら)。 さて、以上踏まえて、個別のモジュールを見ていきたいと思います。 コーディング はい、ドーン!といきたいところですが、実はやり方は2つあるようです。 yield命令を使う addfinalizer命令を使う ですが、今回はとてもシンプルなyield命令を使うことにします。 先ほどの目的順に見ていきましょう。 前後処理などセットアップコードを共通化したい では、ドーン! import pytes

    pytestでテストケースの前後処理をする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "前後処理を記述したい時、pytestでは@pytest.fixture()というマーキング / その際にパラメータを指定することで、実行条件を変えることができ、がその中の一つにスコープがあります" 2017
  • pytestとマルチバイト文字問題のTips - Qiita

    #!/usr/bin/python # -*- coding: utf-8 -*- def test_1(): a = "あああ" b = "あああ" assert a == b def test_2(): a = "あああ" b = "いいい" assert a == b def test_3(): a = u"あああ" b = u"いいい" assert a == b $ pytest test_app.py ======================================= test session starts ======================================== platform cygwin -- Python 2.7.14, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 rootdir: /cygdrive/

    pytestとマルチバイト文字問題のTips - Qiita
    sh19910711
    sh19910711 2024/06/17
    "conftest.pyとマルチバイトでハマった / これら一連の話はPython2だから気を遣うのであって、文字列がデフォルトでUnicode扱いになるPython3ではそれほど問題にならない" 2018
  • pytestでSparkアプリケーションのテストを書いてみる - Qiita

    Sparkで動くアプリケーションをPythonで書いたので、pytestでテストしたい! 大規模データでもテストしたいので、YARNクラスタにも投げたい! ある意味 pytestに入門してみたメモ の続編です。 pytestプラグインとかあるみたいですが 今回は手の内が分かったうえで自分でいろいろやりたかったので、前回の復習も兼ねて自前で作ってみることにします。 spark-submitコマンドを使わずにSparkにアクセス Spark向けに書いたスクリプトを実行する時、普通はspark-submitコマンドを使うと思いますが、今回はpytest経由で実行したいので、spark-submitを使わずに普通のPythonからpysparkモジュールを呼びたいわけです。 そのためには、来spark-submitがやっている諸々の設定を自分でやればいいはず。spark-submitの処理を追い

    pytestでSparkアプリケーションのテストを書いてみる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "大規模データでもテストしたいので、YARNクラスタにも投げたい / spark_session: conftest.pyに移して、scope="session"と変更すれば、複数のスクリプトを回すときでも全体で1回だけ初期化することになるはず" 2018
  • pytestのfixture、基本のき - Qiita

    概要 『テスト駆動Python』を読んでpytestのfixtureの機能を理解したので、基的な考え方と使い方をまとめる。 私はfixtureについてドキュメントを読んでもよくわからず使っていなかったので、同じような人の参考になればうれしい。 fixtureとは 次の説明が簡潔でわかりやすい。 フィクスチャは、実際のテスト関数の実行に先立って(またはその前後に)、pytestによって実行される関数です。(『テスト駆動Python』P.59) つまり、テストデータの用意や、テスト前後に行いたいデータベースのセットアップと後始末などに使える。 サンプル Python3.7.0とpytest3.8.2で実行した。 fixtureでテストデータを用意 import pytest # fixtureであることを示すデコレータ @pytest.fixture() def my_fixture_1()

    pytestのfixture、基本のき - Qiita
    sh19910711
    sh19910711 2024/06/17
    "『テスト駆動Python』を読んでpytestのfixtureの機能を理解した / テストデータの用意や、テスト前後に行いたいデータベースのセットアップと後始末などに使える / データベースのセットアップはsessionで良さそう" 2018
  • pytestの使い方と便利な機能 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pytestの使い方と便利な機能 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "unittestなど他のフレームワークと比較して、テストに失敗した原因が分かりやすい / 例外が発生することが期待される場合にはpytest.raises / テスト関数は引数として名前を指定することでfixtureオブジェクトを受け取る" 2018
  • pythonでpytestでtestを書き始めてみた時のメモ - Qiita

    はじめに 学生と社会人の最も大きな違いはテストを知っているかどうかとREADMEをしっかり書けるか,パッケージを作れるか (たくさんあります) なのではないかと自分なりに考えてみたので(もちろんコーディング力等の差もありますが...計算時間気にするとか) まず,テストについていろいろ調べてその時のメモです 二番煎じどころの騒ぎじゃないですが,同じところに詰まっている人がいれば testとは そもそもtestってなに?って話です 自分が書いたプログラムがあっているか確認するものらしいですが, 調べた感じ 自分の書いたものの入力と出力が明確に意識できるようになる この部分間違っていないと言い切れる(研究成果が出ないときとかにつよい) 大きい機能を持たせすぎに分割して小さく設計できるようになる この3つが大きいかなと 社会人は利益をあげたりしないといけない気がするので時間に必ず終わりがありますが

    pythonでpytestでtestを書き始めてみた時のメモ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "自分の書いたものの入力と出力が明確に意識できる / この部分間違っていないと言い切れる(研究成果が出ないときとかにつよい) / 大きい機能を持たせすぎに分割して小さく設計できるようになる" 2018
  • Pythonのpytest-watchモジュールでテスト駆動開発が捗った - Qiita

    概要 Pythonのテストツールの定番のpytestですが、watch オプションがないので、実装するたび、コマンドをせっせと実行する必要があって面倒だったので、調べてみたら、pytest-watchという素敵ツールがありました。 pytest: helps you write better programs https://docs.pytest.org/en/latest/ pytest-watch -- Continuous pytest runner https://github.com/joeyespo/pytest-watch pytest-watch a zero-config CLI tool that runs pytest, and re-runs it when a file in your project changes. It beeps on failures

    Pythonのpytest-watchモジュールでテスト駆動開発が捗った - Qiita
    sh19910711
    sh19910711 2024/06/17
    "定番のpytestですが、watch オプションがないので、実装するたび、コマンドをせっせと実行する必要があって面倒 / テストに失敗するとビープ音を鳴らしたり、テスト後にコマンド実行もできたり" 2018
  • pytestとpytest-mockでPythonのユニットテストを始めよう - Qiita

    LIFULL Advent Calendar 1日目の記事です。今年もよろしくお願いします。 世間一般の流れと同じく、株式会社LIFULLでも機械学習サービスを中心にPythonを採用することが多くなってきました。ただ、どうしても「リリースしてみないとそもそも機械学習モデルが妥当なのか分からない」ため、当に最低限のテストだけで運用を始めることも多く、そのせいで分析寄りのメンバーに必要以上に属人化して負担をかけてしまっているように思います。 今回は後輩や同僚のエンジニア or データサイエンティスト向けに、「pytestを使ってメンテナンス性よくPythonを使ってこうぜ!」って布教するための記事です。 今回の記事に使ったライブラリのバージョンはこちらです。もしバージョンが違う場合、挙動が違う場合があるので必要に応じて調べてください。 $ python -V Python 3.6.5 $

    pytestとpytest-mockでPythonのユニットテストを始めよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest: Rspec等と比べると、そのままPythonのコードとして自然に読めます / 条件分岐を入り組んだ関数やメソッドに対して、ディシジョンテーブルなどを使ってテストコードを書くだけでも意外と仕様漏れが見つかったり" 2018
  • Poetryとtoxを組み合わせてPythonのテストコードを動かす - Qiita

    この記事はLIFULL Advent Calendar その3の遅れてきた16日目の記事です。 今までPythonの開発にPipenvを使っていたのですが、こちらの記事「Poetryを使ったPythonパッケージ開発からPyPI公開まで」読んで、Poetryというツールが気になっていました。 Poetryの便利なところは、パッケージをビルドした際にこの設定がそのまま setup.py の console_scripts として記述される。ビルドする時にコマンドとして実行できるようにあらためてsetup.pyを書く必要がない。 そのテストも兼ねて、社内用のPythonライブラリをPipenvからPoetryに移行してみました。また、Rustを少し触っていて遊んでいた(コンパイルが通らずに泣いていた)ときに、開発ツールのcargoが洗練されていて羨ましかったのですが、それに使い勝手が近そうな印

    Poetryとtoxを組み合わせてPythonのテストコードを動かす - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Rustを少し触っていて遊んでいた(コンパイルが通らずに泣いていた)ときに、開発ツールのcargoが洗練されていて羨ましかった / toxを通常実行すると、その都度setup.pyを読み込んでインストールする" 2018
  • コードを1行も書かずにpytestを実行する - Qiita

    pytest-playとは コードを書かずにテストできる テストコードは必要だけど作るのは大変ですよね。まるで確定申告のようです。 pytest-playはYAMLファイルを書くだけでテストを実行できるライブラリです。 コードを書く必要がないため、プログラマじゃない人にテストの委託もできそうです。 機能 下記のような機能があります。 実行時間の計測 JUnit XML report StatsD/graphiteを用いたテストメトリクスの監視 プラグイン play_selenium play_requests play_sql play_cassandra play_dynamodb play_websocket play_mqtt play_requestsやplay_seleniumを使うと、DjangoやFlaskなどのWebサーバのテストが行なえます。WebサーバはPython製で

    コードを1行も書かずにpytestを実行する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-playはYAMLファイルを書くだけでテストを実行できるライブラリ / play_requestsやplay_seleniumを使うと、DjangoやFlaskなどのWebサーバのテストが行なえます / Railsなどで作られたWebサーバでも構いません" 2019
  • pytest でモジュールコードとテストコードをディレクトリで分離して unittest を実行するには? - Qiita

    やりたいこと pytest を使って unittest を実行したい プロダクトコードとテストコードはディレクトリで分けたい まさに参考リンクのイメージ 実行時は python -m pytest とかで勝手に test_XXX を discover して実行してほしい 上手くいかないこと 参考リンクの通りで、class_module.py の imoprt class_BaseModule で ModuleNotFoundError になる テスト対象スクリプトから同ディレクトリ内の別モジュールを素でimportしていて、これが見つからない 解決法にある sys.path.append() って全テストコードの先頭に書くの?しかもモジュールコードまでの相対パスは自前で書かないといけないってそれマジ?ダサくない?(回答者の方ががダサいわけではない) 参考リンクの参考リンクにある 以下と心境

    pytest でモジュールコードとテストコードをディレクトリで分離して unittest を実行するには? - Qiita
    sh19910711
    sh19910711 2024/06/17
    "モジュールとしてきちんとディレクトリ分けてテストを管理したいなら、pytestにあるようなプラクティスに従おう / テストの準備が簡単にできるようなスケルトン生成ツールみたいなのはあってもいいんじゃないか" 2019
  • pytestで1ファイル/1テストだけ実行したい(他よく使うオプション) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pytestで1ファイル/1テストだけ実行したい(他よく使うオプション) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest実行時に便利なオプション / --lf: 最後にコケたテストだけ実行する / -x: テストが1つでもコケたらそこでテスト実行を止める / -vv: テストがコケた時に結果を詳細に表示する" 2019