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 文件重命名工具代码
Jul 26 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
Python拼接字符串的7种方法总结
Nov 01 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
谈谈python垃圾回收机制
Sep 27 Python
python中二分查找法的实现方法
Dec 06 Python
对PyTorch中inplace字段的全面理解
May 22 Python
Python使用Kubernetes API访问集群
May 30 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
php数据库备份还原类分享
2014/03/20 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
pandas-resample按时间聚合实例
2019/12/27 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
会计专业自荐信
2013/12/02 职场文书
《称象》教学反思
2014/04/25 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
教师创先争优承诺书
2015/04/27 职场文书
队名及霸气口号大全
2015/12/25 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
用php如何解决大文件分片上传问题
2021/07/07 PHP
Python中可变和不可变对象的深入讲解
2021/08/02 Python