Python:Python 自动化测试框架 unittest 和 pytest 对比

摘要:
使用pytest编写用例时,必须遵循以下规则:测试文件名必须以“test_”开头,或者测试方法必须以“test _”结尾。夹具可用于函数、模块、类和会话。2.Pytest支持用例执行失败重新运行,Pytest重新运行插件。

一、用例编写规则

    1.unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

  (1)测试文件必须先import unittest

  (2)测试类必须继承unittest.TestCase

  (3)测试方法必须以“test_”开头

  (4)测试类必须要有unittest.main()方法

 2.pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

       (1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)

  (2)测试方法必须以“test_”开头。

  (3)测试类命名以"Test"开头。

 总结: unittest :用例格式--复杂,不能兼容pytest用例;

     pytest:   用例格式--简单,可以兼容unittest用例;

二、用例前置和后置

    1.unittest提供了setUp/tearDown,只能针对所有用例。

    2.pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。

  • 模块级(setup_module/teardown_module)开始于模块始末,全局的

  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)

  • 方法级(setup_method/teardown_method)开始于方法始末(在类中)

  • 类里面的(setup/teardown)运行在调用方法的前后

pytest还可以在函数前加@pytest.fixture()装饰器,在测试用例中使用fixture函数。fixture的使用范围可以是function,module,class,session。
firture相对于setup和teardown来说有以下几点优势:

  • 命名方式灵活,不局限于setup和teardown这几个命名
  • conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
  • scope="module" 可以实现多个.py跨文件共享前置
  • scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
  • 用yield来唤醒teardown的执行

三、断言

     1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse。

   2.pytest直接使用assert 表达式。

四、报告

      1.unittest使用HTMLTestRunnerNew库。

    2.pytest有pytest-HTML、allure插件。

五、失败重跑

  1、unittest无此功能。

  2、pytest支持用例执行失败重跑,pytest-rerunfailures插件。

六、参数化

  1、unittest需依赖ddt库,

  2、pytest直接使用 @pytest.mark.parametrize 装饰器。

七、用例分类执行

  1、unittest默认执行全部的用例,可以通过加载testsuite执行部门模块用例;

  2、pytest可以通过 @pytest.mark 来标记测试用例,执行命令加上参数“-m”即可运行标记的用例

八、缺点

  unittest:

  1)不能批量注释跳过的case

  2)执行case执行的过程未临时保存,内部原理是将屏幕输出进行结果分析写入测试报告中

免责声明:文章转载自《Python:Python 自动化测试框架 unittest 和 pytest 对比》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UVa 1213 (01背包变形) Sum of Different PrimesC# 在Word表格中插入新行(表格含合并行)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python multiprocessing使用详解

multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。此外multiproc...

python 批量ping服务器

最近在https://pypi.python.org/pypi/mping/0.1.2找到了一个python包,可以用它来批量ping服务器,它是中国的大神写的,支持单个服务器、将服务器IP写在txt或json里都可以。 具体用法有中文文档,感谢作者youfou 这里我改了几个字,方便我这种英文不好的同学使用 mping.py #!/usr/bin/en...

Python3 -- 查看python安装路径以及pip安装的包列表及路径

1. 查看python路径终端输入命令: whereis python 假设你的电脑上同时安装了python2和python3,可以使用使用以下命令分别查看其安装路径: whereis python2 whereis python3 2.查看使用pip安装的软件包默认python3 pip list python2查看pip安装的软件包名称及版本 pyth...

Linux下多版本python共存时,默认执行路径修改方法

遇到的问题和环境是这样:首先workspace上存在一个Python2.7和一个Python3.5,其中Python3.5是理想的运行环境,有很多自定义模块,运行代码时需要这个环境。原本默认是在这个环境下跑的,后来安装了一个叫miniconda3的东西,里面自带一个Python3.7环境,于是问题来了,所有执行程序全部变成了使用这个新的Python3.7环...

python网络/并发编程部分简单整理

软件开发架构C/S架构:Client与Server客户端与服务器端架构 .exeB/S架构:Browser与Server浏览器端与服务器端架构IP地址: IP地址是指互联网协议地址 IP地址通常用“点分十进制”表示,实际上是32位二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)port: 设备与外界通讯交流的出口...

pytest实例

一、题目:       实现一个测试用例集合,包含3个类TestA TestB TestC,每个类包含3个方法,总共9个方法test_1到test_9,完成特定动作只要print打印即可。执行顺序如下:       1、测试module开始执行       2、TestA       3、TestA teardown清理环境       4、TestB每个...