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实现的数据结构与算法之链表详解
Apr 22 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python3实现猜数字游戏
Dec 07 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Django之PopUp的具体实现方法
Aug 31 Python
Python实现快速排序的方法详解
Oct 25 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
python numpy--数组的组合和分割实例
Feb 24 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
浅谈python数据类型及其操作
May 25 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中实现进程间通讯
2006/10/09 PHP
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
url decode problem 解决方法
2011/12/26 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
onpropertypchange
2006/07/01 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
python编码最佳实践之总结
2016/02/14 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python实现对adb命令封装
2020/03/06 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
武汉高蓝德国际.net机试
2016/06/24 面试题
家长给小学生的评语
2014/01/30 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
社区矫正工作方案
2014/06/04 职场文书
计算机毕业生求职信
2014/06/10 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
南极大冒险观后感
2015/06/05 职场文书