工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

PyTestチュートリアル:インストール、テスト作成、実行でPythonテストに自信を

PyTestとは

PyTestは、Pythonプロジェクト(ユニットテスト、統合テスト、エンドツーエンドAPIチェックなど)に対して簡潔でスケーラブルなテストケースを記述できる強力なオープンソーステストフレームワークです。並列実行、フィクスチャ注入、パラメータ化、豊富なレポート機能を標準でサポートしています。

PyTestを選ぶ理由

PyTestのインストール

pipで最新安定版をインストール:

pip install pytest

インストール確認:

pytest --version

特定バージョンを固定する場合: pip install pytest==7.4.0。

はじめの一歩:基本テスト

プロジェクトディレクトリを作成し、test_sample1.pyというテストファイルを追加:

import pytest
def test_file1_method1():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"
    assert x == y, "Values should match"
def test_file1_method2():
    x = 5
    y = 6
    assert x + 1 == y, "Addition failed"

テストスイートを実行:

pytest

出力例:

==================== test session starts ====================
collected 2 items
test_sample1.py F. [100%]
=================================== FAILURES ===================================
...

アサーションの理解

PyTestのアサーションは標準Pythonのassert文と同様に振る舞います。失敗時、テストは実行を停止し、PyTestが正確な場所とメッセージを報告:

assert "hello" == "Hai", "Mismatched greeting"

テスト検出ルール

特定テストの実行

ディレクトリ内の全テスト実行:

pytest

単一ファイル実行:

pytest test_sample1.py

部分文字列でフィルタ:

pytest -k method1 -v

マーカーで実行:

pytest -m set1

並列実行

xdistプラグインをインストールし、4ワーカーで並列実行:

pip install pytest-xdist
pytest -n 4

フィクスチャの活用

再利用可能なセットアップロジックを一度定義し、テストに注入:

import pytest
@pytest.fixture
def supply_data():
    return [25, 35, 45]
def test_compare_with_first(supply_data):
    assert supply_data[0] == 25

フィクスチャコードをconftest.pyに配置すれば複数テストモジュールで共有可能。

パラメータ化テスト

単一テストを複数入力で実行:

import pytest
@pytest.mark.parametrize("a, b, expected", [(5, 5, 10), (3, 5, 8)])
def test_add(a, b, expected):
    assert a + b == expected

スキップと期待される失敗

マーカーを使って結果を汚さずにスキップや期待失敗を指定:

import pytest
@pytest.mark.skip(reason="Feature not yet available")
def test_future_feature():
    pass
@pytest.mark.xfail(reason="Known bug")
def test_known_issue():
    assert 1 == 2

XMLレポート生成

CIパイプライン用のJUnit互換XMLファイル生成:

pytest -v --junitxml=result.xml

実践例:公開APIのテスト

以下はhttps://reqres.in/をテストする最小フレームワーク:

# conftest.py
import pytest
@pytest.fixture
def base_url():
    return "https://reqres.in/api"
# test_list_user.py
import requests, json
import pytest
@pytest.mark.parametrize("user_id, first_name", [(1, "George"), (2, "Janet")])
def test_valid_user(base_url, user_id, first_name):
    resp = requests.get(f"{base_url}/users/{user_id}")
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["data"]["id"] == user_id
    assert data["data"]["first_name"] == first_name
def test_invalid_user(base_url):
    resp = requests.get(f"{base_url}/users/50")
    assert resp.status_code == 404
# test_login_user.py
import requests, json
import pytest
def test_login_success(base_url):
    payload = {"email": "test@test.com", "password": "something"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["token"] == "QpwL5tke4Pnpja7X"
def test_login_missing_password(base_url):
    payload = {"email": "test@test.com"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 400
    assert data["error"] == "Missing password"

結論

このチュートリアルでは、PyTestのインストール、明確なテスト作成、フィクスチャとマーカーの活用、並列実行、XMLレポート生成、シンプルなAPIテストスイート構築をカバーしました。これらの基礎があれば、Pythonテストプラクティスを自信を持ってスケールできます。

Python

  1. メンテナンス バックログの解説:解決のための戦略
  2. 真空管テスター完全ガイド:選び方・種類・精度・メンテナンス
  3. ネットワークセキュリティキーを見つけて保護する:Wi-Fiを守る簡単な手順
  4. Wi-Fi通話完全解説:仕組みとメリット、なぜ重要か
  5. 6G徹底解説:超高速接続を実現する次世代通信技術の全貌
  6. 部分放電試験の理解:高圧機器を守る
  7. ポンプキャビテーションを防ぐ:原因、症状、回避方法
  8. 銅ブレージング完全解説:強力で信頼性の高い接続のための技術とヒント
  9. ドックレベラー設置のエキスパートガイド:最大効率を実現する手順
  10. Google CloudへのWordPressインストール:ステップバイステップガイド
  11. Coded UI Test自動化フレームワーク:初心者向け包括ガイド