zoukankan      html  css  js  c++  java
  • pytest 框架与 unittest 框架的对比

    一、pytest 的优势

    pytest是基于 unittest 之上的单元测试框架,它的优势如下:

    • 自动发现测试模块和测试方法
      • 默认从当前目录中搜集测试用例,即在那个目录下运行pytest 命令,则从那个目录当中搜索  
        1. 搜索规则:进入目录后,在按照搜索规则搜索用例    
        2. 符合命名规则 test_*.py 或者 *_test.py 的文件
        3. 以 test_ 开头的函数名
        4. 以 Test 开头的测试类(没有 _init_ 函数)当中,以 test_ 开头的函数
      • import pytest
        
        if __name__ == '__main__':
            pytest.main()
    • 断言使用 assert + 表达式
    • 可以设置测试会话级(session)、模块级(module)、类级(class)、函数级(function)的 fixture 来共享测试用例的前置和后置
    • 有丰富的插件库,目前已经700+ ,pytest插件地址:http://plugincompat.herokuapp.com/

    二、与unittest的对比

    1.用例设计规划

    • unittest
      • 测试类必须继承 unittest.TestCase
      • 测试函数必须以 “test_” 开头
      • 使用defaultTestLoader.descover()加载测试用例时,测试模块( py文件)名称要以test开头 
    • pytest
      • 测试模块文件的文件名必须以"test_ "开头或者以" _test"结尾  
      • 测试类命名必须以"Test"开头  
      • 测试函数名必须以"test"开头  
      • 测试类里面不能使用" _init_ "方法  

    2.断言对比

    • unittest断言
      • assertEqual(a, b)     判断a和b是否相等  
      • assertNotEqual(a, b)     判断a不等于b  
      • assertTrue(a)     判断a是否为Ture  
      • assertFalse(a)     判断a是否为False  
      • assertIn(a, b)     a包含在b里面  
      • asserNotIn(a, b)     a不包含在b里面  
    • pytest断言
      • assert + 表达式  

    3.用例前置和后置

    • unittest前置和后置
      • 通过setup每个用例执行前执行,teardown每个用例执行后执行  
      • 通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行  
    • pytest前置和后置
      • 会话级别: session,整个测试执行会话全部用例开始前执行/全部用例执行完后执行  
      • 模块级别: module,只对模块级别生效,整个.py全部用例开始前执行/全部用例执行完后执行  
      • 类级别: class,只对类级别生效,整个测试类全部用例开始前执行/全部用例执行完后执行  
      • 函数级别: function,只对函数级别生效,每个用例开始前和结束后执行一次  

    4.参数化

    • unittest参数化
      • 结合ddt模块,在类上面使用@ddt装饰,测试用例的方法上使用@data0来来实现数据驱动  
    • pytest参数化
      • 通过装饰器@pytest.mark.parametrize来实现数据驱动  

    5.生成报告方式

    • unittest
      • 通过HTMLTestRunner生成  
    • pytest
      • 通过pytest-html生 成html格式报告  
      • 通过与allure集成生成优美的allure报告  

    *******尊重作者,本文是本人转载自:https://www.cnblogs.com/xiaogongjin/    ******* 

  • 相关阅读:
    TCP与UDP在socket编程中的区别
    使用python selenium webdriver模拟浏览器
    Web性能测试参数
    DPDK学习之开篇介绍
    go环境import cycle not allowed问题处理
    使用etcd+confd管理nginx配置
    服务的扩展性
    linux 网络编程
    单片机成长之路(stm8基础篇)- 025 stm8 时钟切换
    单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机
  • 原文地址:https://www.cnblogs.com/shouhu/p/12274705.html
Copyright © 2011-2022 走看看