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 相关文章推荐
Python制作数据导入导出工具
Jul 31 Python
Python使用django搭建web开发环境
Jun 09 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
Python Flask基础教程示例代码
Feb 07 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
postman传递当前时间戳实例详解
Sep 14 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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 GD绘制24小时柱状图
2008/06/28 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
PHP实现微信提现功能
2018/09/30 PHP
PHP7新特性
2021/03/09 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python字符串格式化
2015/06/15 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python实现的爬虫功能代码
2017/06/24 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
给老师的检讨书
2014/02/11 职场文书
情况说明书格式范文
2014/05/06 职场文书
超越自我演讲稿
2014/05/21 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript