Python基于paramunittest模块实现excl参数化
作者:天天向上327 发布时间:2023-12-27 00:29:02
一、总结说明
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.003sOK
三、源码举例(字典)
#!/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.018sOK
四、源码举例(元组)
#!/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.002sOK
五、问题:
问题描述:一个元组只有一个列值,如("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")
注:只有元组有这个问题,列表或字典无此问题
来源:https://www.cnblogs.com/yiwenrong/p/12764063.html
猜你喜欢
- 昨天有人在群里问图1的边框效果是否能实现。 边框效果图有人给出答案,需要嵌套一个元素实现。我当时粗粗写了个测试页面,但是时间太晚了,也没有细
- ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间
- 源码下载地址网络构建一、什么是SRGANSRGAN出自论文Photo-Realistic Single Image Super-Resolu
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:黑白之道刮刮
- 如何自动登陆京东?我们先来看一下京东的登陆页面,如下图所示:【插入图片,登陆页面】登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认
- 原因是:It looks like you need to flush stdout periodically (e.g. sys.stdo
- '''数据集:伪造数据集(两个高斯分布混合)数据集长度:1000--------------------------
- python版本和ssl版本都会导致 requests在请求https网站时候会出一些错误,最好使用新版本。1 Python2.6x use
- WEB标准,从我大二开始接触到毕业后的第一份工作“页面重构工程师”,从接触标准到蓝色理想标准区版主的四年多时间里,WEB标准已经成为我生活中
- 性能首先,FCKEDITOR的性能是非常好的,用户只需很少的时间就可以载入FCKEDITOR所需文件.对于其他在线编辑器来说,这几乎是个很难
- 使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Conditi
- 第一部分:判断两张图片是否相同要查找重复的图片,必然绕不开判断两张图片是否相同。判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不
- 本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接。分享给大家供大家参考,具体如下:url反向解析:根据
- python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细)。但logging配置起来比较
- 首先创建一个csv文件,创建方式为新建一个文本文档,然后将这个文本文档重命名为test.csv再用Excel打开,添加内容内容如下:先来添加
- 问题:导入数据时是否需要禁用索引?解答:在使用load data导入数据时,如果导入的表是MyISAM的,对于空表,MySQL数据库会把所有
- 本文通过实例为大家分享了python实现批量提取指定文件夹下同类型文件,供大家参考,具体内容如下代码import osimport shut
- 如下所示:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional
- 目录单例模式反射hasattergetattrsetattr总结单例模式一般情况下,类可以生成任意个实例,而单例模式只生成一个实例我们先用单
- JavaScript Length 字符长度函数,在很多时间我们会用length函数了,因为你得前台判断一个用户输入