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"]