unittest参数化(paramunittest)
前言
paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例。本篇继续介绍另外一个参数化的框架paramunittest,也能实现一样的效果。
环境准备
1.先pip 下载安装 paramunittest
pip install paramunittest

官方文档
1.官方文档地址:https://pypi.python.org/pypi/ParamUnittest/
2.github源码下载地址:https://github.com/rik0/ParamUnittest
3.官方文档上给出了2个使用案例,以下两种方法都是可以的,小编倾向于第二种,更容易理解一些,这里注意了,在pycharm里面运行的时候,最后鼠标要放到if下方执行。
4.加上这个参数verbosity=2是为了显示用例执行详情
verbosity=2
import unittest
import paramunittest
# 方案一
@paramunittest.parametrized(
    ('1', '2'),
    #(4, 3),
    ('2', '3'),
    (('4', ), {'b': '5'}),
    ((), {'a': 5, 'b': 6}),
    {'a': 5, 'b': 6},
)
class TestFoo(paramunittest.ParametrizedTestCase):
    def setParameters(self, a, b):
        self.a = a
        self.b = b
    def testLess(self):
        self.assertLess(self.a, self.b)
# 方案二
@paramunittest.parametrized(
    ('1', '2'),
    #(4, 3),
    ('2', '3'),
    (('4', ), {'b': '5'}),
    ((), {'a': 5, 'b': 6}),
    {'a': 5, 'b': 6},
)
class TestBar(unittest.TestCase):
    def setParameters(self, a, b):
        self.a = a
        self.b = b
    def testLess(self):
        self.assertLess(self.a, self.b)
if __name__ == "__main__":
    unittest.main(verbosity=2)
实践案例
1.从上面官方文档给的案例可以看出,参数可以传元组也可以传字典,先传字典参数,类似于如下这种一组参数:
{"user": "admin", "psw": "123", "result": "true"}
2.注意这里接受参数的时候,必须要定义setParameters这个方法,并且只能是这个名称。括号后面的参数分别接受传入的参数名称。前面定义的是字典,那参数就跟前面字典的key保持一致
import unittest
import paramunittest
import time
# python3.6
# 作者:上海-悠悠
@paramunittest.parametrized(
    {"user": "admin", "psw": "123", "result": "true"},
    {"user": "admin1", "psw": "1234", "result": "true"},
    {"user": "admin2", "psw": "1234", "result": "true"},
    {"user": "admin3", "psw": "1234", "result": "true"},
    {"user": "admin4", "psw": "1234", "result": "true"},
    {"user": "admin5", "psw": "1234", "result": "true"},
    {"user": "admin6", "psw": "1234", "result": "true"},
    {"user": "admin7", "psw": "1234", "result": "true"},
    {"user": "admin8", "psw": "1234", "result": "true"},
    {"user": "admin9", "psw": "1234", "result": "true"},
    {"user": "admin10", "psw": "1234", "result": "true"},
    {"user": "admin11", "psw": "1234", "result": "true"},
)
class TestDemo(unittest.TestCase):
    def setParameters(self, user, psw, result):
        '''这里注意了,user, psw, result三个参数和前面定义的字典一一对应'''
        self.user = user
        self.user = psw
        self.result = result
    def testcase(self):
        print("开始执行用例:--------------")
        time.sleep(0.5)
        print("输入用户名:%s" % self.user)
        print("输入密码:%s" % self.user)
        print("期望结果:%s " % self.result)
        time.sleep(0.5)
        self.assertTrue(self.result == "true")
if __name__ == "__main__":
    unittest.main(verbosity=2)3.执行结果:
开始执行用例:--------------
testcase (paramunittest.TestDemo_0) ... 输入用户名:123
输入密码:123
期望结果:true
ok
testcase (paramunittest.TestDemo_1) ... 开始执行用例:--------------
输入用户名:1234
输入密码:1234
期望结果:true
ok
testcase (paramunittest.TestDemo_10) ... 开始执行用例:--------------
输入用户名:1234
输入密码:1234
期望结果:true
开始执行用例:--------------
ok
testcase (paramunittest.TestDemo_11) ... 输入用户名:1234
输入密码:1234
期望结果:true
开始执行用例:--------------
ok
testcase (paramunittest.TestDemo_2) ... 输入用户名:1234
输入密码:1234
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_3) ... 输入用户名:1234
输入密码:1234
期望结果:true
ok
testcase (paramunittest.TestDemo_4) ... 开始执行用例:--------------
输入用户名:1234
输入密码:1234
期望结果:true
ok
testcase (paramunittest.TestDemo_5) ... 开始执行用例:--------------
输入用户名:1234
输入密码:1234
期望结果:true
开始执行用例:--------------
ok
testcase (paramunittest.TestDemo_6) ... 输入用户名:1234
输入密码:1234
期望结果:true
开始执行用例:--------------
ok
testcase (paramunittest.TestDemo_7) ... 输入用户名:1234
输入密码:1234
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_8) ... 输入用户名:1234
输入密码:1234
期望结果:true
ok
testcase (paramunittest.TestDemo_9) ... 开始执行用例:--------------
输入用户名:1234
输入密码:1234
期望结果:true
ok
----------------------------------------------------------------------
Ran 12 tests in 12.001s4.注意了,这里的执行顺序是先执行0,1,再执行10,11,12依次来的,别问我为什么,也别找我解决,设计如此,之前ddt框架也是有同样的问题。
5.除了传字典参数,传元组类型的也是可以的
@paramunittest.parametrized(
    ("admin", "123", "true"),
    ("admin1", "123", "true"),
    ("admin2", "123", "true"),
    ("admin3", "123", "true"),
    ("admin4", "123", "true"),
    ("admin5", "123", "true"),
    ("admin6", "123", "true"),
    ("admin7", "123", "true"),
    ("admin8", "123", "true"),
    ("admin9", "123", "true"),
    ("admin10", "123", "true"),
    ("admin11", "123", "true"),
    ("admin12", "123", "true")
)
生成html报告
1.unittest生成html报告参考前面介绍的这篇http://www.cnblogs.com/yoyoketang/p/6680503.html就可以了,这里就不重复介绍了,实现的效果图如下:

unittest参数化(paramunittest)的更多相关文章
- 【转载】unittest参数化(paramunittest)
		前言 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例.本篇继续介绍 ... 
- selenium,unittest——参数化url,并多线程加快脚本运行速度
		利用参数化连续打开网页: #encoding=utf-8import unittestimport paramunittestimport timefrom selenium import webdr ... 
- python3 应用 nose_parameterized 实现unittest 参数化
		一.读取变量的值,实现unittest 参数化 import nose_parameterized,unittest def calc(a:int,b:int): return a+b case_da ... 
- python自动化测试学习笔记-unittest参数化
		做接口测试的时候,当一个参数需要输入多个值的时候,就可以使用参数来实现: python中unittest单元测试,可以使用nose_parameterized来实现: 首先需要安装:pip inst ... 
- parameterized之unittest参数化
		unittest没有想testNG那么方便,可以进行参数化,但是有一个第三方库可是实现参数化 安装 pip install parameterized 该库可以在python的所有单元测试框架中使用 ... 
- Python unittest 参数化
		准备工作: pip install nose_parameterized 典型场景:用户名.密码参数化 实例 1,新建一个ftl.py 文件 ,用来将存在于.txt .xlsx 文件中的参数化数据转 ... 
- unittest参数化
		我们在写case的时候,如果用例的操作是一样的,就是参数不同,比如说要测一个登陆的接口,要测正常登陆的.黑名单用户登陆的.账号密码错误的等等,在unittest里面就要写多个case来测试. 这样的情 ... 
- 第十一天 unittest参数化模块
		unittest的工作原理:一下例子简单的描述了整个过程 def calc(a,b): return a//b import unittest,HTMLTestRunner import Beauti ... 
- python中unittest参数化
		先安装 pip install parameterized 在测试用例类中,@parameterized.parameterized.expand(这里面传一个列表),这个就是参数化的意思 
随机推荐
- python 文件,文件夹,路径操作
			判断路径或文件os.path.isabs(...) # 判断是否绝对路径os.path.exists(...) # 判断是否真实存在os.path.isdir(...) # 判断是否是个目录os.pa ... 
- go语言规范之方法集
			Go语言规范里定义的方法集的规则 Values Methods Receivers ----------------------------------------------- T (t T) *T ... 
- docker运行puppeteer出现Page crash解决方案
			Docker默认文件空间64MB.如果puppeteer运行的时候超过这个内存就出现了.Page crash.可以使用docker run --shm-size=256m指定一个更大的内存即可. 
- Vue 目录
			什么是 vue-cli 通过 vue-cli 建立出来的 vue 
- TPCH测试工具
			TPC现有的测试标准为:TPC-E.TPC-C.TPC-H.TPC-App.根据这4个测试基准,目前TPC主要包括的4个技术小组委员会:TPC-E 技术小组委员会.TPC-C 技术小组委员会.TPC- ... 
- 手把手教你实现RecyclerView的下拉刷新和上拉加载更多
			手把手教你实现RecyclerView的下拉刷新和上拉加载更多 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ... 
- JDK的新特性
			JDK5新特性 a,自动拆装箱 b,泛型 c,可变参数 d,静态导入 e,增强for循环 f,互斥锁 g,枚举 JDK7新特性 * A:二进制字面量 * B:数字字面量可以出现下划线 * C:swit ... 
- PCA人脸识别学习笔记---原理篇
			前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ... 
- OpenCL如何判定一个work-group的最大Local Memory大小
			最近有不少朋友提及到如何能在运行时获悉一个GPU的最大local memory的尺寸.由于OpenCL对各类处理器开放,因此不同处理器所拥有的local memory大小也各不相同.即便是GPU,甚至 ... 
- php文件断点上传
			前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ... 
