python测试框架-pytest

一、pytest 介绍、运行、参数化和数据驱动、Fixture pytest安装与介绍

官网 : pip install -U pytest

查看版本号:pytest --version

为何选择pytest

兼容unittest

定制化插件开发

pycharm 配置github

VSC--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="打印提示信息内容")

image

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.ini [pytest] # markers 帮助文档解释:为你的测试用例添加标签 markers = login search '个人中心'

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 只在类中前后运行一次(在类中)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsdzz.html