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 numpy 部分排序 寻找最大的前几个数的方法
Jun 27 Python
python爬取微信公众号文章
Aug 31 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python中append实例用法总结
Jul 30 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
python 生成器需注意的小问题
Sep 29 Python
Python编写万花尺图案实例
Jan 03 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 Python
python tqdm用法及实例详解
Jun 16 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
浅谈php扩展imagick
2014/06/02 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php建立Ftp连接的方法
2015/03/07 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
体育教师求职信
2014/05/24 职场文书
爱护草坪标语
2014/06/24 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
迎新生标语大全
2014/10/06 职场文书
800字作文之大雪
2019/12/04 职场文书
python b站视频下载的五种版本
2021/05/27 Python
Python并发编程实例教程之线程的玩法
2021/06/20 Python
docker-compose部署Yapi的方法
2022/04/08 Servers