Python自動化測試之封裝讀取Excel類實現(xiàn)方式
ddt的使用步驟
1、測試類前面使用@ddt
2、在測試方法前使用@list_data(測試數(shù)據(jù))
3、在測試方法中定義一個參數(shù),用于接收用例數(shù)據(jù)
ddt:DataDriverTest(數(shù)據(jù)驅動測試)
思想:把測試數(shù)據(jù)和用例代碼進行分離,通過外部數(shù)據(jù)去生成測試用例,方便后期維護,以及測試數(shù)據(jù)管理
ddt底層原理
1、保存測試數(shù)據(jù)
2、遍歷測試數(shù)據(jù),生成測試方法
import unittest
from unittestreport import ddt,list_data
import requests
cases = [
{"excepted":{"code":0, "msg":"登陸成功"},"params":{"username":"aaa", "password":"123456"}},
{"excepted":{"code":1, "msg":"登陸失敗"},"params":{"username":"aaa", "password":"123"}},
{"excepted":{"code":1, "msg":"登陸失敗"},"params":{"username":" ", "password":"123456"}},
]
@ddt
class TestLogin(unittest.TestCase):
@list_data(cases)
def test_login(self, item):
data = item['params']
expected = item['expected']
res = login_check(**data)
self.assertEqual(expected, res)
封裝讀取Excel類

import openpyxl
class HandleExcel:
def __init__(self, filename, sheetname):
'''
:param filename: excel文件名字
:param sheetname: 表單名
'''
self.filename = filename
self.sheetname = sheetname
def read_data(self):
# 加載excel工作簿
workbook = openpyxl.load_workbook(self.filename)
# 選中表單
sh = workbook[self.sheetname]
# 獲取所有數(shù)據(jù)
cel = list(sh.rows)
# 變量第一行數(shù)據(jù)
tital = [i.value for i in cel[0]]
cases = []
# 遍歷除第一行以外的行
for item in cel[1:]:
# 獲取該行的數(shù)據(jù)
data = [i.value for i in item]
# 把第一行數(shù)據(jù)和當前行數(shù)據(jù)打包成字典
dic = dict(zip(tital, data))
# 把字典添加到列表中
cases.append(dic)
return cases
def write_data(self, row, column, value):
'''
:param row: 寫入行
:param column: 寫入列
:param value: 寫入值
:return:
'''
workbook = openpyxl.load_workbook(self.filename)
sh = workbook[self.sheetname]
sh.cell(row=row, column=column, value=value)
workbook.save(self.filename)
def close_file(self):
self.close_file(self.filename)
if __name__ == '__main__':
t = HandleExcel("cases.xlsx", "login").read_data()
print(t)

綜合運用:
import unittest
import os
import requests
from unittestreport import ddt,list_data
from commons.handle_excel import HandleExcel
from commons.handle_path import DATAS_DIR
from commons.handle_config import conf
from commons.tools import replace_data
from commons.handle_log import log
@ddt
class TestLogin(unittest.TestCase):
excel=HandleExcel(os.path.join(DATAS_DIR,'apicases.xlsx'),'login')
cases=excel.read_data()
@list_data(cases)
def test_login(self,item):
# 1、準備數(shù)據(jù)
url=conf.get('env','base_url')+item['url']
item['data']=replace_data(item['data'],TestLogin)
params=eval(item['data'])
method=item['method'].lower()
expected=eval(item['expected'])
# 2、請求接口
response=requests.request(method=method,url=url,json=params)
res=response.json()
code = response.status_code
print('請求參數(shù):', params)
print('預期結果:', expected)
print('實際結果:', res)
print('返回碼:', code)
# 3、斷言
try:
self.assertEqual(expected['code'],code)
self.assertIn(expected['msg'],res.values())
except AssertionError as e:
log.error('用例-----【{}】-----執(zhí)行不通過'.format(item['title']))
log.exception(e)
raise e
else:
log.info('用例-----【{}】------執(zhí)行通過'.format(item['title']))
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python實現(xiàn)機械分詞之逆向最大匹配算法代碼示例
這篇文章主要介紹了python實現(xiàn)機械分詞之逆向最大匹配算法代碼示例,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
PyCharm2025中設置conda的多個Python版本的方法實踐
本文介紹了在PyCharm 2025.1.1版本中使用Anaconda管理多個Python版本的經驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-10-10
利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程
這篇文章主要介紹了利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程,用到了Twisted框架的異步通信機制,需要的朋友可以參考下2015-04-04
Python爬取數(shù)據(jù)并實現(xiàn)可視化代碼解析
這篇文章主要介紹了Python爬取數(shù)據(jù)并實現(xiàn)可視化代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Python讀取excel文件中帶公式的值的實現(xiàn)
這篇文章主要介紹了Python讀取excel文件中帶公式的值的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04

