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命令行参数解析模块getopt使用实例
Apr 13 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
pandas实现选取特定索引的行
Apr 20 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
python实现大量图片重命名
Mar 23 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
python数字图像处理:图像简单滤波
Jun 28 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中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
JS作用域深度解析
2016/12/29 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python3实现点餐系统
2019/01/24 Python
深入理解Python异常处理的哲学
2019/02/01 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
python数字类型math库原理解析
2020/03/02 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
园林施工员岗位职责
2013/12/11 职场文书
企业演讲稿范文
2013/12/28 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
中学团支部工作总结
2015/08/13 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
详解Laravel制作API接口
2021/05/31 PHP
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis