自動テスト - Pytest テスト フレームワーク

01 | はじめに

Pytest は、非常に成熟したフル機能の Python テスト フレームワークであり、主に次の特徴があります。

  1. シンプルで柔軟、使いやすく、豊富なドキュメント

  2. テストケースをきめ細かく制御するためのパラメータ化をサポート

  3. 単純な単体テストと複雑な機能テストをサポートし、Selenium、Appium、Requests などの UI およびインターフェイスの自動テストにも使用できます。

  4. 多くのサードパーティ製プラグインをサポートし、拡張機能をカスタマイズできます (Pytest プラグインのダウンロード アドレス)

  5. テストケースのスキップと失敗の再試行をサポート

  6. Jenkins などの CI ツールと適切に統合可能

02 インストール

pip install pytest

03 | 使い方は簡単

import pytest


def test01():
    print('第一条用例')
    assert True
def test02():
    print("第二条用例")
    assert False


if __name__=="__main__":
    # -s:显示用例中的输出
    # -v:输出更详细的用例执行信息
    # __file__:本文件
    pytest.main(["-s", "-v", __file__])

操作の結果は次のようになります。

04 | 初期化と終了

4.1 機能レベル

テストケース実行ごとに初期化&終了メソッドを実行する

import pytest
class Test:
    def setup(self):
        print("初始化")
    def teardown(self):
        print("结束")
    def test01(self):
        print('第一条用例')
        assert True
    def test02(self):
        print("第二条用例")
        assert False
if __name__=="__main__":
    pytest.main(["-s",__file__])

実行結果グラフ:

4.2 クラスレベル

クラス内で実行する必要があるユースケースの数に関係なく、初期化と終了メソッドは 1 回だけ実行します。

import pytest
class Test:
    def setup_class(self):
        print("初始化")
    def teardown_class(self):
        print("结束")
    def test01(self):
        print('第一条用例')
        assert True
    def test02(self):
        print("第二条用例")
        assert False
if __name__=="__main__":
    pytest.main(["-s",__file__])

実行結果グラフ:

05 | 一般的なプラグイン

5.1 テストレポート

テストレポートプラグインをインストールする

pip install pytest-html

プロジェクト ディレクトリに pytest.ini 構成ファイルを作成し、構成ファイルにテスト レポートの保存パスを追加します。

[pytest]
# 在当前目录下创建report目录存放测试报告
addopts = --html=./report/report.html    

テストを実行すると、次のようなテスト レポートが生成されます。 

5.2 失敗時の再試行

プラグインをインストールする

pip install pytest-rerunfailures

グローバル再試行: 構成ファイルに再試行パラメーターを追加して、再試行およびすべてのユースケースが失敗した後の再試行待ち時間を制御します。

[pytest]
addopts = --html=./report/report.html --reruns 3 --reruns-delay 2
# --reruns n,n是一个整数,表示重试次数
# --reruns-delay n,n是一个整数,表示重试等待时间,单位是s

失敗したユースケースの再試行はテストレポートで確認できます。

単一の再試行: デコレーターをユースケース関数に追加します。グローバルな再試行構成をコメントアウトする必要があることに注意してください。

# reruns指定重试次数,reruns_delay指定重试间隔
@pytest.mark.flaky(reruns=2, reruns_delay=1)  
    def test02(self):
        print("第二条用例")
        assert False

テスト レポートで再試行状況を確認してください。

5.3 複数プロセスの同時実行

pytest-xdist の登場により、自動テスト ケースの分散実行が可能になり、自動テスト時間を節約できます。

プラグインをインストールする

pip install pytest-xdist

マルチCPU並列実行

pytest -n 并行测试数量

5.4 多重断言

pytest を使用してアサーションの判断を行う場合、ユースケースの正確性のために、次のような複数の側面がアサートされることがよくあります。

  • アサーション 1: http 応答のステータスをアサートします。

  • アサーション 2: 応答によって返されたコード値をアサートします。

  • アサーション 3: 応答によって返された JSON のデータ フィールドが期待を満たしているかどうかをアサートします。

ネイティブ Python のアサートを使用すると、アサーションが失敗し、すべてが失敗する状況に遭遇します。たとえば、アサーション 1 の結果が失敗した場合、アサーション 2 もアサーション 3 も実行されません。アサーション 2 とアサーション 3 が引き続き実行され、より多くのアサーション結果を取得してインターフェイスのどこに問題があるかを判断し、問題をより正確に特定できるようになることを期待しています。それを実現するプラグイン。

プラグインをインストールする

pip install pytest-assume

使用例

import pytest


def test_add2():
    pytest.assume(1 + 4 == 5)
    pytest.assume(1 + 3 == 3)
    pytest.assume(2 + 5 == 7)
    pytest.assume(2 + 5 == 9)
    print("测试完成")

if __name__=="__main__":
    pytest.main(["-s", "-v", __file__])

実行結果は下図のようになり、合計4つのアサーションが実行され、そのうち2つのアサーションが失敗していることがわかります。

5.5 実行結果を美しくする

自動テストを実施する場合、多くの場合、数百、数千のユースケースがあり、実行時間は数十分、または数時間かかります。非常に多くのユースケースをデバッグする場合、実行がどこまで進んでいるのかわからないことがありますが、pytest-sugar プラグインは問題点をうまく解決できます。

pytest-sugarプラグインをインストールする

pip install pytest-sugar

コマンド ラインでユース ケース ファイルを実行すると、実行結果は次の図のようになり、ユース ケースの実行時に進行状況バーが表示されます。

私のブログがお役に立ちましたら、ブログ内容を気に入っていただけましたら、ワンクリックで「いいね!」「コメント」「お気に入り」をお願いします!

以下はサポート学習教材です。[ソフトウェア テスト] を行う友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を私に同行させてくれました。あなたにも役立つことを願っています。

ソフトウェアテストインタビューアプレット

ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。誰が知っているのか!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。

次の面接の質問セクションが取り上げられます。

1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux

6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本

情報取得方法:

おすすめ

転載: blog.csdn.net/myh919/article/details/132041453