Python unittest单元测试框架实现参数化


Posted in Python onApril 29, 2020

当我们在使用TestNG时,发现它有一个非常好用的参数化功能。当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数。

例子如下:

import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
 * Created by fnngj on 2017/3/19.
 */
public class Demo {

  // 定义测试数据
  @DataProvider(name = "data")
  public Object[][] Users() {
    return new Object[][] {
        { 1, 1, 2},
        { 2, 2, 5},
        { 3, 3, 6},
    };
  }
  @Test(dataProvider="data")
  public void testAdd(int a,int b,int c) {
    assertEquals(a + b, c);
  }
}

相对而言,Python下面单元测试框架要弱上少,尤其是Python自带的unittest测试框架,不支持参数化,不支持多线程执行用例,不支持HTML测试报告的生成...。好再,部分不足我们可以通过unittest扩展来满足需求。比如现在要介绍一个参数化的扩展。

在没有参数化功能的情况下,我们的用例需要这样编写。

import unittest
class TestAdd(unittest.TestCase):
  def test_add_01(self):
    self.assertEqual(1 + 2, 3)
  def test_add_02(self):
    self.assertEqual(2 + 2, 5)
  def test_add_03(self):
    self.assertEqual(3 + 3, 6)
if __name__ == '__main__':
  unittest.main()

nose-parameterized是一个针对Python单元测试框架实现参数化的扩展。同时支持不同的单元测试框架。

Python unittest单元测试框架实现参数化

GitHub地址:https://github.com/wolever/nose-parameterized

然后,unittest就可以像TestNG一样写用例了。

import unittest
from nose_parameterized import parameterized
class TestAdd(unittest.TestCase):
  @parameterized.expand([
    ("01",1, 1, 2),
    ("02",2, 2, 5),
    ("03",3, 3, 6), 
  ])
  def test_add(self, name, a, b, c):
    self.assertEqual(a + b, c)
if __name__ == '__main__':
  unittest.main(verbosity=2)

执行结果:

test_add_0_01 (__main__.TestAdd) ... ok

test_add_1_02 (__main__.TestAdd) ... FAIL

test_add_2_03 (__main__.TestAdd) ... ok

当相同入参和断言结果的用例越多,这种写法用起来越爽!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
Python中函数的用法实例教程
Sep 08 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
利用Python实现Windows定时关机功能
Mar 21 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
Django中modelform组件实例用法总结
Feb 10 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python ORM框架Peewee用法详解
Apr 29 #Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 #Python
Pytorch十九种损失函数的使用详解
Apr 29 #Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 #Python
Python爬虫工具requests-html使用解析
Apr 29 #Python
Python基于Hypothesis测试库生成测试数据
Apr 29 #Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 #Python
You might like
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php全角字符转换为半角函数
2014/02/07 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
解决layui弹框失效的问题
2019/09/09 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python合并同类型excel表格的方法
2018/04/01 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
仓管岗位职责范本
2014/02/08 职场文书
秸秆管理实施方案
2014/03/15 职场文书
社团活动总结
2014/04/28 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
五年级学生评语大全
2014/12/26 职场文书
铁人观后感
2015/06/16 职场文书
九不准学习心得体会
2016/01/23 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers