這一步我們需要用到python庫xlrd我們已經把配置分離,並新增了log,接下來我們應該嘗試著進行資料分離,進行引數化了。
我們修改file_reader.py檔案,新增excelreader類,實現讀取excel內容的功能:
"""
檔案讀取。yamlreader讀取yaml檔案,excelreader讀取excel。
"""import yaml
import os
from xlrd import open_workbook
class
yamlreader:
def__init__
(self, yamlf):
if os.path.exists(yamlf):
self.yamlf = yamlf
else:
raise filenotfounderror('檔案不存在!')
self._data = none
@property
defdata
(self):
# 如果是第一次呼叫data,讀取yaml文件,否則直接返回之前儲存的資料
ifnot self._data:
with open(self.yamlf, 'rb') as f:
self._data = list(yaml.safe_load_all(f)) # load後是個generator,用list組織成列表
return self._data
class
sheettypeerror
(exception):
pass
class
excelreader:
""" 讀取excel檔案中的內容。返回list。
如:excel中內容為:
| a | b | c |
| a1 | b1 | c1 |
| a2 | b2 | c2 |
如果 print(excelreader(excel, title_line=true).data),輸出結果:
[, ]
如果 print(excelreader(excel, title_line=false).data),輸出結果:
[[a,b,c], [a1,b1,c1], [a2,b2,c2]]
可以指定sheet,通過index或者name:
raise filenotfounderror('檔案不存在!')
self.sheet = sheet
self.title_line = title_line
self._data = list()
@property
defdata
(self):
ifnot self._data:
workbook = open_workbook(self.excel)
if type(self.sheet) not
in [int, str]:
raise sheettypeerror('please pass in or , not '.format(type(self.sheet)))
elif type(self.sheet) == int:
s = workbook.sheet_by_index(self.sheet)
else:
s = workbook.sheet_by_name(self.sheet)
if self.title_line:
title = s.row_values(0) # 首行為title
for col in range(1, s.nrows):
# 依次遍歷其餘行,與首行組成dict,拼到self._data中
else:
for col in range(0, s.nrows):
# 遍歷所有行,拼到self._data中
print(reader.data)
我們新增title_line引數,用來宣告是否在excel**裡有標題行,如果有標題行,返回dict列表,否則返回list列表,如下:
# excel**如下:
# | title1 | title2 |
# | value1 | value2 |
# | value3 | value4 |
# 如果title_line=true
[, ]
# 如果title_line=false
[["title1", "title2"], ["value1", "value2"], ["value3", "value4"]]
在data目錄下建立baidu.xlsx,如下:
| search |
| selenium 灰藍 |
| python selenium |
然後我們再修改我們可憐的小用例:
unittest.main(verbosity=2)subtest是py3 unittest裡帶的功能,py2中沒有,py2中要想使用,需要用unittest2庫。subtest是沒有setup和teardown的,所以需要自己手動新增並執行。
現在我們就實現了資料分離,之後如果要搜尋「張三」、「李四」,只要在excel裡新增行就可以了。subtest引數化也幫助我們少寫了很多用例方法,不用一遍遍在case裡copy and paste了。
怎樣從0開始搭建乙個測試框架 10 資料生成器
有時候介面或ui上傳入的資料需要符合指定的格式,我們在引數化的過程中又不願意在excel中一遍遍去構造這樣的資料,這時我們可以加入生成器來為我們產生符合某些固定格式的資料。這裡我推薦乙個挺有意思的庫,faker,能夠為你產生各種假資料 別忘了在readme.md中添上你要用的庫。在utils中建立乙...
怎樣從0開始搭建乙個測試框架 11 支援方法
框架到這裡已經很不錯了,後面就需要各位自己去完善了。比如有時候請求需要加密 簽名,還有一些支援方法,可以在utils中建個support.py放進去。在utils中建立乙個support.py檔案,裡面可以放需要的一些支援方法,我們示例乙個加密和簽名的方法 一些支援方法,比如加密 import ha...
從0開始搭建基礎後台框架
很多人會想tp5後台的通用框架很多,為何還要自己去造輪子呢,用著不香嗎?我想說的是不香,每乙個框架的ui包括裡面的外掛程式呢,引用的都不是很全面,有的過於臃腫,有的過於簡單,反正不滿意,那麼我就只能自己動手造了,這個框架呢,目的就是為了以後公司開發產品方便,方便自己去動手做一些自己喜歡的東西 框架採...