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

    一、pytest的优势

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

    • 自动发现测试模块和测试方法
    • 断言使用 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装饰,测试用例的方法上使用@data()来来实现数据驱动
    • pytest参数化
      • 通过装饰器@pytest.mark.parametrize来实现数据驱动

    5.生成报告方式

    • unittest
      • 通过HTMLTestRunner生成
    • pytest
      • 通过pytest-html生成html格式报告
      • 通过与allure集成生成优美的allure报告
  • 相关阅读:
    DNSMAQ 搭建 DNS 服务
    kubernetes跨网段pod网络不通问题
    复制密钥到目标机器
    修改博客园css样式
    删除harbor项目下的所有镜像
    菜鸟 Python 100例
    清理日志
    UNIX基础--控制台和终端
    FreeBSD安装桌面环境
    Gentoo启动菜单设置:使用官方LiveDVD Grub主题
  • 原文地址:https://www.cnblogs.com/xiaogongjin/p/11683612.html
Copyright © 2011-2022 走看看