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中的map()函数和reduce()函数的用法
Apr 27 Python
python查询sqlite数据表的方法
May 08 Python
Python下载网络小说实例代码
Feb 03 Python
Python import与from import使用及区别介绍
Sep 06 Python
python实现简单http服务器功能
Sep 17 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
django框架单表操作之增删改实例分析
Dec 16 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
Python爬虫实例——爬取美团美食数据
Jul 15 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
详解Python发送email的三种方式
2018/10/18 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
详解Python正则表达式re模块
2019/03/19 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Django跨域请求原理及实现代码
2020/11/14 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
如何利用find命令查找文件
2016/11/18 面试题
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
廉洁自律承诺书
2014/03/27 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2014年服务员工作总结
2014/11/18 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书