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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python中几个比较常见的名词解释
Jul 04 Python
实例Python处理XML文件的方法
Aug 31 Python
python 用下标截取字符串的实例
Dec 25 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
Python datetime包函数简单介绍
Aug 28 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
Python tkinter和exe打包的方法
Feb 05 Python
详解Python中的Lock和Rlock
Jan 26 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
django之常用命令详解
2016/06/30 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
python调用百度语音REST API
2018/08/30 Python
详解python中的Turtle函数库
2018/11/19 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python新手学习函数默认参数设置
2020/06/03 Python
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
国际贸易个人求职信范文
2014/01/04 职场文书
运动会开幕式解说词
2014/02/05 职场文书
《匆匆》教学反思
2014/02/22 职场文书
党支部换届选举方案
2014/05/08 职场文书
学校创先争优活动总结
2014/08/28 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
店面出租协议书范本
2014/11/28 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
java版 联机五子棋游戏
2022/05/04 Java/Android
Promise静态四兄弟实现示例详解
2022/07/07 Javascript