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 相关文章推荐
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
python图像处理入门(一)
Apr 04 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
Django model update的多种用法介绍
Mar 28 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
pytorch masked_fill报错的解决
Feb 18 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
python操作xlsx格式文件并读取
Jun 02 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反弹shell实现代码
2009/04/22 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
13个PHP函数超实用
2015/10/21 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
python处理csv中的空值方法
2018/06/22 Python
python实现小世界网络生成
2019/11/21 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
一套C++笔试题面试题
2012/06/06 面试题
项目合作计划书
2014/01/09 职场文书
全陪导游欢迎词
2014/01/17 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
小学生表扬稿范文
2015/05/05 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android