51Testing软件测试论坛
标题:
测试框架Unitest之参数化 - ddt 数据驱动模块详解(下)
[打印本页]
作者:
zxdznb
时间:
2022-8-3 17:19
标题:
测试框架Unitest之参数化 - ddt 数据驱动模块详解(下)
本帖最后由 zxdznb 于 2022-8-3 17:37 编辑
三、ddt读取文件
2.ddt读取excel文件
思路:先从excel文件中读取数据,然后再用ddt加载已读取的数据
[attach]140438[/attach]
第一步:读取excel
# get_excel.py
from openpyxl import load_workbook
class ExcelData():
def __init__(self, file="config.xlsx"):
'''
初始化Excel对象
'''
self.file = file
self.wb = load_workbook(self.file)
def get_row_value(self, row, sheet_name="Sheet1"):
'''
获取Excel中某一行的数据
'''
sh = self.wb[sheet_name]
max_col = sh.max_column
row_value = []
for col in range(1, max_col+1):
value = sh.cell(row, col).value
row_value.append(value)
return row_value
def get_all_row(self, sheet_name="Sheet1"):
'''
获取Excel中所有行的数据,并存放在列表中
'''
sh = self.wb[sheet_name]
max_row = sh.max_row
row_value = []
for row in range(2, max_row+1):
value = self.get_row_value(row)
row_value.append(value)
return row_value
if __name__ == "__main__":
excel = ExcelData()
testdata = excel.get_all_row()
print(testdata)
复制代码
第二步:使用ddt使用读取好的数据
# get_ddt.py
import requests
import unittest
from ddt import ddt, data, unpack, file_data
from get_excel import ExcelData
@ddt
class SignTest(unittest.TestCase):
# 从get_excel.py中读取测试数据
excel = ExcelData()
testdata = excel.get_all_row()
@data(*testdata)
def test_sign(self, datas):
# 由于从excel中读取到的数据为列表形式,所以采用下标来提取各参数
ID = datas[0]
model = datas[1]
title = datas[2]
method = datas[3]
url = datas[4]
username = datas[5]
pwd = datas[6]
cpwd = datas[7]
check = datas[8]
body = {
"username": username,
"pwd": pwd,
"cpwd": cpwd
}
self.sign_test(ID,model,title,url,method,body,check)
def sign_test(self,ID,model,title,url,method,body,check):
print("用例ID:", ID)
print("模块:", model)
print("用例标题:", title)
response = requests.request(url=url, method=method, data=body).text
try:
# 通过断言,比较实际结果是否与预期结果一致
# 由于从excel中读取到的check为str类型,所以response不用转换为dict,直接断言比较是否相等
assert check == response
print("测试通过")
except Exception as e:
print("测试失败")
raise e
if __name__ == "__main__":
unittest.main()
复制代码
结果:
运行结果:
用例ID: 001
模块: 注册模块
用例标题: 正确的用户名和密码,注册成功
.测试通过
用例ID: 002
模块: 注册模块
用例标题: 用户名长度小于6位,注册失败
.测试通过
OK
----------------------------------------------------------------------
Ran 2 tests in 0.190s
Process finished with exit code 0
复制代码
转载:
python ddt模块的使用 - www.pu - 博客园 (cnblogs.com)
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2