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 = browser self.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.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)