前言

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.001s

4.注意了,这里的执行顺序是先执行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)的更多相关文章

  1. 【转载】unittest参数化(paramunittest)

    前言 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例.本篇继续介绍 ...

  2. selenium,unittest——参数化url,并多线程加快脚本运行速度

    利用参数化连续打开网页: #encoding=utf-8import unittestimport paramunittestimport timefrom selenium import webdr ...

  3. python3 应用 nose_parameterized 实现unittest 参数化

    一.读取变量的值,实现unittest 参数化 import nose_parameterized,unittest def calc(a:int,b:int): return a+b case_da ...

  4. python自动化测试学习笔记-unittest参数化

    做接口测试的时候,当一个参数需要输入多个值的时候,就可以使用参数来实现: python中unittest单元测试,可以使用nose_parameterized来实现: 首先需要安装:pip  inst ...

  5. parameterized之unittest参数化

    unittest没有想testNG那么方便,可以进行参数化,但是有一个第三方库可是实现参数化 安装 pip install parameterized 该库可以在python的所有单元测试框架中使用 ...

  6. Python unittest 参数化

    准备工作: pip install  nose_parameterized 典型场景:用户名.密码参数化 实例 1,新建一个ftl.py 文件 ,用来将存在于.txt .xlsx 文件中的参数化数据转 ...

  7. unittest参数化

    我们在写case的时候,如果用例的操作是一样的,就是参数不同,比如说要测一个登陆的接口,要测正常登陆的.黑名单用户登陆的.账号密码错误的等等,在unittest里面就要写多个case来测试. 这样的情 ...

  8. 第十一天 unittest参数化模块

    unittest的工作原理:一下例子简单的描述了整个过程 def calc(a,b): return a//b import unittest,HTMLTestRunner import Beauti ...

  9. python中unittest参数化

    先安装 pip install parameterized 在测试用例类中,@parameterized.parameterized.expand(这里面传一个列表),这个就是参数化的意思

随机推荐

  1. Robot Framework(十五) 扩展RobotFramework框架——远程库接口

    4.2远程库接口 远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法.对于测试库,用户远程库看起来与 ...

  2. 2016"百度之星" - 初赛(Astar Round2A)1001 All X(HDU5690)——找循环节|快速幂

    一个由m个数字x组成的新数字,问其能否mod k等于c. 先提供第一种思路,找循环节.因为每次多一位数都是进行(t*10+x)mod k(这里是同余模的体现),因为x,k都确定,只要t再一样得到的答案 ...

  3. 在树莓派4b上安装 ROS MELODIC 源码安装

    按照以下步骤照做就可以了,很简单的,就是浪费一点点时间罢了.也可以退而求其次,买个树莓派3B+来玩,哈哈. Step 1: Install Dependecies and Download the P ...

  4. 动态拼接tr,th

    var dltable=''; // <c:forEach items="data" var="data" ></c:forEach> ...

  5. Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤

    Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...

  6. POI的XWPFTable的方法总结

    1. void  addNewCol(): 为该表中的每一行添加一个新列 2. void addRow(XWPFTableRow row): 向表中添加新行 3. boolean addRow(XWP ...

  7. Python语法 - 生成器

    生成器基本概念 1 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束 2 生成器表达式能做的事情列表解析基本都能处理,只不 ...

  8. 【java】简介(一)

    应用:web后端开发.android-app开发.大数据应用开发 学习:java会过时,但程序设计的思想不会过时 特点:1.面向对象,跨平台,语法比c++简单 2.以字节码的形式运行在虚拟机上 3.自 ...

  9. fsLayuiPlugin附件上传使用说明

    fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...

  10. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...