Python基于paramunittest模块实现excl参数化


Posted in Python onApril 26, 2020

一、总结说明

Windows环境安装:paramunittest cmd输入命令:pip install paramunittest

总结说明:

1.paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
2.导入paramunittest:import paramunittest
3.paramunittest支持字典、元组、列表作为入参
列表格式:[["vaule"],["vaule2"]],setParameters赋值的个数与列值一一对应,例如此列表格式列值只有一个,赋值时只能自定义一个值
元组格式:(("pwd","vaule"),("pwd","vaule2")),元组列值必须保证两个以上,如果只有一个值,setParameters时报错,setParameters赋值的个数与列值一一对应,例如此元组格式列值有2个,赋值时只能自定义2个值
字典格式:[{"key": "vaule" },{"key": "vaule2"}],字典保证key值一致,如相同个数,相同位置,例如此字典格式列值只有一个key,setParameters赋值时只能定义一个key值
4.赋予列表/字典/元组值:@paramunittest.parametrized(*list/tuple)
5.列表元组赋予列值:def setParameters(self, t1, t2, tN):
'''注意t1, t2, t3名称自定义,从左到右按顺序一一对应值'''
self.t1 = t1
self.t2 = t2
self.tN = tN
6.列表元组取列值def testcase(self): self.t1
7.字典单赋予列值:def setParameters(self, key, keyN):
'''注意key, keyN是与字典key值必须一一对应'''
self.key = key
self.keyN = keyN
8.列表元组取取列def testcase(self): self.key1,字典通过key获取vaulue值
特别注意:如列值下标大于10时,执行顺序是先执行0,1再执行10,11,再执行2,3,.....9

二、源码举例(列表)

说明:一般读取exel会生成一个列表,如果使用exel作为参数化,可以参考此

#!/usr/bin/python3
# encoding:utf-8
import unittest
import paramunittest
import time

list =[
  ['test', '123456', 'true'], 
  ['test1', '1234564', 'true']
]

@paramunittest.parametrized(*list)
class TestDemo(unittest.TestCase):
  def setParameters(self, user, pwd, result):
    '''注意user, pwd, result是从左到右按顺序一一对应'''
    self.user = user
    self.pwd = pwd
    self.result = result

  def testcase(self):
    print("开始执行用例:--------------")
    time.sleep(1)
    print("输入用户名:%s" % self.user)
    print("输入密码:%s" % self.pwd)
    print("期望结果:%s " % self.result)
    time.sleep(1)
    self.assertTrue(self.result == "true")
if __name__ == "__main__":
  #verbosity=2 显示用例执行详情
  unittest.main(verbosity=2)

运行结果

testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok

----------------------------------------------------------------------
Ran 2 tests in 4.003s

OK

三、源码举例(字典)

#!/usr/bin/python3
# encoding:utf-8
import unittest
import paramunittest
import time
dict =[
  {"user": "test", "pwd": "123456", "result": "true"},
  {"user": "test1", "pwd": "1234564", "result": "true"},
  {"user": "test2", "pwd": "1234564", "result": "true"},
  {"user": "test3", "pwd": "1234564", "result": "true"},
  {"user": "test4", "pwd": "1234564", "result": "true"},
  {"user": "test5", "pwd": "1234564", "result": "true"},
  {"user": "test6", "pwd": "1234564", "result": "true"},
  {"user": "test7", "pwd": "1234564", "result": "true"},
  {"user": "test8", "pwd": "1234564", "result": "true"},
  {"user": "test9", "pwd": "1234564", "result": "true"},
  {"user": "test10", "pwd": "1234564", "result": "true"},
  {"user": "test11", "pwd": "1234564", "result": "true"}
]
@paramunittest.parametrized(*dict)
class TestDemo(unittest.TestCase):
  def setParameters(self, user, pwd, result):
    '''user, pwd, result三个参数字典的key一一对应'''
    self.user = user
    self.pwd = pwd
    self.result = result

  def testcase(self):
    print("开始执行用例:--------------")
    time.sleep(1)
    print("输入用户名:%s" % self.user)
    print("输入密码:%s" % self.pwd)
    print("期望结果:%s " % self.result)
    time.sleep(1)
    self.assertTrue(self.result == "true")
if __name__ == "__main__":
  #verbosity=2 显示用例执行详情
  unittest.main(verbosity=2)

运行结果

#说明:框架问题:当字典大于10时,执行顺序是先执行0,1再执行10,11,再执行#2,3,.....9
testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_10) ... 输入用户名:test10
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_11) ... 输入用户名:test11
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_2) ... 输入用户名:test2
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_3) ... 输入用户名:test3
输入密码:1234564
期望结果:true
ok开始执行用例:--------------

testcase (paramunittest.TestDemo_4) ... 输入用户名:test4
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_5) ... 输入用户名:test5
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_6) ... 输入用户名:test6
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_7) ... 输入用户名:test7
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_8) ... 输入用户名:test8
输入密码:1234564
期望结果:true
ok开始执行用例:--------------

testcase (paramunittest.TestDemo_9) ... 输入用户名:test9
输入密码:1234564
期望结果:true
ok

----------------------------------------------------------------------
Ran 12 tests in 24.018s

OK

四、源码举例(元组)

#!/usr/bin/python3
# encoding:utf-8
import unittest
import paramunittest
import time

tuple=(
  ("test","123456","true"),
  ("test1","1234564","true")
  )


#另一种赋值方式:直接赋值
#@paramunittest.parametrized(
#  ("test","123456","true"),
#  ("test1","1234564","true")
#)

@paramunittest.parametrized(*tuple)
class TestDemo(unittest.TestCase):
  def setParameters(self, user, pwd, result):
    '''注意user, pwd, result是从做到右按顺序一一对应'''
    self.user = user
    self.pwd = pwd
    self.result = result

  def testcase(self):
    print("开始执行用例:--------------")
    time.sleep(1)
    print("输入用户名:%s" % self.user)
    print("输入密码:%s" % self.pwd)
    print("期望结果:%s " % self.result)
    time.sleep(1)
    self.assertTrue(self.result == "true")
if __name__ == "__main__":
  #verbosity=2 显示用例执行详情
  unittest.main(verbosity=2)

运行结果

testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok

----------------------------------------------------------------------
Ran 2 tests in 4.002s

OK

五、问题:

问题描述:一个元组只有一个列值,如("test"),("test1"),setParameters之后运行报错如下:

testcase (paramunittest.TestDemo_0) ... ERROR
testcase (paramunittest.TestDemo_1) ... ERROR

======================================================================
ERROR: testcase (paramunittest.TestDemo_0)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\pythonaz\lib\site-packages\paramunittest.py", line 89, in setUp
self.setParameters(*parameters[0], **parameters[1])
TypeError: setParameters() takes 2 positional arguments but 5 were given

解决方法:保证一个元组列值两个以上,如("test","123456"),("test1","123")

注:只有元组有这个问题,列表或字典无此问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
在python 中实现运行多条shell命令
Jan 07 Python
python实现windows壁纸定期更换功能
Jan 21 Python
对django views中 request, response的常用操作详解
Jul 17 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
Python实现不规则图形填充的思路
Feb 02 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
Python实现发票自动校核微信机器人的方法
May 22 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
在python里创建一个任务(Task)实例
Apr 25 #Python
python 实现任务管理清单案例
Apr 25 #Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 #Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 #Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 #Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 #Python
解决python父线程关闭后子线程不关闭问题
Apr 25 #Python
You might like
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
使用python3构建文件传输的方法
2019/02/13 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python requests证书问题解决
2019/09/05 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
最新的咖啡店创业计划书
2013/12/30 职场文书
土地转让协议书范本
2014/04/15 职场文书
四风问题查摆材料
2014/08/25 职场文书
软环境建设心得体会
2014/09/09 职场文书
团员自我评价范文
2015/03/10 职场文书
信仰观后感
2015/06/03 职场文书
解析MySQL binlog
2021/06/11 MySQL
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python