Pythonのテストフレームワークのpytest

pytestテストフレームワーク次のようにPythonの完全に機能的な利点の集合です。

1、操作が簡単で、データパラメータの複数のセットをサポートし、ユースケースXFAILサポートをスキップ。

2、ユニットテストのサポートシンプルかつ複雑な機能テスト、あなたはまた、UIテストの自動化とインタフェースを行うことができます。

図3に示すように、多くのサードパーティ製プラグインとカスタム拡張のためのサポートがあるpytest等再度実行する障害としては、アサーションの失敗は、カスタムエラー停止を実行し続け、可撓性のユースケースをマーキング実行カスタムマーク....

4、よくCIを統合することができます

2:  

フレーム:

同様の設定は、ティアダウンは、より柔軟性があり、

グローバルモジュールレベル(setup_module / teardown_module)モジュール全体の話、

有用な機能レベル関数(setup_function / teardown_function)はクラスではありません

クラスレベル(setup_class / teardown_class)授業の前と後に一度だけ実行します。

方法段階(setup_method / teardown_methond)は、全体的な話クラスのメソッドを実行します

ファイルレベル間でのセッション()

3:

Pytest呼び出しやケース設計の原則:

1. Pytest / py.test(端子、コマンドライン、ラインPyCharmは設定PyCharmあります

pytestの方法を使用して実行)

Pytest -v(情報の最高レベルは、サイレントモードを-q -verbose)

pytest -v -s -qファイル名(Sコンソール出力は、ゾーン出力の結果も詳細である)2. pytestは_ *の.py * _test.pyフォームテストを実行するか、現在のディレクトリとそのサブディレクトリであろう

3. TEST_機能から始め、TEST_方法を始め、テストクラスで始まります。すべてのパッケージパッケージは__init__.pyファイルを持っている必要があります。

4. Pytestの実施形態および方法は、unittestの書き込まれたフレームで行うことができます

 

4:

フィクスチャ:いくつかのシーンは適用されないティアダウンとセットアップについては、使用例、同じクラスやユースケースユースケースを必要としないいくつかの設定を行うには、いくつかの必要性、治具と、この時間は、比較的使いやすいです。

使用法:

1、セットアップ、ティアダウンのために、これら二つの名前、その名前の柔軟な方法を買う余裕はありません。(独立宣言活性化にちなんで名付けられました)

2、データ共有。あなたがデータを共有することができますconftest.py構成の方法を記述し、インポートをインポートする必要はありません。ファイル共有、ファイルと同じフォルダ内にconftestファイルを使用アクロス。

3、歩留まりの魔法の組み合わせの範囲とレベルは、すべてのファイルのセットアップとティアダウンの様々なと等価です。

 

例外なく、あなたは、戻り値も必要としない場合に自動的に適用することを選択することができ、本来の試験方法への変更をしたい、またはすべてが自動的に自動的に適用しないでください

解決方法:フィクスチャパラメータautouse = Trueの達成

ステップ:(autouse = TRUE)@ pytest.mark.usefixtures @ pytest.fixtureプラス上記の方法で使用されます

ステップ:試験方法でプラスpytest.mark.usefixtures @(「スタート」)

 

これは、テストデータから不可分であり、柔軟、一般的なデータのためのデータは、パラメータを通過さ

溶液:固定パラメータを透過器具依頼;

ステップ:固定具の@ pytest.fixture(paramsは= [1、2、3、 'リンダを'])を追加し、プロセスパラメータの要求を書きます

pytestインポート
#moduleモジュールレベルでは、一度だけのモジュラーを実行します。レンジでない場合は、デフォルトでは各メソッドはモジュール内で実行される前に実行されます。適用後に、すべてのメソッド名は、関数のリア内のモジュールの後に増加していない自動設定autouse =真の@ pytest.fixture(範囲=「モジュール」 、 = Trueのautouse)DEFのopen_browser():
    印刷(「\ nは、ブラウザを開き、ホームを開く」)
最後には、ケースを実行歩留まり#モジュールの後に解体作業を生き残ります。
印刷(「実行ティアダウン」)
プリント(「最終的には、ブラウザを閉じ」)

DEF test_soso(ログイン):ログインDEF conftestファイルpytest.fixtureの@で書かれた#login機能()():
プリント(「ケース1:国際ボードの実装後検索「)

DEFのtest_cakan():
印刷(」ケース2:直接的な上陸作戦「)

DEFのtest_cart(ログイン):
印刷(」ケース3は、着陸後に購入)作る

オリジナルのコードを変更せずに:メソッドまたはデコレータを柔軟な方法は、後のセットアップのティアダウンや他の機能項目で飾られるように、新機能を追加し
pytest.fixture()@
DEFのopen_browser():
    印刷( "\ nは、ブラウザを開き、ホームを開く")
降伏
印刷( '実行ティアダウン')
印刷( '最終的には、ブラウザを閉じ')

pytest.mark.usefixtures( 'open_browser')@
DEF test_soso():#
DEF test_soso (open_browser )の効果は同じであるが、これは元のコードの構造が変更され、それは問題であってもよいし、他の場所で再利用
    印刷(「ケース1:検索を実行した後ゴードン機会」)
ファイブ:
共通ライブラリの依存関係:

pytest糖インストールPIP
PIPはpytest-rerunfailuresはピップpytest-xdistインストールインストール
ピップインストールすることはpytest-仮定
ピップintallのpytest-HTMLを

 
6:
パラメータ化とデータ駆動:
= test_user_data [ "リージ"、 "zhangsan"] 

pytest.fixture()@
DEFのlogin_r(要求):
ユーザ= request.paramの
印刷( "ユーザー着陸、自宅のn-着陸をオープンする準備ができて\:%S" %User)を
ユーザーに返します

@ pytest.mark.parametrize( 'login_r'、test_user_data、INDIRECT =真)
DEFのtest_login_s(login_r):
印刷(login_rは)

に相当します。
pytest.fixtureの@(のparams = test_user_data)
DEFのlogin_r(要求):
ユーザ= request.paramの
印刷( "ユーザー着陸、N-着陸をオープンする準備ができて家庭\:%S" %ユーザー)
ユーザーを返す

DEFのtest_login_s(login_r):
印刷(login_r )

データのセット:
test_user_data1 = [{"user": "linda", "password": "888888"},
{"user": "servenruby", "password": "123456"},
{"user": "test01", "password": ""}]

test_user_data2 = [{"q": "中国平安", "count": 3, "page": 1},
{"q": "阿里巴巴", "count": 2, "page": 2},
{"q": "pdd", "count": 3, "page": 1}]

@pytest.fixture(scope="module")
def login_r(request):
# 这是接收传入的参数,接收一个参数
user = request.param['user']
password = request.param['password']
print("\n用户名:%s,密码:%s" % (user, password))

@pytest.fixture(scope="module")
def query_param(request):
#これにより、第2のパラメータを受信し、受信パラメータを受信します
    request.param = Q [ 'Q'] 
COUNT = request.param [ 'COUNT']
ページrequest.param = [ 'ページ']
印刷( "単語検索クエリ:%のSは" %Q)
戻りrequest.param

#このパラメータデータpytestドライブは、indeirect = Trueの場合、それは、パラメータであるとき、私はそれを書くませんが、実行するための機能としてlogin_rある
#ボトムアップの実行
二つのデータの組み合わせテスト3 * 3のテストケースの実行があります#( test_user_data1番号の* test_user_data2番号)
pytest.mark.parametrize( "query_param"、test_user_data2 @、INDIRECT =真)
pytest.mark.parametrize( "login_r"、test_user_data1、INDIRECT =真)@
DEFのtest_login(login_r、query_param ):
着陸例の
印刷(login_r)
印刷(query_param)
















おすすめ

転載: www.cnblogs.com/1026164853qqcom/p/11280684.html