做网站怎么防止被黑,沧州建设厅网站,php mysql网站开发教程,平面设计兼职网站1. pytest 介绍 是什么#xff1a;Python 最流行的单元测试框架之一#xff0c;支持复杂的功能测试和插件扩展。 优点#xff1a; 语法简洁#xff08;用 assert 替代 self.assertEqual#xff09;。 自动发现测试用例。 丰富的插件生态#xff08;如失败重试、并发执…1. pytest 介绍 是什么Python 最流行的单元测试框架之一支持复杂的功能测试和插件扩展。 优点 语法简洁用 assert 替代 self.assertEqual。 自动发现测试用例。 丰富的插件生态如失败重试、并发执行、报告生成。 兼容unittest框架比自带unittest框架更加简洁高效在unittest框架迁移到pytest框架时不需要重写代码。 适用场景单元测试、接口测试、UI 自动化测试。 2. pytest 环境搭建
安装 pytest
bash
复制
pip install pytest
查看pytest是否安装成功
pip show pytest
常用扩展插件
bash
复制
pip install pytest-html # HTML 报告
pip install pytest-xdist # 并发执行
pip install pytest-rerunfailures # 失败重试
pip install allure-pytest # Allure 报告集成 3. pytest 用例规则 文件命名以 test_ 开头或结尾如 test_login.py 或 login_test.py。 函数/类命名 测试函数以 test_ 开头如 test_login_success。 测试类以 Test 开头如 TestLogin且类中不能有 __init__ 方法。 断言直接使用 assert如 assert response.status_code 200。 setup和teardown模块级类级方法级函数级 setup_module和teardown_module在整个测试用例文件中所有方法运行前后仅运行1次 setup_class和teardown_class在一个Class中所有用例前后运行1次 setup_method和teardown_method在Class下的每个方法前后运行 setup_function和teardown_function在非Class下的每个方法前后运行 4. pytest 用例编写
示例
python
复制
# 测试函数
def test_add():assert 1 1 2# 测试类
class TestMath:def test_multiply(self):assert 2 * 3 6 5. pytest 用例执行顺序 默认顺序按文件名和测试函数/方法的 ASCII 码顺序执行。 自定义顺序 使用 pytest-ordering 插件 python 复制 pytest.mark.run(order1)
def test_login():pass 6. pytest 用例重跑 使用插件pytest-rerunfailures 命令行参数 bash 复制 pytest --reruns 3 --reruns-delay 2 # 失败后重试3次间隔2秒 7. pytest 用例并发 使用插件pytest-xdist 命令行参数 bash 复制 pytest -n 4 # 启动4个进程并发执行 8. pytest 用例跳过 无条件跳过 python 复制 pytest.mark.skip(reason功能未实现)
def test_unimplemented():pass 条件跳过 python 复制 pytest.mark.skipif(sys.platform win32, reasonWindows 不支持)
def test_linux_only():pass 9. pytest 用例条件判断 结合 pytest.mark.skipif 或自定义条件逻辑 python 复制 def test_feature():if not has_feature():pytest.skip(环境不支持此功能)# 正常测试逻辑 10. pytest 数据初始化与清除
fixture(scopefunction, paramsNone, autouseFalse, idsNone, nameNone)
pytest提供的fixture实现unittest中setup和teardown功能可以在每次case执行前初始化数据不同点是fixture可以只在执行特定case之前运行使用更灵活autouse参数默认False须手动调用只有True时才自动执行scope参数 有四个级别参数 function: 在conftest作用域下每一个test开头的测试方法运行前都会执行一次 class: 在conftest作用域下每一个Test开头的测试类运行前都会执行一次 module: 在conftest作用域下每一个test开头的测试模块运行前都会执行一次 session: 在conftest作用域下这个包运行前只会执行一次
fixture的使用方法
使用函数名直接调用但没有返回值 pytest.mark.usefixtures(function_name)
需要使用到fixture返回值 直接在对应的接口函数里加入一个形参参数名就是fixture函数名 11. pytest 用例定制化执行
添加mark标签可筛选出对应业务模块的部分接口
对于Pytest每一个模块类方法和用例前都加上mark那样在pytest运行的时候就可以只运行带有该mark标签的模块类或用例在配置文件pytest.ini里注册标签在类名/方法名前打标签
pytest.mark.标签名
在类中/方法中打标签:
pytestmark pytest.mark.标签名
执行时可根据标签名来执行想要的用例例如运行所有标记为login的测试
pytest -m login
其他运行参数
-m,user_add,-m,user_add or user_list,-m,not user_add,-m, not (user_add or user_list)-k匹配用例文件名非接口名称可全部匹配可模糊匹配-v节点 --多层化-s 详细输出打印 -q 简化打印 12. pytest 参数化 核心装饰器pytest.mark.parametrize 示例 python 复制 pytest.mark.parametrize(a, b, expected, [(1, 2, 3),(0, 0, 0),(-1, 1, 0),
])
def test_add(a, b, expected):assert a b expected 13. pytest 插件介绍 常用插件 pytest-html生成 HTML 测试报告。 pytest-cov生成代码覆盖率报告。 pytest-mock集成 Mock 功能。 pytest-djangoDjango 项目测试支持。 14. pytest 插件执行
安装与使用
bash
复制
# 安装插件
pip install pytest-html# 执行并生成 HTML 报告
pytest --htmlreport.html 15. pytest 集成 Allure
步骤 安装 Allure 命令行工具需 Java 环境 下载allure.zip 解压allure.zip到一个文件目录中 把解压路径添加到环境变量Path中 pip isntall pytest-allure 验证安装完成
方法一 执行pytest单元测试生成Allure报告需要的数据存在的目录 pytest -sq --alluredir ../report/tmp 执行命令生成测试报告 allure generate ../report/tmp -o ../report/report --clean
方法二 生成 Allure 结果数据 bash 复制 pytest --alluredir./allure-results 生成可视化报告 bash 复制 allure serve ./allure-results # 本地查看
allure generate ./allure-results -o ./report --clean # 生成静态报告 16. pytest 生成测试报告
多种报告形式
Python主流自动化测试报告插件HTMLTestRunnerBeautifulReportAllureAllure是一款轻量级开源自动化测试报告生成框架支持绝大部分测试框架包括TestNGJunitpytestunittest等pytest框架结合Allure可生成格式统一美观的测试报告 简单文本报告 bash 复制 pytest -v # 输出详细结果 HTML 报告 bash 复制 pytest --htmlreport.html Allure 报告需集成 bash 复制 pytest --alluredir./results allure serve ./results 总结 核心优势简洁语法 插件生态 高度可定制化。 最佳实践 使用参数化减少重复代码。 结合 CI/CD如 Jenkins、GitHub Actions自动化测试。 通过 Allure 或 HTML 报告直观分析结果。