1-pytestテストフレームワークの1-強力な機能のフィクスチャ

pytestテストフレームワークの1-強力な機能のフィクスチャ

免責事項:この記事は従って、ブロガーオリジナル記事です。CC BY-SA 4.0再現著作権の契約を、元のソースのリンクと、この文を添付してください。

このリンク:https://blog.csdn.net/qq_30758629/article/details/95923286
テストチュートリアルネットワークと同期:http://www.testclass.net/interface

1.fixtureを行うために使用されていますか?

テスト要件の変化に合わせてカスタマイズすることができるコード、テスト機能前後の固定具は、pytestによって実行されるシェル関数を実行しています。

定義されたテスト入力データのセットを含む、先行などの試験システム、バッチテストを提供するために、データソース、初期状態を設定します...

pytest固定具を予備試験の前及び後に使用され、コードのクリーンアップ作業は、コアテストロジック機構を単離しました!

2.例えば、

@pytest.fixture()



def some_data():



    return 42



 



def test_some_data(some_data):



    assert some_data == 42

#@pytest.fixture()関数は、固定具デコレータを宣言するために使用されています

テスト関数のパラメータリストはフィクスチャの名前が含まれている場合、pytestが検出され、

検出順序は、配置されたテストモジュールの第1の検索、次いでconftest.py検索します

そして、テスト実行機能の前にフィクスチャを実行し、

テストタスクを完了するための治具には、データのテスト機能に戻ることができます

pytest --setup-ショーtest_example1.py

右でどこ3.fixture機能?

1.試験は、別々のファイルに配置することができます

2.複数のファイル共有フィクスチャをテストしたい場合は、新しいファイル、内側にフィクスチャを作成conftest共通のディレクトリの下に配置することができます。

4.テスト・フィクスチャデータ転送

フィクスチャは、テストデータの保存に最適です、と彼は、任意のデータを返すことができること

@pytest.fixture()



def a_list():



    return [1,2,3,44,5]



 



def test_a_list(a_list):



    assert a_list[2] == 3

範囲指定された固定具

セッション>モジュール>クラス>機能:スコープパラメータを有する固定具は、固定具のスコープを制御することができます。

1)function



每一个函数或方法都会调用 \



@ pytest.fixture()



 



 



def first():



    print("\n获取用户名")



    a = "xiaoyulaoshi"



    return a



 



 



@pytest.fixture(scope="function")



def sencond():



    print("\n获取密码")



    b = "123456"



    return b



 



 



def test_1(first):



    '''用例传fixture'''



    print("测试账号:%s" % first)



    assert first == "xiaoyulaoshi"



 



 



def test_2(sencond):



    '''用例传fixture'''



    print("测试密码:%s" % sencond)



    assert sencond == "123456"



 



 



2).class 每一个类调用一次,一个类可以有多个方法



 



 



@pytest.fixture(scope="class")



def first():



    print("\n获取用户名,scope为class级别只运行一次")



    a = "xiaoyulaoshi"



    return a



 



 



class TestCase():



    def test_1(self, first):



        '''用例传fixture'''



        print("测试账号:%s" % first)



        assert first == "xiaoyulaoshi"



 



    def test_2(self, first):



        '''用例传fixture'''



        print("测试账号:%s" % first)



        assert first == "xiaoyulaoshi"



 



 



3).module,每一个.py文件调用一次,该文件内又有多个function和class



import pytest



 



 



@pytest.fixture(scope="module")



def first():



    print("\n获取用户名,scope为module级别当前.py模块只运行一次")



    a = "xiaoyulaoshi"



    return a



 



 



def test_1(first):



    '''用例传fixture'''



    print("测试账号:%s" % first)



    assert first == "xiaoyulaoshi"



 



 



class TestCase():



    def test_2(self, first):



        '''用例传fixture'''



        print("测试账号:%s" % first)



        assert first == "xiaoyulaoshi"



 



 



4).session



是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module



当我们有多个.py文件的用例时候,如果多个用例只需调用一次fixture,那就可以设置为scope = "session",并且写到conftest.py文件里



 



conftest.py



 



import pytest



 



 



@pytest.fixture(scope="session")



def first():



    print("\n获取用户名,scope为session级别多个.py模块只运行一次")



    a = "xiaoyulaoshi"



    return a



 



 



test_fixture11.py



 



import pytest



 



 



def test_1(first):



    '''用例传fixture'''



    print("测试账号:%s" % first)



    assert first == "xiaoyulaoshi"



 



 



import pytest



 



 



def test_2(first):



    '''用例传fixture'''



    print("测试账号:%s" % first)



    assert first == "xiaoyulaoshi"

6.fixtureのパラメータ化

pytestは、完全なテストパラメータで複数の方法をサポートしています。

固定具のレベルパラメータで機能:1).pytest.fixture()

2)@のpytest.mark.parametrize :.許可パラメトリック関数またはクラスレベルは、特定のテスト引数関数またはクラス/フィクスチャセットが複数設けられています。

3_.pytest_generate_tests:独自のカスタム動的なパラメータ化スキームまたは拡張を実装することができます。

import pytest



import requests



 



par_to_test=[{



      "case": "serach a word :haha",



      "headers": {},



      "querystring": {



        "wd":"hah"



      },



      "payload": {},



      "expected": {



        "status_code":200



      }



    },



{



      "case": "serach a word2 :kuku",



      "headers": {},



      "querystring": {



        "wd":"kuku"



      },



      "payload": {},



      "expected": {



        "status_code":200



      } },



 



{



      "case": "serach a word3 :xiaoyulaoshi",



      "headers": {},



      "querystring": {



        "wd":"xiaoyulaoshi"



      },



      "payload": {},



      "expected": {



        "status_code":200



      } }



]



 



@pytest.fixture(params = par_to_test)



def class_scope(request):



    return request.param



 



def test_baidu_search(class_scope):



    url = "https://www.baidu.com"



    r = requests.request("GET", url, data=class_scope["payload"], headers=class_scope["headers"], params=class_scope["querystring"])



    assert r.status_code == class_scope["expected"]["status_code"]

おすすめ

転載: www.cnblogs.com/wzz2500/p/11375352.html