ホームページ  >  記事  >  バックエンド開発  >  Pytest を使用してタスクを自動化する: 例を含む実用的なガイド

Pytest を使用してタスクを自動化する: 例を含む実用的なガイド

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-08 12:10:03222ブラウズ

Automate your tasks Using Pytest: A practical guide with examples

自動化は、最新のソフトウェア開発とテストの重要な部分です。時間を節約し、手動エラーを減らし、プロセス間の一貫性を確保します。 Pytest フレームワークは、Python のタスク、特にテストを自動化するための最も人気があり強力なツールの 1 つです。軽量で使いやすく、自動化プロセスを簡素化する多数のプラグインと組み込み機能を提供します。

この記事では、Pytest フレームワークを使用してタスクを自動化する最良の方法を検討します。 3 つの実践的な例を見て、Pytest がさまざまな種類のタスクを効果的に自動化する方法を示します。

Pytest を使用する理由
例に入る前に、Pytest がタスク自動化に最適な選択肢である理由を説明しましょう:

シンプルさ: Pytest の構文はシンプルで簡潔なので、テスト ケースの作成と読み取りが簡単です。
拡張性: 幅広いプラグインとフックを使用して、Pytest を拡張してさまざまなテストのニーズをサポートできます。
フィクスチャ: Pytest は、テストの前提条件や状態を設定し、再利用性を高めるための強力な機能であるフィクスチャを提供します。
統合: Pytest は CI/CD プラットフォームを含む他のツールとうまく統合し、エンドツーエンドの自動化を可能にします。

例 1: Pytest を使用した API テストの自動化
API は多くのアプリケーションのバックボーンであり、その信頼性を確保することが重要です。 Pytest とリクエスト ライブラリを使用すると、API テストを簡単に自動化できます。

ステップ 1: 必要なライブラリをインストールする
まず、Pytest とリクエスト ライブラリがインストールされていることを確認します。

pip install pytest リクエスト
ステップ 2: テスト スクリプトを作成する
テスト用の偽のオンライン REST API である JSONPlaceholder などのパブリック API への単純な GET リクエストを自動化してみましょう。

`インポートリクエスト
pytest をインポート

ベース URL を定義する

BASE_URL = "https://jsonplaceholder.typicode.com"

@pytest.fixture
def api_client():
# このフィクスチャは、API リクエストを行うためのセッション オブジェクトを提供します
セッション = request.Session()
イールドセッション
session.close()

def test_get_posts(api_client):
# GET リクエストを送信して投稿を取得します
応答 = api_client.get(f"{BASE_URL}/posts")
# アサーション
アサートresponse.status_code == 200
アサート len(response.json()) > 0、「投稿が見つかりませんでした」`

説明:
フィクスチャ (api_client): このフィクスチャは、HTTP リクエストを行うための再利用可能なセッションをセットアップし、毎回新しいセッションを作成する必要をなくします。
テスト関数 (test_get_posts): この関数は GET リクエストを /posts エンドポイントに送信し、次のことを検証します。
ステータス コードは 200 で、成功を示します。
応答には少なくとも 1 つの投稿が含まれています。
ステップ 3: テストを実行する
テストを実行するには、次のコマンドを実行します:

バッシュ
コードをコピー
pytest -v test_api.py
これが機能する理由
テストは簡潔で再利用可能で、Pytest のフィクスチャを利用してセットアップと破棄を処理します。
Pytest の出力には、どのテストが成功したか失敗したかが表示されるため、API の信頼性を長期にわたって簡単に追跡できます。

例 2: Pytest と Selenium を使用した Web UI テストの自動化
Web UI テストは、アプリケーションのフロントエンドが期待どおりに動作することを確認します。 Pytest を Selenium と組み合わせて、これらのタスクを効率的に自動化できます。

ステップ 1: 必要なライブラリをインストールする
Pytest、Selenium、WebDriver Manager をインストールします:

pip install pytest Selenium webdriver-manager
ステップ 2: テスト スクリプトを作成する
Google の検索機能を検証する簡単な Web UI テストを自動化する方法は次のとおりです。

`pytest をインポート
Selenium インポート Web ドライバーから
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
webdriver_manager.chrome から ChromeDriverManager をインポート

@pytest.fixture
def ブラウザ():
# Chrome WebDriver をセットアップします
driver = webdriver.Chrome(ChromeDriverManager().install())
イールドドライバー
driver.quit()

def test_google_search(ブラウザ):
# Google に移動します
browser.get("https://www.google.com")`{% endraw %}

# Find the search box and enter a query
search_box = browser.find_element(By.NAME, "q")
search_box.send_keys("Pytest Automation")
search_box.send_keys(Keys.RETURN)

# Assert that results are shown
results = browser.find_elements(By.CSS_SELECTOR, "div.g")
assert len(results) > 0, "No search results found"

説明:
フィクスチャ (ブラウザ): このフィクスチャは、webdriver-manager を使用して Chrome WebDriver インスタンスを設定し、各テスト後に適切に閉じられるようにします。
テスト関数 (test_google_search): この関数:
Google のホームページを開きます。
「Pytest Automation」を検索します。
検索によって少なくとも 1 つの結果が返されることをアサートします。
ステップ 3: テストを実行する
次のコマンドを使用してテストを実行します:

{% raw %}pytest -v test_ui.py
Why This Works
Pytest’s fixture manages the browser instance, making the test setup and teardown clean and efficient.
Using Selenium, the script interacts with the web page like a real user, ensuring the UI functions as expected.
Example 3: Automating Data Validation with Pytest and Pandas
Data validation is crucial in data engineering, analytics, and ETL processes. Pytest can automate data validation tasks using the pandas library.

Step 1: Install Required Libraries
Ensure that Pytest and Pandas are installed:

pip install pytest pandas
Step 2: Write the Test Script
Let’s automate a task where we validate that a dataset meets certain conditions (e.g., no null values, correct data types, etc.).

`import pytest
import pandas as pd

@pytest.fixture
def sample_data():
# Create a sample DataFrame
data = {
"name": ["Alice", "Bob", "Charlie", "David"],
"age": [25, 30, 35, 40],
"email": ["alice@example.com", "bob@example.com", None, "david@example.com"]
}
df = pd.DataFrame(data)
return df

def test_data_not_null(sample_data):
# Check if there are any null values in the DataFrame
assert sample_data.isnull().sum().sum() == 0, "Data contains null values"

def test_age_column_type(sample_data):
# Verify that the 'age' column is of integer type
assert sample_data['age'].dtype == 'int64', "Age column is not of integer type"`
Explanation:
Fixture (sample_data): This fixture sets up a sample DataFrame, simulating a dataset that can be reused in multiple tests.
Test Function (test_data_not_null): This test checks if there are any null values in the DataFrame and fails if any are found.
Test Function (test_age_column_type): This test verifies that the age column is of integer type, ensuring data consistency.
Step 3: Run the Test
Execute the test with:

pytest -v test_data.py
Why This Works
Pytest’s flexibility allows data-centric tests, ensuring that datasets meet expected criteria.
The fixture makes it easy to set up and modify test data without duplicating code.
Best Practices for Automating Tasks with Pytest
Use Fixtures for Setup and Teardown: Fixtures help manage setup and teardown efficiently, making your tests modular and reusable.
Leverage Plugins: Pytest has a variety of plugins (e.g., pytest-html for HTML reports, pytest-xdist for parallel execution) to enhance your automation efforts.
Parameterize Tests: Use @pytest.mark.parametrize to test multiple sets of data or inputs, reducing code duplication.
Integrate with CI/CD Pipelines: Integrate Pytest tests with CI/CD tools like Jenkins or GitHub Actions for continuous testing.

Conclusion
Pytest is a powerful tool for automating a variety of tasks, from API and web UI testing to data validation. Its simplicity, combined with flexibility and extensive plugin support, makes it an excellent choice for developers and QA engineers alike. By leveraging Pytest's features such as fixtures, parameterization, and integrations with CI/CD pipelines, you can build robust, maintainable, and scalable automation frameworks.

If you're looking to automate your workflow or enhance your testing process, Pytest is a great starting point. Happy testing!

以上がPytest を使用してタスクを自動化する: 例を含む実用的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。