もしあなたが 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. automation testing 自動化テスト 自動化テスト 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 プロジェクトの仕様に基づいて適切なテスト自動化フレームワークを選択します。 あなたが小規模なプロジェクトで作業できるテスト自動化フレームワークを望むなら、Pytest はより良い選択肢です。 したがって、 implicit waits に依存するのではなく、WebDriverWait を使用して expected_conditions を使用して、要素がインタラクティブになる前に満たされなければならない一定の条件を作成します。 Python には、組み込まれたテスト自動化フレームワーク、Unittest が付属していますが、小規模なプロジェクトに最適です。 Pytestは、より管理可能でスケーラブルなテスト自動化のためにテストケースを書くための構造的で効率的な方法を提供します。 さらに、最もシンプルなシンタクスと最も包括的なプラグインエコシステムを備えています。 たとえば、パラレルテストを実行するために pytest-xdist を使用できます。 さらに、Pytest で Unittest または Nose 2 で書いたテストケースを実行できます。 もしあなたがより多くのロボットプロセスオートメーションを行うなら( )ロボットフレームワークはより良い選択肢です。 シンタックスは主に人間の言語なので、本当に作業しやすいです。 ウェブテストのために、Selenumのような他のPythonテストフレームワークと統合することもできます。 RPA RPA RPA 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秒でドライバーが停止します。 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.() テストの失敗から過度のデバッグを避けるには、ユニークなIDを使用してWeb要素を正確に識別してください。 テストが絶えず失敗する場合、Webアプリが問題を抱えているとは限りませんが、アプリのコードやUIのいくつかの変更のせいかもしれません。 <コード> ] <コード> 自力でアセートEqual(input ** 2, expected) 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 <コード> (「4」、「4」、「16」)、 ) ) <コード> (「2」、「2」、「4」)、 from parameterized import parameterized from parameterized import parameterized クラステストテスト(unittest.TestCase): class テスト(unittest.TestCase): ([ ([ (「2」、「2」、「4」)、 <コード> (「3」、「3」、「9」)、 (「4」、「4」、「4」、「16」)、 ] def test_square(自己、名前、入力、期待): def test_square(自己、名称、入力、期待): 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 コマンドを使用してテストを自動的に実行し、問題を表示します。<コード>pytest-cov 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 <コード> 2 + 2 == 4 <コード>@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 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テストの前にユニットおよび統合テストに焦点を当てます。