python测试框架之Pytest(一) 安装&使用介绍

概述

Pytest 是一个比较成熟且功能完备的 Python 测试框架。其提供完善的在线文档,并有着大量的第三方插件和内置帮助,适用于许多小型或大型项目。Pytest 灵活易学,打印调试和测试执行期间可以捕获标准输出,适合简单的单元测试到复杂的功能测试。还可以执行 nose, unittest 和 doctest 风格的测试用例,甚至 Django 和 trial。支持良好的集成实践, 支持扩展的 xUnit 风格 setup,支持非 python 测试。支持生成测试覆盖率报告,支持 PEP8 兼容的编码风格。

主要特点有以下几点:

  • 简单灵活,容易上手,文档丰富;
  • 支持参数化,可以细粒度地控制要测试的测试用例;
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
  • 测试用例的skip和xfail处理;
  • 可以很好的和CI工具结合,例如jenkins
  • report框架----allure 也支持了pytest

Pytest官方文档:https://docs.pytest.org/en/latest/contents.html
python的测试工具大全:https://wiki.python.org/moin/PythonTestingToolsTaxonomy

Pytest 安装

安装:

pip install pytest

基本使用:

usage: py.test [options] [file_or_dir] [file_or_dir] [...]
# 展示已安装的版本
pytest --version 

# 显示可用的内置函数参数
pytest --fixtures
  
# 通过命令行插件帮助信息及配置文件选项
pytest --help

Pytest 用例编写

编码约束

  • 测试文件:必须满足 test_*.py 或 *_test.py 格式
  • 测试类:以Test开头,并且不能带有 init 方法(pytest只运行以Test开头的class)
  • 测试函数:以test_开头
  • 断言使用基本的assert即可
  • 在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

@pytest.mark.marker 用例标签

# 跳过测试
@pytest.mark.skip(reason=None)

# 满足某个条件时跳过该测试
@pytest.mark.skipif(condition)

# 预期该测试是失败的
@pytest.mark.xfail(condition, reason=None, run=True, raises=None, strict=False)

# 参数化测试函数。给测试用例添加参数,供运行时填充到测试中
# 如果 parametrize 的参数名称与 fixture 名冲突,则会覆盖掉 fixture
@pytest.mark.parametrize(argnames, argvalues)

# 对给定测试执行给定的 fixtures
# 这种用法与直接用 fixture 效果相同
# 只不过不需要把 fixture 名称作为参数放在方法声明当中
@pytest.mark.usefixtures(fixturename1, fixturename2, ...)

# 让测试尽早地被执行
@pytest.mark.tryfirst

# 让测试尽量晚执行
@pytest.mark.trylast

参考文章:https://www.cnblogs.com/df888/p/13715187.html

setup/teardown 用例前置

setup_module/teardown_module:.py文件中最先/最后执行,例如打开/断开数据库链接、回收内存资源等
setup/teardown:在测试方法之前执行,完成准备/收尾工作,例如测试数据、打开文件/回收内存资源等

备注:也可以在fixture函数中通过yield实现setup和teardown功能

详情请参考文章:https://blog.csdn.net/anndy_/article/details/119885380

@pytest.fixture():用例前置 & 参数化

参考文章:
https://blog.konghy.cn/2018/05/08/pytest/#fixtures

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值