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根据出生年份简单计算生肖的方法
Mar 27 Python
在Python中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
深入分析python中整型不会溢出问题
Jun 18 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python线程threading模块用法详解
Feb 26 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Python创建临时文件和文件夹
Aug 05 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
Python经常使用的一些内置函数
Apr 11 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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,ajax实现分页
2008/03/27 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP实现简易图形计算器
2020/08/28 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
python实现哈希表
2014/02/07 Python
python实现bitmap数据结构详解
2014/02/17 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python魔法方法详解
2019/02/13 Python
学习python的前途 python挣钱
2019/02/27 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
大学入学感言
2015/08/01 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis