pytest前后置

定义fixture:

  • 创建conftest.py文件(位置不同,作用范围不同),文件中保存前置和后置。使用时不需要导入此文件
  • 定义一个函数:包含前置操作、后置操作
  • 把函数声明为fixture:在函数上面加上@pytest.fixture(作用级别=默认为function)
    • function:默认范围,每个函数或方法都会调用
    • class:每个类调用
    • module:每个.py文件调用一次,文件中可以有多个function和class
    • session:多个文件调用一次,可以跨文件,如在.py文件中,
  • fixture的定义:
    • 有返回值,将返回内容写在yield后面
    • 测试用例中,调用有返回值的fixture函数时,韩式名称就是代表其返回值
    • 测试用例中,函数名称作为用例的参数
  • 多个fixture间调用
    • 调用时只需调用最后的fixture方法,此方法调用其他fixture方法
  • fixture自动应用
    • 在fixture中添加autouse=True
import pytest
from selenium import webdriver

@pytest.fixture(scope="session")
def open_url():
    driver = webdriver.Chrome()
    driver.get("[http://www.baidu.com](http://www.baidu.com/)")
    yield driver
    driver.quit()

# @pytest.fixture(scope="session")
@pytest.fixture(scope="session", autouse=True)
def refresh_page(open_url):
    yield
    open_url.refresh()
import time
import pytest
# 运行时会自动调用
# @pytest.mark.usefixtures("open_url")
# @pytest.mark.usefixtures("refresh_page")
class TestPytest:
@pytest.mark.smoke
def test_smoke(self):
    print(6*"=", "smoke", 6*"=")
    # open_url.get("[https://www.sina.com.cn](https://www.sina.com.cn/)")
    time.sleep(6)
    print("test_smoke 方法执行了。。。")
    assert 1 == 1

你可能感兴趣的:(pytest前后置)