497 測定値
497 測定値

効率的な Python テスト自動化のための 7 つのヒントと実践

Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

長すぎる; 読むには

Python はテスト オートメーションのための最高のプログラミング言語の 1 つです。プロジェクトの仕様に基づいて正しいテスト オートメーション フレームワークを選択します。WebDriverWait を使用して Selenium でタイミングの問題を克服します。
featured image - 効率的な Python テスト自動化のための 7 つのヒントと実践
Pradeesh Ashokan HackerNoon profile picture

もしあなたが automation testing with JavaScript, Node, or some other programming language, you will realize how much easier it is with Python. Python offers the sheer amount of libraries, its simplicity, and its large-scale use make it one of the best programming languages for test automation.

自動化テスト自動化テスト


I have worked on Python test automation projects long enough to know some tips and tricks for the best results. I will share seven tips and practices you can rely on for efficient Python test automation. 私は最高の結果を得るためのいくつかのヒントとトリックを知るのに十分に長い間Pythonテスト自動化プロジェクトに取り組んでいます。

1. プロジェクト仕様に基づいて適切なテスト自動化フレームワークを選択します。1 プロジェクトの仕様に基づいて適切なテスト自動化フレームワークを選択します。

Python には、組み込まれたテスト自動化フレームワーク、Unittest が付属していますが、小規模なプロジェクトに最適です。

あなたが小規模なプロジェクトで作業できるテスト自動化フレームワークを望むなら、Pytest はより良い選択肢です。


Pytestは、より管理可能でスケーラブルなテスト自動化のためにテストケースを書くための構造的で効率的な方法を提供します。 さらに、最もシンプルなシンタクスと最も包括的なプラグインエコシステムを備えています。 たとえば、パラレルテストを実行するために pytest-xdist を使用できます。 さらに、Pytest で Unittest または Nose 2 で書いたテストケースを実行できます。


もしあなたがより多くのロボットプロセスオートメーションを行うなら(RPA)ロボットフレームワークはより良い選択肢です。 シンタックスは主に人間の言語なので、本当に作業しやすいです。 ウェブテストのために、Selenumのような他のPythonテストフレームワークと統合することもできます。

RPARPA


Behavior-Driven Development(BDD)を実践するチームで働く場合、Behaveは最高のフレームワークです。Behaveで非技術的な利害関係者が理解できるテストケースを書くことは非常に簡単です。


I would advise you to choose a framework that matches the tech stack your team uses to avoid any communication barriers. But if you are working solo, Pytest is the most versatile and commonly used framework. コミュニケーションの障壁を回避するためにあなたのチームが使用するテクノロジースタックに匹敵するフレームワークを選択することをお勧めします。WebDriverWait を使用して Selenium でタイミングの問題を克服します。

I mentioned that you can integrate Pytest with Selenium for web testing. While Pytest is great for functional testing, Selenium takes web automation to an entirely new level. Selenium has powerful browser automation capabilities, especially with its WebDriver library. Seleniumは、WebDriverのライブラリを活用するのに最適です。


セレニウムでテストを実行する際には、システムが要素の位置付けで動作するときに一定の時間を待たなければなりません。その時間が経過すると、例えば10秒でドライバーが停止します。


したがって、 implicit waits に依存するのではなく、WebDriverWait を使用して expected_conditions を使用して、要素がインタラクティブになる前に満たされなければならない一定の条件を作成します。
from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # 要素がドライバーの準備が整った後にアクションを実行する。from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Perform action after the element is ready driver.()


テストが絶えず失敗する場合、Webアプリが問題を抱えているとは限りませんが、アプリのコードやUIのいくつかの変更のせいかもしれません。

テストの失敗から過度のデバッグを避けるには、ユニークなIDを使用してWeb要素を正確に識別してください。

3.Pytest パラメータ化テストを使用してテスト機能の重複を避ける。

Pytestのパラメータ化テスト機能がどれほど時間を節約するかを十分に強調できません。テスト自動化では、異なるデータセットを持つアプリで同じ機能をテストする必要があります。テスト機能を複製する代わりに、単一のテスト機能を pytest.mark.parametrize を使用して実行し、異なるパラメータで複数回テストされます。<コード>pytest.mark.parametrize


import pytest

Import pytest

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])

def test_square(入力、期待):

def test_square(入力、期待):

   入力 2 ==期待

    assert input ** 2 == expected


Python の組み込みテスト自動化フレームワークを使用してパラメータ化テストを実行できるかどうかを疑問に思う場合は、答えはYes - 特定の条件下で Unittest はパラメータ化テストをネイティブにサポートしませんが、その目的のためにモジュールを追加できます。

インポートユニット

import unittest

from parameterized import parameterized

from parameterized import parameterized

クラステストテスト(unittest.TestCase):

class テスト(unittest.TestCase):

     ([

)                   ([)

       (「2」、「2」、「4」)、

<コード>       (「2」、「2」、「4」)、





















<コード>       (「3」、「3」、「9」)、

       (「4」、「4」、「4」、「16」)、

<コード>       (「4」、「4」、「16」)、

   ]

<コード>   ]

   def test_square(自己、名前、入力、期待):

   def test_square(自己、名称、入力、期待):

















<コード>         自力でアセートEqual(input ** 2, expected)

4

イメージソース

画像ソース

テスト スイートの API、テスト ケース、データベース、およびサードパーティー システムが増えるほど、開発を遅らせることができるより多くの実行遅れがあります。幸いなことに、テスト スイートを乱用することなく、これに対処する方法があります。Python は Pytest のようなフレームワークで並行テストを可能にします。複数の CPU を使用して複数のテストを並行して実行できます。


ここではPytestで並列テストを実行する方法があります:

pip install コード

pip install コード

pytest -n 4  # 4 CPUで実行テスト

pytest -n 4 # Run tests on 4 CPUs


あなたはまた、負荷を処理するCPUの数を増やすことができますが、それに対処できるだけ多くのローカルインフラストラクチャ があります. If your CPUs are not powerful enough to handle your test suite, I recommend using cloud platforms like Lambda to test how the app will behave on different browsers and OSes.

という意味です。

5> CI/CDパイプラインにテスト自動化を自動化します。

信じてください、高速な開発サイクルで作業している場合は休憩をとることがありませんし、ソフトウェアで何かが変化するたびにコードを手動で調整する必要があります。


Python テストを CI/CD パイプラインに自動化して、コードが変更されるたびに自動的に実行できます。


Python testing automation を CI/CD パイプラインに統合するには、プロジェクトに pytest-cov を追加し、Pytest コマンドを使用してテストを自動的に実行し、問題を表示します。<コード>pytest-cov


ステップ:

  - 名称: インストール依存症

  - 名称: インストール依存症

   run: pip install pytest pytest-cov

   run: pip install pytest pytest-cov


  - 名称: 実行テスト

   - 名称: 実行テスト

   run: トップページ --cov=my_project

   run: トップページ --cov=my_project


より大きなテスト スイートで作業する場合は、Jenkins のような CI ツールにロボットフレームワークを追加する必要があります。


テスト:

 スクリプト:

  スクリプト:

   - Python -m coverage run -m unittest discover

   - Python -m coverage run -m unittest discover

    - Python -m coverage report

   - Python -m coverage report

6

Python テスト オートメーションで遭遇する可能性のある一般的な問題の1つは、相互依存性によるテスト破損です。基本的に、あなたのテストは、他のテストのデータまたは環境状態に依存しているため、失敗します。 したがって、あるテストが変更された場合、他のテストは、変更の原因となる連鎖反応の結果として失敗します。 これを解決するには、それぞれが他のテストと無関係で開始するように、すべてのテストを分離してください。


ここでは、Pytest で setup and teardown ロジックを使用してテスト隔離を確保する方法です。


import pytest

Import pytest

@pytest.fixture

<コード>@pytest.fixture

def clean_environment():

def clean_environment():

   # 設定:クリーンな状態の準備

   # Setup: クリーンな状態の準備

   print(「クリーンな環境を設定する」)

   print(「クリーンな環境を設定する」)

   yield

    yield

   # Teardown: 環境をリセット

   # Teardown: リセット環境

   印刷(「テスト後の掃除」)

   print(「テスト後の掃除」)


def test_example(clean_environment):


def test_example(clean_environment):

    2 + 2 == 4

<コード>    2 + 2 == 4


Pytest フィギュアは、あなたが使用するリソースが各テスト後にクリーン化されることを保証することに注意してください. This allows you to restore the environment to its original state after the test has been executed.

7. テスト・オートメーションの最良の実践に固執する。

I will highlight a couple of best practices to become more efficient in Python test automation;

  • テストオートメーションを開始する前に、テスト スイートのテスト メトリクスを設定してください。 コードのカバー、実行されたテストケースの数、合格または失敗し、テストの実行時間は、テストを追跡し、対処するためのボトルネックを特定するのに役立ちます。
  • 非常に大きな範囲で、チームの誰もがテストを書く方法を知っておくべきです(E2E)テストです。この方法で、品質は単に後で考えるだけでなく、開発プロセスに最初から根ざしたものです。
  • あなたがコントロールできない外部サイトやサーバーへのリンクなどの第三者の依存性をテストしないでください。それはあなたのテストを遅らせる可能性があり、あなたのテスト
  • テスト自動化を開始する前に、テスト スイートのテスト メトリクスを設定してください. Test metrics such as code coverage, number of test cases executed, passed or failed, and test execution time will help you track testing and identify bottlenecks to tackle.
  • 非常に大きな範囲で、チームの誰もがエンド・トゥー・エンド(E2E)テストを書く方法を知っておくべきです。
  • あなたがコントロールできない外部サイトやサーバーへのリンクなどの第三者の依存性をテストしないでください. It could potentially slow down your test, and there could be cookie banners or some other element that may cause your test to fail.
  • assertionsを使用して、あなたのテスト結果が期待される結果に一致することを確認します。
  • トップ > トピック > トピック > トピック > トピック > トピック > トピック > トピック > トピック > トピック > トピック > トピック > トピック >主張
  • テスト自動化ツールを最新の状態に保ち、アプリケーションを最新のブラウザバージョンでテストし、一般に公開する前にバグを捕まえましょう。

    結論

    自動化テストは、一連の見た目で解決できないエラーに対処する場合に特に挑戦する可能性があります。テストオートメーションはテストピラミッドを使用する場合に少なくなることを発見しました。ここでは、E2Eテストの前にユニットおよび統合テストに焦点を当てます。

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks