当前位置: 首页 > news >正文

Python测试框架pytest介绍用法

1、介绍

pytest是python的一种单元测试框架,同自带的unittest测试框架类似,相比于unittest框架使用起来更简洁、效率更高
pip install -U pytest

特点:
1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2.支持简单的单元测试和复杂的功能测试
3.支持参数化
4.执行测试过程中可以将某些测试跳过,或者对某些预期失败的Case标记成失败
5.支持重复执行失败的Case
6.支持运行由Nose,Unittest编写的测试Case
7.具有很多第三方插件,并且可以自定义扩展
8.方便的和持续集成工具集成

2、入门案例

import pytestdef test_a():print("test_a")return 1 * 0def test_b():print("test_b")return 1 / 0if __name__ == '__main__':pytest.main(["-s"])

在这里插入图片描述

3、配置文件

默认规则:
模块名称为 test_*.py*_test.py
类名称为Test开头

配置文件:pytest.ini

[pytest]
addopts = -s   # 通常是- 或者 -- 开头内容
testpaths = ./  # 测试模块所在目录
python_files = test_*.py *test.py   # 测试模块文件名称规则,多个内容用空格分隔
python_classes = Tedt_*  # 测试类名称规则
python_functions = test_* # 测试类函数或者方法的名称规则

4、标记跳过测试

无条件跳过:


@pytest.mark.skip(reason="我想跳过")
def test_b():print("test_b")return 1 / 0@pytest.mark.xfail(raises=ZeroDivisionError)
def test_c():print("test_b")return 1 / 0

有条件跳过:

@pytest.mark.skipif(2>10,reason="条件成立跳过)
def test_c():print("test_c")

5、参数化

对于相似的过程,但数据不一样的时候,可以使用参数化

parameterize(self.argnames, argvalues, ids=None):
- argnames 参数名称 列表或者元组
- argvalues 参数值 列表套元组
- ids 测试id,可省略

例子:

@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4)])
def test_a(a, b):print("test_a++++++++++++++")assert a + b < 100

6、夹具(前后固件)

在测试之前和之后执行,用于固定测试环境,及清理回收测试资源

# 方法夹具
def setup_method(self):print("方法用例执行之前,需要的操作:热身")def teardown_method(self):print("方法用例执行之前,需要的而操作:拉伸")# 类夹具
def setup_class(self):passdef teardown_class(self):pass# 函数夹具
def teardown_function():print("函数执行之前:拉伸")def setup_function():print("函数执行之前:热身")# 摸块夹具
def teardown_module():print("函数执行之前:拉伸")def setup_module():print("函数执行之前:热身")

7、插件

生成测试报告
安装: pip install pytest-html

使用:
1、命令行方式:pytest --html=存储路径/report.html
2、配置文件方式:

[pytest]
addopts = -s --html=./report.html

多线程运行:pytest-xdist
控制用例的执行顺序:pytest-ordeing
失败用例重跑:pytest-returnfailures
生成企业级专业版的测试报告:allure-pytest
测试框架本身:pytest
管理基础路径:pytest-base-url

相关文章:

  • 安卓面试题 11-20
  • Unity 动画(旧版-新版)
  • 【ARM 嵌入式 编译系列 10.5 -- .linkonce 段详细介绍】
  • OpenHarmony教程指南—事件的订阅和发布
  • ospf虚链路实验简述
  • vue2 elementui 封装一个动态表单复杂组件
  • Neo4J
  • 数据库_关系代数的运算
  • Oracle存储过程干货(一):存储过程基础
  • 双体系Java学习之算术运算符,赋值运算符,关系运算符
  • 20个Python函数程序实例
  • mysql的语法学习总结3(一些常见的问题)
  • C语言:判断闰年(简单)
  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
  • matlab 提取分割位于多边形区域边缘内部或边缘上的点
  • 【347天】每日项目总结系列085(2018.01.18)
  • HTTP那些事
  • interface和setter,getter
  • Linux Process Manage
  • MQ框架的比较
  • React Native移动开发实战-3-实现页面间的数据传递
  • SQLServer插入数据
  • use Google search engine
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue学习第二天
  • 半理解系列--Promise的进化史
  • 对象引论
  • 面试总结JavaScript篇
  • 你真的知道 == 和 equals 的区别吗?
  • 入门级的git使用指北
  • 山寨一个 Promise
  • 首页查询功能的一次实现过程
  • ionic入门之数据绑定显示-1
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • MPAndroidChart 教程:Y轴 YAxis
  • # 安徽锐锋科技IDMS系统简介
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二十四)Flask之flask-session组件
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .gitignore文件_Git:.gitignore
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net mvc总结
  • .NetCore项目nginx发布
  • .Net语言中的StringBuilder:入门到精通
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [<死锁专题>]
  • [1]-基于图搜索的路径规划基础
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [Angular 基础] - 数据绑定(databinding)