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 相关文章推荐
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
简单谈谈python基本数据类型
Sep 26 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
python从ftp获取文件并下载到本地
Dec 05 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 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通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
编写Python CGI脚本的教程
2015/06/29 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
上海中网科技笔试题
2012/02/19 面试题
社区包粽子活动方案
2014/01/21 职场文书
关于迟到的检讨书
2014/01/26 职场文书
药剂专业自荐书
2014/06/20 职场文书
技术支持岗位职责
2015/02/13 职场文书
仓库管理制度范本
2015/08/04 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
九年级历史教学反思
2016/02/19 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python