Python unittest单元测试框架实现参数化
作者:虫师 发布时间:2022-11-01 18:29:48
标签:Python,unittest,参数化
当我们在使用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单元测试框架实现参数化的扩展。同时支持不同的单元测试框架。
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
当相同入参和断言结果的用例越多,这种写法用起来越爽!
来源:https://www.cnblogs.com/fnng/p/6580636.html
0
投稿
猜你喜欢
- 在线阅读与印刷品阅读有着很大的不同,原因之一是屏幕会导致注意力问题。文字很难成为重点,而闪烁的横幅、明亮的图片又更加会转移对实际的博客内容的
- "神经衰弱"翻牌游戏考察玩家的记忆力,游戏的开头会短时间给你看一小部分牌的图案,当玩家翻开两张相同图案牌的时候,会消除,
- W3C 发布 XPath 1.0 规范是在 1999 年,那时我还正在备战高考,不料十年后,我才开始学习XPath,落后的差距不是一般的大(
- 在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse,
- Python基本输入和输出1.input输入函数input函数:获取用户输入,保存成一个字符串。>>> name = in
- 我使用多进程的一般方式,都是multiprocessing模块中的Pool.map()方法。下面写一个简单的示例和解析。至于此种方法使用多进
- 引用计数在Python源码中,每一个对象都是一个结构体表示,都有一个计数字段。typedef struct_object { i
- 前言图片的本质就是大量像素在二维平面上的组合,每个像素点用数字化方式记录颜色。可以直观的想象,一张图片就是一个巨大的电子栅格,每个格子内有一
- 本文实例讲述了Python中super函数用法。分享给大家供大家参考,具体如下:这是个高大上的函数,在python装13手册里面介绍过多使用
- 参数数量及其作用tf.layers.dense用于添加一个全连接层。函数如下:tf.layers.dense( i
- 目前网络数据库的应用已经成为最为广泛的应用之一了,并且关于数据库的安全性,性能都是企业最为关心的事情。数据库渐渐成为企业的命脉,优化查询就解
- 当用cmd命令行运行python文件时,我们知道可以通过>python pyfile.py来运行python文件,此时的输出会直接打印
- 用鼠标创建小球,一个蹦来蹦去的解压小游戏…… 本次需要的外置包:pygame,pymu
- c++运算速度快于python,python简单易写。很多时候对于已有的c++代码也不想用python重写,此时就自然而然地想到用pytho
- forma格式化的用法format函数可以接受不限个参数,位置可以不按顺序。基本语法是通过{ }和:来代替c语言的%。>>>
- 各位想必都知道,onfocus="this.blur()"这条代码能消除链接时的虚线框,但你有没有想过,如果你的网页上有
- 这篇博客其实就是这个集合整理后一部分的公开亮相。如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发
- 如图:其中Num是自增长列,Operation是分类标签,count是汇总数据 代码如下:select Num=row_numb
- API说明调用地址:http://yzxyzm.market.alicloudapi.com/yzx/verifySms请求方式:POST返
- 【名称】Abs【类别】数学函数【原形】Abs(number)【参数】必选的。Number参数是一个任何有效的数值型表达式【返回值】同numb