>

pytest 비품과 관련하여 작은 문제에 직면하고 있습니다. 도움을 주셔서 감사합니다.

아래에 언급 한 바와 같이 몇 가지 기능이 있습니다. 간단하게 구현을 보여주지 않았습니다.

@pytest.fixture()
def get_driver():
    pass
@pytest.fixture()
def login(get_driver):
    pass
@pytest.fixture()
def settings(login):
    pass

문제는 첫 테스트 케이스를 실행하기 전에 설정을 수행하는 (세션 수준) 픽스쳐가 더 필요하다는 것입니다. (실제로 테스트를 시작하십시오). 즉, 설정 페이지로 이동하여 몇 가지 설정을 만듭니다. (로그인 후)

지금 문제는 세션 레벨에서 함수 레벨 픽스처를 사용할 수 없기 때문에세션 레벨 픽스처를 사용하여 이와 같이 할 수 없다는 것입니다.또는 할 수 있습니까?

@pytest.fixture(scope="session")
def setup(settings):
    settings.create_settings()
    pass


  • 답변 # 1

    해결 방법을 사용해야합니다. 작업은 function 에서 수행해야합니다.   autouse 와 범위 비품   True 로 설정 .

    session 에서 변수를 초기화해야합니다   settings 여부를 확인하는 기반 비품  완료되었는지 아닌지. 완료하지 않으면 설정을 수행하고 플래그를 False 로 변경합니다

    아래는 실례입니다

    import pytest
    
    @pytest.fixture(scope="session", autouse=True)
    def settings_page():
        config = {"config_done": False}
        return config
    
    @pytest.fixture()
    def init(request):
        print("init called")
        return "init"
    
    @pytest.fixture()
    def driver():
        print("driver called")
        return "driver"
    
    @pytest.fixture(autouse=True)
    def init_settings(settings_page, driver):
        if not settings_page["config_done"]:
            print("Settings being done only the first time")
            settings_page["config_done"] = True
    
    @pytest.fixture()
    def login():
        print("login called")
        return "login"
    
    @pytest.fixture()
    def logged_in_driver(init, driver, login):
        print("logged in driver is ready")
        return (init, driver, login)
    
    @pytest.fixture()
    def non_logged_in_driver(init, driver):
        print("non logged in driver is ready")
        return (init, driver)
    
    def test_1(logged_in_driver):
        print("test_1")
    
    def test_2(non_logged_in_driver):
        print("test_2")
    
    

    출력은 다음과 같습니다

    test.py driver called
    Settings being done only the first time
    init called
    login called
    logged in driver is ready
    .test_1
    driver called
    init called
    non logged in driver is ready
    .test_2
    
    

    따라서 설정은 한 번만 볼 수 있습니다

  • 이전 yii2 - 보기로 리디렉션하지 않고 모달 양식을로드하고 ajax를 통해 데이터 제출
  • 다음 scala - akka-http 파일 생성 및 클라이언트로 전송