fixture+pytest

75 阅读1分钟

fixture夹具,@pytest.fixture

  1. (scope="function")每一个函数或方法都会调用
import pytest

@pytest.fixture(scope="function",autouse=True)
def fixture1():
    print("我是前置步骤1。。。")
    return 4

@pytest.fixture(scope="function")
def fixture2():
    print("我是前置步骤2。。。")
    return 4

def test_fixture1(fixture1,fixture2):
    assert fixture1==4
    assert fixture2 == 4

def test_fixture2():
    assert 1==1


if __name__ == '__main__':
    pytest.main()

image.png

  • 只初始化一次
import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver


@pytest.fixture()
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    return driver


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="https://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 == "百度一下"

(scope="class")每一个类调用一次

  • TestBaidu类只打开一次浏览器
import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver


# 只打开一次浏览器
@pytest.fixture(scope="class")
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    print("打开浏览器")
    return driver


class TestBaidu:

    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="https://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_baidu2(self, driver):
        driver.get("https://www.baidu.com/")
        title = driver.title
        url = driver.current_url
        text = driver.find_element(By.CSS_SELECTOR, 'a[href="https://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 == "百度一下"

(scope="module")每一个.py文件调用一次

(scope="session")是多个文件调用一次,.py文件就是module