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 multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
python获取外网ip地址的方法总结
Jul 02 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
详解Python做一个名片管理系统
Mar 14 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
Django之全局使用request.user.username的实例详解
May 14 Python
python相对企业语言优势在哪
Jun 12 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 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
php xml 入门学习资料
2011/01/01 PHP
composer.lock文件的作用
2016/02/03 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
Python 代码调试技巧示例代码
2020/08/11 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Python中过滤字符串列表的方法
2020/12/22 Python
2015年初中生自我评价范文
2015/03/03 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
居住证明范文
2015/06/17 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Python WSGI 规范简介
2021/04/11 Python
React自定义hook的方法
2022/06/25 Javascript