欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > pytest钩子函数

pytest钩子函数

2024/11/30 6:39:56 来源:https://blog.csdn.net/qq_39813400/article/details/141964962  浏览:    关键词:pytest钩子函数

pytest 给我们开放了大量的 hook 函数,可以编写插件

pytest 可以识别到三种插件:

内置插件:从 pytest 内部 _pytest 目录加载的插件

外部插件:通过 pip 安装的插件(比如: pip install pytest-ordering )。

conftest.py 插件:测试目录中的 conftest.py 加载

钩子函数:

pytest hook 链接: https://docs.pytest.org/en/stable/reference.html?#hooks

pytest hook 函数也叫钩子函数,是pytest 框架开发者为用户预留的一些函,pytest 提供了大量的钩子函数,可以在用例的不同生命周期自动调用

使用:

执行完测试用例后,需要对结果进行汇总,用例总数,失败用例数,成功用例数等。

pytest有自带的一个钩子函数:pytest_terminal_summary

# conftest.pydef pytest_terminal_summary(terminalreporter, exitstatus, config):""":param terminalreporter: 报告汇总:param exitstatus: 退出状态:param config: 全局 Config 对象, 等同于 request.config:return:exitstatus:0 -- 用例全部通过1 -- 有用例失败2 -- 收集用i就失败了,还没执行3 -- 其他报错4 -- 其他报错5 -- 收集到0条用例"""print(f'退出状态:{exitstatus}')# 获取环境地址base_url = config.option.base_urlprint(f'获取到的base_url: {base_url}')total = terminalreporter._numcollectedif exitstatus in [0, 1]:passed = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])failed = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])skipped = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])error = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])successful = len(terminalreporter.stats.get('passed', [])) / terminalreporter._numcollected * 100duration = time.time() - terminalreporter._sessionstarttimemarkdown_text = f"""### 执行结果:  - 运行环境: 测试环境  - 运行base_url: {base_url}- 持续时间: {duration: .2f} 秒  ### 本次运行结果:  - 总用例数: {total}  - 通过用例:{passed}  - 跳过用例:{skipped}- 失败用例: {failed}  - 异常用例: {error}  - 通过率: {successful:.2f} % \n  """print(f'用例执行结果:{markdown_text}')with open("summary.json", 'w', encoding='utf-8') as fp:summary = {"total": total,"passed": passed,"failed": failed,"skipped": skipped,"error": error,"successful": f'{successful:.2f} %',"duration": duration}import jsonfp.write(json.dumps(summary, indent=4))"""后面这里可以写发送邮件或者其他形式的通知"""else:print('未收集到测试用例')
# test_allure_3.pyimport allure
import requests
import jsonclass TestDemo:def test_x1(self):"""输入正确的用户名和密码"""with allure.step('步骤1:登录前'):print('步骤1:登录前')allure.dynamic.feature('动态添加功能点1')print('x11111')allure.dynamic.title('动态添加title11')with allure.step('步骤2:登录后'):print('登录结束')def test_x2(self):"""输入错误的用户名和密码"""with allure.step('步骤1:登录前'):print('步骤1:登录前')allure.dynamic.feature('动态添加功能点2')print('x222222')allure.dynamic.title('动态添加title22')with allure.step('步骤2:登录后'):print('登录结束')

参考:
https://blog.51cto.com/u_14844/6385694

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com