51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 677|回复: 0
打印 上一主题 下一主题

[转贴] 测试框架Unitest之参数化 - ddt 数据驱动模块详解(下)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-3 17:19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zxdznb 于 2022-8-3 17:37 编辑

三、ddt读取文件

2.ddt读取excel文件
思路:先从excel文件中读取数据,然后再用ddt加载已读取的数据


第一步:读取excel
  1. # get_excel.py

  2. from openpyxl import load_workbook

  3. class ExcelData():

  4.     def __init__(self, file="config.xlsx"):
  5.         '''
  6.         初始化Excel对象
  7.         '''
  8.         self.file = file
  9.         self.wb = load_workbook(self.file)

  10.     def get_row_value(self, row, sheet_name="Sheet1"):
  11.         '''
  12.         获取Excel中某一行的数据
  13.         '''
  14.         sh = self.wb[sheet_name]
  15.         max_col = sh.max_column
  16.         row_value = []
  17.         for col in range(1, max_col+1):
  18.             value = sh.cell(row, col).value
  19.             row_value.append(value)
  20.         return row_value

  21.     def get_all_row(self, sheet_name="Sheet1"):
  22.         '''
  23.         获取Excel中所有行的数据,并存放在列表中
  24.         '''
  25.         sh = self.wb[sheet_name]
  26.         max_row = sh.max_row
  27.         row_value = []
  28.         for row in range(2, max_row+1):
  29.             value = self.get_row_value(row)
  30.             row_value.append(value)
  31.         return row_value

  32. if __name__ == "__main__":
  33.     excel = ExcelData()
  34.     testdata = excel.get_all_row()
  35.     print(testdata)
复制代码
第二步:使用ddt使用读取好的数据
  1. # get_ddt.py

  2. import requests
  3. import unittest
  4. from ddt import ddt, data, unpack, file_data
  5. from get_excel import ExcelData

  6. @ddt
  7. class SignTest(unittest.TestCase):

  8.     # 从get_excel.py中读取测试数据
  9.     excel = ExcelData()
  10.     testdata = excel.get_all_row()

  11.     @data(*testdata)
  12.     def test_sign(self, datas):
  13.         # 由于从excel中读取到的数据为列表形式,所以采用下标来提取各参数
  14.         ID = datas[0]
  15.         model = datas[1]
  16.         title = datas[2]
  17.         method = datas[3]
  18.         url = datas[4]
  19.         username = datas[5]
  20.         pwd = datas[6]
  21.         cpwd = datas[7]
  22.         check = datas[8]
  23.         body = {
  24.             "username": username,
  25.             "pwd": pwd,
  26.             "cpwd": cpwd
  27.         }
  28.         self.sign_test(ID,model,title,url,method,body,check)

  29.     def sign_test(self,ID,model,title,url,method,body,check):
  30.         print("用例ID:", ID)
  31.         print("模块:", model)
  32.         print("用例标题:", title)
  33.         response = requests.request(url=url, method=method, data=body).text
  34.         try:
  35.             # 通过断言,比较实际结果是否与预期结果一致
  36.             # 由于从excel中读取到的check为str类型,所以response不用转换为dict,直接断言比较是否相等
  37.             assert check == response
  38.             print("测试通过")
  39.         except Exception as e:
  40.             print("测试失败")
  41.             raise e

  42. if __name__ == "__main__":
  43.     unittest.main()
复制代码
结果:
  1. 运行结果:

  2. 用例ID: 001
  3. 模块: 注册模块
  4. 用例标题: 正确的用户名和密码,注册成功
  5. .测试通过
  6. 用例ID: 002
  7. 模块: 注册模块
  8. 用例标题: 用户名长度小于6位,注册失败
  9. .测试通过
  10. OK
  11. ----------------------------------------------------------------------
  12. Ran 2 tests in 0.190s

  13. Process finished with exit code 0
复制代码

转载:python ddt模块的使用 - www.pu - 博客园 (cnblogs.com)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 17:21 , Processed in 0.068861 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表