核心pytest-conftest文件使用
一、conftest特点:
- 可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
- 不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在改package内有效,可有多个conftest.py
- conftest.py配置脚本名称是固定的,不能改名称
- conftest.py文件不能被其他文件导入
- 所有同目录测试文件运行前都会执行conftest.py文件
二、pytest-fixture
fixture的作用是将一些非核心测试逻辑(如测试数据检索和生成)从测试函数中分离出来,以便其它测试复用
作用范围:scope便是定义用例域的范围
- function:默认范围,每一个函数或方法都会调用,不填写时便是它
- class:每一个类调用一次
- module: 每一个.py文件调用一次,文件中可以有多个function和class
- session:多个文件调用一次,可以跨文件,如在.py文件中,每一个.py文件就是module
范围: session > module > class > function
三、conftest结合fixture的使用
使用fixture执行配置及销毁逻辑
场景:测试用例执行时,有的业务必须先执行(预置条件)
例如:登录,连接数据库、停止数据库连接等
解决:
1)导入pytest
2)在登录的函数上面加@pytest.fixture()
3)在要使用的测试方法中传入(登录函数名称)
4)不传入的就不登录直接执行测试方法
项目实例:

# conftest.py from web.common.driver_factory import Driver import pytest @pytest.fixture(autouse=False) def login(driver): login = LoginPage(driver) login.open() login.username.send_keys('admin123') login.password.send_keys('12345678') login.submit.click() @pytest.fixture(scope='function') def driver(): # 打开driver driver = Driver.get_driver() yield driver #关闭driver driver.close()
# test_indexsearch.py
from web.page.indexsearch_page import IndexSearchPage
import pytest
class TestIndexSearch:
def test_indexsearch_001(self,driver,login):
search = IndexSearchPage(driver)
search.open()
search.selectDate('1','三星')
def test_indexsearch_002(self):
search = IndexSearchPage()
search.open()
search.selectDate('2', '耳机')
data = [('1','三星'),('2','耳机')]
@pytest.mark.parametrize('index,keyword',data)
def test_indexsearch_003(self,driver,login,index,keyword):
search = IndexSearchPage(driver)
search.open()
search.selectDate('2', '耳机')
- 在包tests下模块中的测试用例在执行前需要先执行conftest.py中的login,driver函数
- 参数autouse=False时,测试用例在执行前想要先执行login函数时,需要把login传给函数,即test_indexsearch_001(self,driver,login),若不传则在运行前不会先执行login函数
- 参数autouse=True时,无需传login函数,测试用例在执行前都会先执行login函数
- 参数scope='class'时,在类TestIndexSearch中多个测试用例只会调用一次driver函数
- 参数scope='fuction'时,在类TestIndexSearch中不同测试用例执行前都会调用一次driver函数
- yield的作用,相当于return,如函数test_indexsearch_001,执行顺序是driver中driver = Driver.get_driver(),yield driver代码、执行login函数、执行test_indexsearch_001函数、再执行driver中的 driver.close()代码
二、pytest-fixturefixture的作用是将一些非核心测试逻辑(如测试数据检索和生成)从测试函数中分离出来,以便其它测试复用
作用范围:scope便是定义用例域的范围
function:默认范围,每一个函数或方法都会调用,不填写时便是它class:每一个类调用一次module: 每一个.py文件调用一次,文件中可以有多个function和classsession:多个文件调用一次,可以跨文件,如在.py文件中,每一个.py文件就是module范围: session > module > class > function
浙公网安备 33010602011771号