美文网首页
44. conftest 共享fixture/后置步骤yield

44. conftest 共享fixture/后置步骤yield

作者: 薛东弗斯 | 来源:发表于2024-03-21 07:17 被阅读0次
    image.png
    image.png

    将公共前置部分放到conftest.py (一般,web测试就是将打开浏览器放到前置去做)

    # conftest.py 
    import pytest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    
    @pytest.fixture(scope="session")
    def driver():
        driver = webdriver.Chrome()
        driver.maximize_window()
        print("打开浏览器")
        return driver
    
    # test_fixture.py
    import pytest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    class TestBaidu:
    
        def test_baidu(self, driver):
            driver.get("https://www.baidu.com/")
            title = driver.title
            url = driver.current_url
            text = driver.find_element(By.CSS_SELECTOR, 'a[href="http://news.baidu.com"]').text
            button_text = driver.find_element(By.ID, 'su').accessible_name
            assert title == "百度一下,你就知道"
            assert url == "https://www.baidu.com/"
            assert text == "新闻"
            assert button_text == "百度一下"
    
        def test_baidu1(self, driver):
            driver.get("https://www.baidu.com/")
            title = driver.title
            url = driver.current_url
            text = driver.find_element(By.CSS_SELECTOR, 'a[href="http://news.baidu.com"]').text
            button_text = driver.find_element(By.ID, 'su').accessible_name
            assert title == "百度一下,你就知道"
            assert url == "https://www.baidu.com/"
            assert text == "新闻"
            assert button_text == "百度一下"
    #         后置处理
    
    if __name__ == '__main__':
        pytest.main()
    
    

    session、module、function、class级别区别

    # conftest.py
    
    import pytest
    from selenium import webdriver
    
    @pytest.fixture(scope="session")
    def driver():
        driver = webdriver.Chrome()
        driver.maximize_window()
        print("打开浏览器")
        return driver
    
    @pytest.fixture(scope="session",autouse=True)
    def session():
        print("我是session级别")
    
    @pytest.fixture(scope="module",autouse=True)
    def module():
        print("我是module级别")
    
    @pytest.fixture(scope="class",autouse=True)
    def ts_classn():
        print("我是class级别")
    
    @pytest.fixture(scope="function",autouse=True)
    def function():
        print("我是function级别")
    
    # test_one.py
    class TestOne:
        def test_one(self):
            assert 1 == 1
    
        def test_two(self):
            assert 1 == 1
    
    
    # test_two.py
    class TestTwo:
        def test_one(self):
            assert 1 == 1
    
        def test_two(self):
            assert 1 == 1
    
    (venv) C:\Users\xxx\PycharmProjects\spider\CH0>pytest
    ================================================================= test session starts =================================================================
    platform win32 -- Python 3.7.6, pytest-7.4.4, pluggy-1.2.0 -- C:\Users\wesley\PycharmProjects\spider\venv\Scripts\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\wesley\PycharmProjects\spider
    configfile: pytest.ini
    plugins: assume-2.4.3, ordering-0.6
    collected 4 items                                                                                                                                      
    
    test_one.py::TestOne::test_one 我是session级别
    我是module级别
    我是class级别
    我是function级别
    PASSED
    test_one.py::TestOne::test_two 我是function级别
    PASSED
    test_two.py::TestTwo::test_one 我是module级别
    我是class级别
    我是function级别
    PASSED
    test_two.py::TestTwo::test_two 我是function级别
    PASSED
    
    ================================================================== 4 passed in 0.02s ==================================================================
    
    image.png

    function: 每个测试用例都会执行,但是最后执行
    session:只执行一次
    module:每个.py文件执行一次
    class:每个类执行一次

    fixture夹具,使用yield做后置(测试完成后链接数据库删除测试数据、关闭浏览器等)

    @pytest.fixture(scope="session")
    def driver():
        driver = webdriver.Chrome()
        driver.maximize_window()
        print("打开浏览器")
        yield driver
        driver.quit()
    
    # conftest.py
    import pytest
    from selenium import webdriver
    
    @pytest.fixture(scope="session")
    def driver_project():
        global driver
        driver = webdriver.Chrome()
        driver.maximize_window()
        driver.get("http://meikefresh.5istudy.online/")
        print("打开浏览器")
        yield driver
        print("关闭浏览器")
        driver.close()
        driver.quit()
    
    
    @pytest.fixture(autouse=True)
    def fixture():
        print("我是前置步骤")
        yield
        print("我是后置步骤")
    

    return: 后面的代码就不会被执行
    yield:其后面的代码会被执行

    相关文章

      网友评论

          本文标题:44. conftest 共享fixture/后置步骤yield

          本文链接:https://www.haomeiwen.com/subject/trmnzdtx.html