Pytest和Unittest的区别

本文比较了unittest和pytest两个Python测试框架的特性,包括用例编写、断言方式、测试报告生成、失败重跑机制、参数化测试以及用例分类执行。unittest作为标准库,提供基础的测试结构,而pytest作为其扩展,具有更简洁的语法和额外的功能,如内置的断言、兼容unittest用例、支持失败重跑和灵活的fixture管理。
摘要由CSDN通过智能技术生成

一、用例编写

  • unittest
  1. 使用自定义的测试类TestFixture(如:MyTestBaidu),必须继承unittest.Testcase
  2. TestSuite:测试套件,使用需要声明unittest.Test.TestSuite().
  3. 测试方法必须以“test_”开头
  4. 执行测试类必须要方法unittest.main()
  5. unittest提供了test_case、test_suite、test_fixture、test_runner相关的类让测试更加明确、方便、可控,使用unittest编写测试用例
  6. unittest:用例格式复杂,不能兼容pytest用例
  • pytest
  1. 测试文件名必须以“test_”开头或者“_test”结尾
  2. 测试方法必须以“test_“开头
  3. 测试类名必须以“Test”开头
  4. pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效
  5. pytest:用例格式-简单,可以兼容unittest用例,运行不需要main

二、断言

  1. pytest:直接使用assert表达式,原生态的pythoin断言函数
  2. unittest:unittest提供了assertEqual、assertIn、assertTure、assertFalse

三、测试报告

  1. unittest:使用HTMLTestRunner库生成测试报告
  2. pytest有pytest-HTML、allure插件

四、失败重跑机制

  1. unittest:无失败重跑机制
  2. pytest:pytest支持用例的失败重跑,使用的是pytest-rerunfailure插件

,。五、参数化

  1. unittest:需要依赖ddt库进行数据驱动
  2. pytest:直接使用@pytest.mark.parametrize装饰器

六、用例分类执行

  1. unittest:默认执行去全部的测试用例,可以通过加在testsuit执行模块的测试用例
  2. pytest:可以通过@pytest.mark暟标记测试用例,执行的时候需要加上参数"-m"既可以运行标记的用例

七、用例前置和后置条件

  • unittest:unittest提供的Fixture用以在测试执行前和测试执行后进行必要的准备和清理工作。可以定义在模块、类、用例执行的前后的工作
  1. 在模块中定义setUpMoudel()和tearDownMoudel()处理模块执行前后的操作
  2. 每个测试用例执行前后都会调用setUp和tearDown()
  3. 在测试用例中定义setUpClass()和tearDownClass()函数处理测试类执行前后的工作
  • pytest
  1. pytest提供了模块级、函数级、类级、方法级别的setup/teardown,比unittest的setUp/tearDown更灵活
  • 模块级(setup_moudel、teardown_moudel)开始于模块始末,全局的
  • 函数级(setup_funtion/teardown_funtion)只对函数用例生效(不在类中)
  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)、
  • 方法级(setup_method/teardown_method)运行在调用方法的前后
  1. pytest还可以在函数前加@pytest.fixture()的装饰器,在测试用例中使用fixture函数。fixture的使用范围可以是function,moudel、class、session
  • 命名方式灵活:不局限于setup/teardown这几个命名
  • conftest.py就可以实现数据共享,不需要import就能实现一些配置,可以多个py文件使用
  • scope = 'model'可以实现多个.py文件跨文件共享配置
  • scope = 'session' 以实现多个.py文件使用一个sesion来完成多个用例
  • 用yied来唤醒teardown的执行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值