一、pytest 介绍、运行、参数化和数据驱动、Fixture pytest安装与介绍
官网 : pip install -U pytest
查看版本号:pytest --version
为何选择pytest兼容unittest
定制化插件开发
pycharm 配置githubVSC--Git--Remotes...
pycharm pytest 配置settings--搜索pytest--Python integrated Tools--testing--选择pytest:根据黄色叹号fix安装pytest安装到环境
pytest命名规则python风格规范:
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/
pytest:
文件名: test_开头 或者 _test 结尾
类名:Test 开头
方法(类内)/函数名(类外):test_开头
注意:测试类中不可以添加__init__构造函数
pytest运行测试用例 1 - pycharm 2 - 命令行运行方式 - 推荐(以便后续持续集成)可能会遇到的找不到模块的路径问题,需要在导包之前引入路径 import sys sys.path.append('路径')
运行包: pytest (pytest会自动检索当前目录下所有符合规则的测试用例)
运行一个模块:pytest -vs test.py
只执行某一条测试用例:pytest 目录/模块.py::类名::用例名
常用命令行参数pytest --help: 获取所有参数列表
-x: 用例一旦失败(fail/error),就立刻停止
使用场景:一般用于冒烟测试
冒烟测试最早由google提出的一个概念,一般针对每日构建的版本,对系统的基本功能进行简单测试的测试类型,主要强调程序主体的功能
--maxfail=num: 用例达到最大数num停止运行
-m: 标记用例
-k: 执行包含某个关键字的测试用例
-v: 打印详细日志
-s 打印输出日志(一般-vs一块使用)
--collect-only:(测试平台,pytest 自动导入功能)
标记测试用例:mark场景:只执行符合要求的某一部分用例,把项目分为多个模块,然后指定模块名称执行
解决:在测试用例的上方加上pytest装饰器:@pytest.mark.标签名
执行 -m 标记自定义的相关用例
pytest -s test_mark.py -m=标签名
pytest -s test_mark.py -m 标签名
pytest -s test_mark.py -m "not 标签名" (not:逻辑运算,表示不是标签名的都去执行)
跳过(skip)及预期失败(xfail)pytest的内置标签,可以处理一些特殊的、及不能成功的测试用例
ship: 始终跳过该用例
方式1: @pytest.mark.skp(reason="代码没有实现")
方式2:在测试用代码中添加判断的语句def test_demo(): if not login(): pytest.skip("未登录无法运行该用例")
skipif: 遇到特定情况跳过该测试用例,需要给定条件
@pytest.mark.skipif(条件="", reason="打印提示信息内容")
xfail: 遇到特殊情况,产生一个“期望失败”输出
运行结果分析常用:fail error pass
特殊结果:
warning
deselect
pytest常用执行参数 ---------- 更多用法使用 pytest --help 查看帮助文档 用例匹配:pytest -k "add" 匹配所有用例名称中包含add的用例
pytest -m mark 标签名、标记:在测试用例上添加装饰器 @pytest.mark.login
pytest有很多自带的标签,我们自己定的标签,如login 他会不识别,所以在运行后会有 deselected、warnings
警告信息,需要创建pytest配置文件:pytest.ini
pytest --junitxml=./result.xml 生成执行结果文件
pytest --setup-show 回溯fixture的执行过程
pytest.ini:pytest.ini是pytest的配置文件
文件内容要以 [pytest] 开头
修改pytest模块名、类名、用例名称规则(以什么开头:如pytest文件名和用例名默认以test_* 开头或结尾)
python_files (args):用于Python测试模块发现的全局样式文件模式(文件名)
python_classes (args):前缀或glob名称,用于发现Python测试类(类名)
python_functions (args): Python测试函数和方法发现的前缀或glob名称(方法名)
addopts:添加一个或多个命令行参数,如,添加 -vs 命令参数后:运行pytest test_case.py 等同于 pytest -vs test_case.py
pytest.ini [pytest] # 为测试用例添加标签 markers = login search # 修改pytest模块名、类名、用例名称规则(以什么开头:如pytest文件名和用例名默认以test_* 开头或结尾) pytest_files = test_* *_test check_* pytest_functions = test_* *_test check_* # 添加一个或多个命令行参数,如,添加 -vs 命令参数后:运行pytest test_case.py 等同于 pytest -vs test_case.py addopts = -vs --alluredir=./result pytest框架结构setup() teardown() 类方法运行前后被调用
模块级别:setup_module/teardown_module 全局的、优先级最高
函数级别:setup_function/teardown_function 只在函数用例生效(与方法的级的区别:不在类中)
类级别:setup_class/teardown_class 只在类中前后运行一次(在类中)