一、conftest是什么?
conftest是pytest进阶中的高级应用,最近正好用到这一块儿,研究之后,向大家分享该高级应用。
二、使用步骤
1.conftest代码块
以全局性使用driver为主,只启动一次浏览器:
@pytest.fixture(scope='session') # 以此实现多个用例,只启动一次浏览器
def browser():
global driver
driver = None # 需要给一个初始化的值
'''定义全局driver参数'''
browser_name = 'chrome'
if driver is None:
if browser_name == 'chrome':
# driver = webdriver.Chrome(executable_path="../driver/chromedriver.exe")
driver = webdriver.Chrome()
driver.maximize_window()
elif browser_name == 'firefox':
driver = webdriver.Firefox()
elif browser_name == 'ie':
driver = webdriver.Ie()
else:
log.error('传入的浏览器名称有误')
driver.implicitly_wait(10)
log.debug(f"正在启动浏览器:{browser_name}")
yield driver
log.debug("正在关闭浏览器")
time.sleep(5)
driver.close()
return driver
2.使用方法
在test_hao123中进行使用:
@allure.step(title="测试一个元素多种定位方式") @allure.severity(allure.severity_level.BLOCKER)#CRITICAL,NORMAL,MINOR,TRIVIAL @allure.issue("https://www.baidu.com") def test_2(self, browser):allure.attach("描述","测试步骤002的描述...")self.driver = browserself.open_url("https://www.hao123.com/")self.driver.find_element(By.XPATH,'//*[@id="search"]/form/div[2]/input').send_keys("conftest")sleep(5)# self.hao123.run_test();
注意:
test_hao123方法中的传参browser要跟conftest中的方法保持一致,无需做其他配置,前提conftest所在的目录要有__init__文件
pytest在conftest文件中钩子的使用方法
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):# 获取钩子方法的调用结果out = yield# print('用例执行结果', out) # 3. 从钩子方法的调用结果中获取测试报告report = out.get_result()if report.when == "call":print('测试报告:%s' % report)print('步骤:%s' % report.when)print('nodeid:%s' % report.nodeid)print('description:%s' % str(item.function.__doc__))print(('运行结果: %s' % report.outcome))log.info('nodeid:%s' % report.nodeid)log.info('运行结果: %s' % report.outcome)