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的session中使用User对象的方法
Jul 23 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
对于Python深浅拷贝的理解
Jul 29 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
python将音频进行变速的操作方法
Apr 08 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
基于python实现破解滑动验证码过程解析
May 28 Python
python+opencv实现车道线检测
Feb 19 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
Python预测分词的实现
Jun 18 Python
Python时间操作之pytz模块使用详解
Jun 14 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项目应该注意的几点事项分享
2013/12/20 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python threading多线程编程实例
2014/09/18 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
深入解析神经网络从原理到实现
2019/07/26 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
银行个人求职自荐信范文
2013/12/16 职场文书
文明村创建实施方案
2014/03/27 职场文书
高中家长寄语
2014/04/02 职场文书
推荐信格式要求
2014/05/09 职场文书
数据保密承诺书
2014/06/03 职场文书
爱心捐书活动总结
2014/07/05 职场文书