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 正则表达式(转义问题)
Dec 15 Python
Python批量修改文本文件内容的方法
Apr 29 Python
Python中内建函数的简单用法说明
May 05 Python
Python下简易的单例模式详解
Apr 08 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python绘制随机网络图形示例
Nov 21 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python pillow库的基础使用教程
Jan 13 Python
python实现批量移动文件
Apr 05 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 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
重置版宣传动画
2020/04/09 魔兽争霸
PHP 5.0 Pear安装方法
2006/12/06 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Python中的__init__作用是什么
2020/06/09 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
学校岗位设置方案
2014/01/16 职场文书
企业理念标语
2014/06/09 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
招商银行工作证明
2015/06/17 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
Python 实现定积分与二重定积分的操作
2021/05/26 Python
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript