conftest.pyとは何ですか
フィクスチャの保存専用の設定ファイルとして理解できます。
実際の開発シナリオ
複数のテスト ケース ファイル (test_*.py) のすべてのユース ケースでは、事前操作としてログイン関数を使用する必要があるため、特定のユース ケース ファイルにログイン関数を書き込むことはできません。
上記のシナリオの問題を解決するにはどうすればよいでしょうか?
conftest.py の登場は、上記の問題を解決し、いくつかのグローバル フィクスチャを個別に管理することです。
conftest.py 構成フィクスチャの考慮事項
- pytest はデフォルトで conftest.py 内のすべてのフィクスチャを読み取ります
- conftest.py ファイルの名前は固定されており、変更できません。
- conftest.py は、同じパッケージ内のすべてのテスト ケースに対してのみ有効です
- 異なるディレクトリに独自の conftest.py を含めることができ、1 つのプロジェクトに複数の conftest.py を含めることができます。
- テスト ケース ファイルに conftest.py を手動でインポートする必要はありません。pytest が自動的に検出します。
実際のプロジェクトにおける小さなケース
ルートディレクトリ内
conftest.py コード
トップレベルの conftest は通常、グローバル フィクスチャを書き込み、[UI オートメーションで] Web およびアプリ上でドライバーを初期化する場合があります。
import pytest
@pytest.fixture(scope="session")
def login():
print("====登录功能,返回账号,token===")
name = "testyy"
token = "npoi213bn4"
yield name, token
print("====退出登录!!!====")
@pytest.fixture(autouse=True)
def get_info(login):
name, token = login
print(f"== 每个用例都调用的外层fixture:打印用户token: {token} ==")
test_1.py コード
def test_get_info(login):
name, token = login
print("***基础用例:获取用户个人信息***")
print(f"用户名:{name}, token:{token}")
06_run.py コード
import pytest
if __name__ == '__main__':
pytest.main(["-s", "../06conftest/"])
test_51job ディレクトリの下
conftest.py コード
import pytest
@pytest.fixture(scope="module")
def open_51(login):
name, token = login
print(f"###用户 {name} 打开51job网站###")
test_case1.py コード
def test_case2_01(open_51):
print("51job,列出所有职位用例")
def test_case2_02(open_51):
print("51job,找出所有python岗位")
test_toutiao ディレクトリの下
パッケージには __init__.py ファイルも conftest.py ファイルもありません
def test_no_fixture(login):
print("==没有__init__测试用例,我进入头条了==", login)
test_weibo ディレクトリの下
conftest.py コード
import pytest
@pytest.fixture(scope="function")
def open_weibo(login):
name, token = login
print(f"&&& 用户 {name} 返回微博首页 &&&")
test_case1.py コード
class TestWeibo:
def test_case1_01(self, open_weibo):
print("查看微博热搜")
def test_case1_02(self, open_weibo):
print("查看微博范冰冰")
演算結果