使用conftest.py管理login操作
当testcase文件下有多个测试用例文件(test_.py)的所有用例都需要用登录功能来作为前置操作,那每个test_.py都有加 setup_module()、 teardown_module(),同样造成代码重复。此时,可使用conftest.py存放所有全局通用的方法,单独管理一些全局的fixture。
conftest.py配置fixture注意事项
- pytest会默认读取conftest.py里面的所有fixture conftest.py 文件名称是固定的,不能改动
- conftest.py只对同一个package下的所有测试用例生效
- 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py 测试用例文件中不需要手动import
- conftest.py,pytest会自动查找
登录放入conftest.py,源码如下:
import pytest
from common.browser import SelectBrowser
from page.login import Login
#scope='session',session 是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
@pytest.fixture(scope='session', autouse=True)
def login(request):
driver = SelectBrowser.open_brower("firefox")
t = Login(driver)
t.manage_login("test", "test")
def fn():
driver.quit()
request.addfinalizer(fn)
return driver
测试用例文件也要进行更改,调用conftest.py的login fixture
from common.browser import SelectBrowser
from page.login import login, Login
from page.adPosterManage import ADPostMangeger
import pytest
driver = SelectBrowser.open_brower("firefox")
# def setup_module():
# """每个模块前执行都需要登录"""
# t = Login(driver)
# t.manage_login("admin", "admin")
def test_add_ad_success(login):
"""资源位添加成功"""
ad = ADPostMangeger(login)
ad_text = ad.test_add_ad(advertName='资源位置1103', start_time="2021-11-03 00:00:00",
end_time="2021-12-03 00:00:00", route_value='1737', sort_value='100',
pic_path="D:\\0testpic\ABS纯色图\\1.png")
assert ad_text=='资源位置1103'
def test_add_ad_faild(login):
"""资源位置必填校验,添加失败"""
ad = ADPostMangeger(login)
ad_text = ad.test_add_ad(advertName='', start_time="2021-11-03 00:00:00",
end_time="2021-12-03 00:00:00", route_value='1737', sort_value='100',
pic_path="D:\\0testpic\ABS纯色图\\1.png")
assert ad_text!='资源位置1103'
# def teardown_module():
# """每个模块执行完成后都需要关闭浏览器"""
# driver.quit()