Web自動化測試:數(shù)據(jù)分離(類變量擂红、yaml、excel)

在ui自動化中围小,經(jīng)常會用到數(shù)據(jù)的存儲和讀取昵骤,這里主要介紹一下如何處理測試中經(jīng)常用到的數(shù)據(jù)。

一肯适、類變量

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

1.1本類中調(diào)用類變量

例如:Demo類中蹦玫,在類下申請一個變量name,如果這個類中的方法要引用name刘绣,需要self.name這樣的格式調(diào)用樱溉。

demo_class.py

class Demo():

? ? name = "川石學院"

? ? def print_name(self):

? ? ? ? print(self.name)

1.2調(diào)用其他類的類變量

如果其他class類要引用,那需要先import這個類纬凤,然后再使用Demo.name這種形式調(diào)用福贞。

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

代碼導(dǎo)入庫:import yaml

2.3讀取yaml文件:

大致步驟是:

打開文件、載入文件猖任、讀取文件你稚、關(guān)閉文件

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

import yaml

# 打開文件

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

# 載入文件格式

data = yaml.load(fr)

# 讀取文件層級

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

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

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

print(get_user)

# 關(guān)閉文件

fr.close()

對于yaml文件讀取出來的數(shù)據(jù)是字典的格式枪芒,在讀取yaml時彻况,有時想要查找的數(shù)據(jù)藏得層級很深,要查找的話要寫很多層級舅踪,將來如果層級變動又要做出調(diào)整纽甘,所以這里使用了遞歸寫一個方法,來通過任意一個層級名稱抽碌,來獲取層級下的所有值悍赢。

關(guān)于遞歸

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

? ? # for循環(huán)字典這一層的所有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])

? ? ? ? ? ? ? ? # 每層遞歸要返回一個值左权,否則函數(shù)默認返回None

? ? ? ? ? ? ? ? return recursion

三、excel文件

excel文件一般適合更加復(fù)雜的場景破婆,如果只是簡單的記錄配置涮总、數(shù)據(jù),我認為還是類變量和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()

根據(jù)sheet名/索引獲取sheet表數(shù)據(jù)

sheet_by_index(index)

index:索引(從0開始)

sheet_by_name(name)

name:sheet表名

獲取sheet表中行數(shù)、列數(shù)

nrows? # 行數(shù)

ncols? # 列數(shù)

根據(jù)行烹笔、列索引獲取行裳扯、列數(shù)據(jù)(索引從0開始)

獲取某行數(shù)據(jù)

row_values(index)

獲取某列數(shù)據(jù)

col_values(index)

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

cell(row, col).value

row:行的索引

col:列的索引

3.3關(guān)于讀取sheet表,自己封裝的方法谤职。

基于上述的方法和功能饰豺,我在想,一般的讀取excel表格允蜈,都是列名和數(shù)據(jù)對應(yīng)的冤吨,所以寫了如下方法,可以把每一行的數(shù)據(jù)作為一個字典饶套,通過列名來對應(yīng)漩蟆,每行作為一個字典來存儲在整體的列表中。

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

? ? """

? ? 根據(jù)名稱獲取Excel表格中的數(shù)據(jù)

? ? 參數(shù)

? ? file:Excel文件路徑

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

? ? sheet_index:Sheet1名稱

? ? 返回:列表妓蛮,每個列表元素為列名對應(yīng)的字典

? ? """

? ? data = xlrd.open_workbook(file_path)

? ? table = data.sheet_by_name(sheet_name)

? ? nrows = table.nrows? # 行數(shù)

? ? ncols = table.ncols? # 列數(shù)

? ? # 列名行

? ? colnames = table.row_values(colnameindex)

? ? dic_list = []

? ? # 從第一行到最后一行循環(huán)

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

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

? ? ? ? if row:

? ? ? ? ? ? app = {}

? ? ? ? ? ? # 單行數(shù)據(jù)組合為字典

? ? ? ? ? ? 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中行列數(shù)

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

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

# 獲取行怠李、列數(shù)據(jù)

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

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

# 獲取單元格數(shù)據(jù)

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

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

? ? """

? ? 根據(jù)名稱獲取Excel表格中的數(shù)據(jù)

? ? 參數(shù)

? ? file:Excel文件路徑

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

? ? sheet_index:Sheet1名稱

? ? 返回:列表,每個列表元素為列名對應(yīng)的字典

? ? """

? ? data = xlrd.open_workbook(file_path)

? ? table = data.sheet_by_name(sheet_name)

? ? nrows = table.nrows? # 行數(shù)

? ? ncols = table.ncols? # 列數(shù)

? ? # 列名行

? ? colnames = table.row_values(colnameindex)

? ? dic_list = []

? ? # 從第一行到最后一行循環(huán)

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

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

? ? ? ? if row:

? ? ? ? ? ? app = {}

? ? ? ? ? ? # 單行數(shù)據(jù)組合為字典

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

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

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

? ? return dic_list

# 讀取單個sheet表數(shù)據(jù)

print("讀取excel數(shù)據(jù)....")

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

print(data_list)

for x in data_list:

? ? print(x)

結(jié)果:

sheet名稱:['表1']

<xlrd.sheet.Sheet object at 0x0000029770E44390>

列數(shù):3

行數(shù):6

第1行數(shù)據(jù):['測試序號', '測試功能', '測試結(jié)果']

第1列數(shù)據(jù):['測試序號', '1', '2', '3', '4', '5']

第2行捺癞、第2列數(shù)據(jù):首頁

讀取excel數(shù)據(jù)夷蚊。。髓介。

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

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

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

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

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

{'測試序號': '5', '測試結(jié)果': '失敗', '測試功能': '服務(wù)'}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惕鼓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唐础,更是在濱河造成了極大的恐慌箱歧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彻犁,死亡現(xiàn)場離奇詭異叫胁,居然都是意外死亡,警方通過查閱死者的電腦和手機汞幢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門驼鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人森篷,你說我怎么就攤上這事输钩。” “怎么了仲智?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵买乃,是天一觀的道長。 經(jīng)常有香客問我钓辆,道長剪验,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任前联,我火速辦了婚禮功戚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘似嗤。我一直安慰自己啸臀,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布烁落。 她就那樣靜靜地躺著乘粒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伤塌。 梳的紋絲不亂的頭發(fā)上灯萍,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音寸谜,去河邊找鬼竟稳。 笑死属桦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的他爸。 我是一名探鬼主播聂宾,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诊笤!你這毒婦竟也來了系谐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讨跟,失蹤者是張志新(化名)和其女友劉穎纪他,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晾匠,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡茶袒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凉馆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薪寓。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澜共,靈堂內(nèi)的尸體忽然破棺而出向叉,到底是詐尸還是另有隱情,我是刑警寧澤嗦董,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布母谎,位于F島的核電站,受9級特大地震影響京革,放射性物質(zhì)發(fā)生泄漏奇唤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一匹摇、第九天 我趴在偏房一處隱蔽的房頂上張望冻记。 院中可真熱鬧,春花似錦来惧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钠至,卻和暖如春葛虐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棉钧。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工屿脐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓的诵,卻偏偏與公主長得像万栅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子西疤,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355