怎樣從0開始搭建乙個測試框架 3 引數化

2021-08-15 02:07:15 字數 4501 閱讀 7935

這一步我們需要用到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包括裡面的外掛程式呢,引用的都不是很全面,有的過於臃腫,有的過於簡單,反正不滿意,那麼我就只能自己動手造了,這個框架呢,目的就是為了以後公司開發產品方便,方便自己去動手做一些自己喜歡的東西 框架採...