Web自動化測試:數據分離(類變量、yaml、excel)

在ui自動化中,經常會用到數據的存儲和讀取,這里主要介紹一下如何處理測試中經常用到的數據。

一、類變量

一般習慣把元素定位地址作為類變量存儲,因為這樣對于調試糾錯比較方便,書寫調用也較簡單。

1.1本類中調用類變量

例如:Demo類中,在類下申請一個變量name,如果這個類中的方法要引用name,需要self.name這樣的格式調用。

demo_class.py

class Demo():

? ? name = "川石學院"

? ? def print_name(self):

? ? ? ? print(self.name)

1.2調用其他類的類變量

如果其他class類要引用,那需要先import這個類,然后再使用Demo.name這種形式調用。

other_class.py

from demo_class import Demo

class Demo2():


? ? print(Demo.name)

二、yaml配置文件

這里引用了pyyaml這個庫,用來讀取.yaml格式的文件。

2.1yaml文件的格式:

1,通過縮進和冒號來控制層級范圍

2,如果有中文需要加引號

3,注釋符號為:#

如下所示:

account:

# 我是注釋

? user_1:

? ? username:

? ? ? "川石學院"

? ? password:

? ? ? meiyoumima

2.2yaml的安裝與引用:

命令行安裝:pip install pyyaml

代碼導入庫:import yaml

2.3讀取yaml文件:

大致步驟是:

打開文件、載入文件、讀取文件、關閉文件

需要注意的一點是:打開文件時,我設置了encoding格式,因為發現就算是加了引號的中文,部分字符仍然無法正確編碼讀取

import yaml

# 打開文件

fr = open("D:/config.yaml", 'r', encoding='gb18030', errors='ignore')

# 載入文件格式

data = yaml.load(fr)

# 讀取文件層級

# 下面兩種方法都可以獲取到信息值,區別是通過get方法獲取值時,如果key鍵不存在會返回None,通過索引[]來獲取值時,key鍵不存在會報錯。

# get_user = data["account"]["user_1"]["username"]

get_user = data.get("account").get("user_1").get("username")

print(get_user)

# 關閉文件

fr.close()

對于yaml文件讀取出來的數據是字典的格式,在讀取yaml時,有時想要查找的數據藏得層級很深,要查找的話要寫很多層級,將來如果層級變動又要做出調整,所以這里使用了遞歸寫一個方法,來通過任意一個層級名稱,來獲取層級下的所有值。

關于遞歸

def get_any_key_info(key_name="", yaml_data=None):

? ? # for循環字典這一層的所有key值

? ? for i in list(yaml_data.keys()):

? ? ? ? # 如果當前的key是我們要找的

? ? ? ? if i == key_name:

? ? ? ? ? ? return yaml_data[i]

? ? ? ? # 如果當前的key不是我們找的key,并且是字典類型

? ? ? ? elif type(yaml_data[i]) == dict:

? ? ? ? ? ? ? ? # 使用遞歸方法,查找下一層的字典

? ? ? ? ? ? ? ? recursion = get_any_key_info(key_name, yaml_data[i])

? ? ? ? ? ? ? ? # 每層遞歸要返回一個值,否則函數默認返回None

? ? ? ? ? ? ? ? return recursion

三、excel文件

excel文件一般適合更加復雜的場景,如果只是簡單的記錄配置、數據,我認為還是類變量和yaml這種可以在python編輯器中讀取編輯的類型更適合些。

3.1excel操作類的安裝和引用:

引用庫介紹:

xlrd:讀取excel

xlwt:寫入excel

安裝:

pip install xlrd

pip install xlwt

引用:

import xlrd

import xlwt

3.2 讀取excel的方法

文件的讀取

xlrd.open_workbook(file_path)

file_path:excel文件路徑

獲取excel文件的sheet名:

sheet_names()

根據sheet名/索引獲取sheet表數據

sheet_by_index(index)

index:索引(從0開始)

sheet_by_name(name)

name:sheet表名

獲取sheet表中行數、列數

nrows? # 行數

ncols? # 列數

根據行、列索引獲取行、列數據(索引從0開始)

獲取某行數據

row_values(index)

獲取某列數據

col_values(index)

根據坐標位置獲取單元格數據(坐標是從0開始)

cell(row, col).value

row:行的索引

col:列的索引

3.3關于讀取sheet表,自己封裝的方法。

基于上述的方法和功能,我在想,一般的讀取excel表格,都是列名和數據對應的,所以寫了如下方法,可以把每一行的數據作為一個字典,通過列名來對應,每行作為一個字典來存儲在整體的列表中。

def excel_table_byname(file_path, colnameindex=0, sheet_name='Sheet1'):

? ? """

? ? 根據名稱獲取Excel表格中的數據

? ? 參數

? ? file:Excel文件路徑

? ? colnameindex:表頭列名所在行的索引

? ? sheet_index:Sheet1名稱

? ? 返回:列表,每個列表元素為列名對應的字典

? ? """

? ? data = xlrd.open_workbook(file_path)

? ? table = data.sheet_by_name(sheet_name)

? ? nrows = table.nrows? # 行數

? ? ncols = table.ncols? # 列數

? ? # 列名行

? ? colnames = table.row_values(colnameindex)

? ? dic_list = []

? ? # 從第一行到最后一行循環

? ? for rown in range(1, nrows):

? ? ? ? row = table.row_values(rown)

? ? ? ? if row:

? ? ? ? ? ? app = {}

? ? ? ? ? ? # 單行數據組合為字典

? ? ? ? ? ? for i in range(ncols):

? ? ? ? ? ? ? ? app[colnames[i]] = row[i]

? ? ? ? ? ? dic_list.append(app)

? ? return dic_list

3.4實例演示

import xlrd

# 讀取載入文件

file = xlrd.open_workbook("F:/test.xlsx")

# 獲取所有sheet名

print("sheet名稱:%s" % file.sheet_names())

# 獲取sheet

sheet1 = file.sheet_by_name("表1")

print(sheet1)

# 獲取sheet中行列數

print("列數:%s" % sheet1.ncols)

print("行數:%s" % sheet1.nrows)

# 獲取行、列數據

print("第1行數據:%s" % sheet1.row_values(0))

print("第1列數據:%s" % sheet1.col_values(0))

# 獲取單元格數據

print("第2行、第2列數據:%s" % sheet1.cell(1, 1).value)

def excel_table_byname(file_path, colnameindex=0, sheet_name='Sheet1'):

? ? """

? ? 根據名稱獲取Excel表格中的數據

? ? 參數

? ? file:Excel文件路徑

? ? colnameindex:表頭列名所在行的索引

? ? sheet_index:Sheet1名稱

? ? 返回:列表,每個列表元素為列名對應的字典

? ? """

? ? data = xlrd.open_workbook(file_path)

? ? table = data.sheet_by_name(sheet_name)

? ? nrows = table.nrows? # 行數

? ? ncols = table.ncols? # 列數

? ? # 列名行

? ? colnames = table.row_values(colnameindex)

? ? dic_list = []

? ? # 從第一行到最后一行循環

? ? for rown in range(1, nrows):

? ? ? ? row = table.row_values(rown)

? ? ? ? if row:

? ? ? ? ? ? app = {}

? ? ? ? ? ? # 單行數據組合為字典

? ? ? ? ? ? for i in range(ncols):

? ? ? ? ? ? ? ? app[colnames[i]] = row[i]

? ? ? ? ? ? dic_list.append(app)

? ? return dic_list

# 讀取單個sheet表數據

print("讀取excel數據....")

data_list = excel_table_byname(file_path="F:/test.xlsx",sheet_name="表1")

print(data_list)

for x in data_list:

? ? print(x)

結果:

sheet名稱:['表1']

<xlrd.sheet.Sheet object at 0x0000029770E44390>

列數:3

行數:6

第1行數據:['測試序號', '測試功能', '測試結果']

第1列數據:['測試序號', '1', '2', '3', '4', '5']

第2行、第2列數據:首頁

讀取excel數據。。。

[{'測試序號': '1', '測試結果': '成功', '測試功能': '首頁'}, {'測試序號': '2', '測試結果': '失敗', '測試功能': '流程'}, {'測試序號': '3', '測試結果': '成功', '測試功能': '資金'}, {'測試序號': '4', '測試結果': '成功', '測試功能': '賬戶'}, {'測試序號': '5', '測試結果': '失敗', '測試功能': '服務'}]

{'測試序號': '1', '測試結果': '成功', '測試功能': '首頁'}

{'測試序號': '2', '測試結果': '失敗', '測試功能': '流程'}

{'測試序號': '3', '測試結果': '成功', '測試功能': '資金'}

{'測試序號': '4', '測試結果': '成功', '測試功能': '賬戶'}

{'測試序號': '5', '測試結果': '失敗', '測試功能': '服務'}

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370