在進行軟件測試或設計自動化測試框架時,一個不可避免的過程就是: 參數 化,在利用 python 進行自動化測試開發時,通常會使用 excel 來做數據管 理,利用 xlrd、xlwt 開源包來讀寫 excel。
一、環境安裝
1.安裝xlrd
pip install xlrd
2.安裝xlwt
pip install xlwt
二、讀取excel文件數據示例
讓我們先看一個簡單的 excel 讀寫示例,從表 1 中讀取數據:
#-*- coding:utf-8 -*- import xlrd import xlwt if __name__=="__main__": #excel文件全路徑 excelpath = r'F:\pycharm-workspace\selenium\test.xlsx' #用於讀取excel文件 tableopen = xlrd.open_workbook(excelpath) #獲取excel工作簿數 count = len(tableopen.sheets()) print u"工作簿數為%s"%count #獲取表數據的行、列數 table = tableopen.sheet_by_name('Sheet1') h = table.nrows l = table.ncols print u"表數據的行數為%s,列數為%s"%(h,l) # 循環讀取數據 for i in range(0,h): rowValues = table.row_values(i) #按行讀取數據 # 輸出讀取的數據 for data in rowValues: print data,' ', print ''
- 執行結果:\
三、寫入excel文件數據示例
注意這里的 excel 文件的后綴是 xls 如果是 xlsx 打開是會提示無效
# 注意這里的 excel 文件的后綴是 xls 如果是 xlsx 打開是會提示無效 excelpath = r'F:\pycharm-workspace\selenium\test2.xls' wtbook = xlwt.Workbook() #新增一個sheet工作表 sheet = wtbook.add_sheet('Sheet1',cell_overwrite_ok=True) #寫入數據頭 headlist = [u'學號',u'姓名',u'班級'] row = 0 col = 0 #循環寫 for head in headlist: sheet.write(row,col,head) col = col+1 for i in xrange(1,5):#行數限制,我這里寫入4行數據 for j in xrange(1,3):#列數限制,因為我的headlist有三個數據,所以這里肯定是3列 #寫入4行0~99的隨機數 data = random.randint(0,99) sheet.write(i,0,i) sheet.write(i,j, data) print u"寫第[%d]行數據"%(i) #保存 wtbook.save(excelpath)
- 執行結果:
open()用法
123456789101112131415161718192021222324# encoding:utf-8
try
:
# 寫模式打開文件,若不存在該文件,則創建
out
=
open
(
"data.out"
,
"w"
)
# 默認為讀模式,等價於out = open("data.out", "r")
# out = open("data.out")
# 追加+寫模式
# out = open("data.out", "a+")
# 標准輸出(通常是屏幕),使用file參數將數據寫入到指定的文件
print
(
"blues stun easily"
,
file
=
out)
# 出現異常的類型很多,我們需要了解具體的異常信息,可以使用as err,將異常打印出來
except
IOError as err:
# 將err對象轉換成字符串類型
print
(
"file error:"
+
str
(err))
# 無論try中的語句執行是否出問題,都會執行finally中的代碼
finally
:
# 如果某些異常情況導致文件不存在,則會引發異常,所以想判斷文件是否存在,存在則關閉文件
if
'data'
in
locals
():
# 記得一定要關閉
out.close()
關於Selenium 如何讀取Txt、Excel、Csv..等文件以及如何獲得我們想要的格式數據
一 、讀取TXT文檔
Txt算是比較簡單的文檔了,不多說直接上代碼:
1.單獨的關鍵字,直接讀取
1
2
3
4
5
6
|
#coding utf-8
file_info =
open
(
'Testing.txt'
,
'r'
)
values
= file_info.readlines()
file_info.
close
()
for
item
in
values
:
print item
|
結果:
2.兩列關鍵字,以‘,’逗號分隔
代碼部分:
1
2
3
4
5
6
7
|
file_info =
open
(
'Testing.txt'
,
'r'
)
values
= file_info.readlines()
file_info.
close
()
for
item
in
values
:
data1 = item.split(
','
)[0]#第一列
data2 = item.split(
','
)[1]#第二列
print data1, data2
|
結果如下:
Txt格式的是比較簡單的,但是如果有多組數據呢?用spilt拆分就沒那么方便了,因為以split方法一次只能將字符串拆分為兩段,那么針對多組數據就要用到csv和excel啦。
二、讀取csv文檔
注意csv文檔的建立最好是在excel中另存為——>選擇csv格式,而不是直接改后綴。
讀取csv文檔我們需要引入csv庫,即import csv
先看一下我們需要讀取的文檔:
OK,接下來我們要訪問這些數據:
1
2
3
4
5
6
|
import csv #訪問csv文件需要csv庫的支持(本身自帶),直接導入即可
my_file =
'Testing.csv'
#文件名
values
= csv.reader(
open
(my_file,
'rb'
))
for
item
in
values
:
print item #整行讀
print item[0], item[1], item[2] #一個數據一個數據的讀
|
使用item[Index]可以訪問具體的那個數據,結果如下:
看起來不錯,很能滿足我們的需求,可以方便的讀取多行多列數據,而且針對單個的數據訪問也十分方便。但是,But…有些人可能試過,csv是不支持中文的,自己寫進中文進去打開就有可能是一堆編碼,那么Excel就登場了~
三、讀取Excel文件
筆者個人覺得Excel是比較完美的,改進了CSV不支持中文的情況,好的,看一下我們的例子:
在Selenium使用Excel讀取數據的話我們是需要下載Excel庫文件的,即xlrd文件,下載鏈接:https://pypi.python.org/pypi/xlrd
下載完成解壓,在當前目錄cmd,輸入python setup.py install即可安裝成功,也可以直接cmd,輸入pip命令:pip install xlrd
安裝完成后,直接導入xlrd即可使用相關操作Excel的方法:
1
2
3
4
5
6
7
8
9
|
import xlrd
my_file = xlrd.open_workbook(
'Testing.xls'
)#得到文件
table
= my_file.sheets()[0]#得到sheet頁
nrows =
table
.nrows #總行數
ncols =
table
.ncols #總列數
i = 0
while i < nrows:
print
table
.row_values(i)[0],
table
.row_values(i)[1]
i = i+1
|
結果:
OK,Excel能夠解決中文的問題,但是此處需要注意,不能直接讀取整行的數據,只能將數據分開一個一個的讀取,例如以上代碼換成下面這樣:
1
2
3
|
while i < nrows:
print
table
.row_values(i) #讀取整行
i = i+1
|
結果就會出現編碼問題:
可能大家還注意到了,這里第二列的數字1990,在Selenium就變成了浮點型數字1999.0,之前看過一個解決辦法是在Excel文檔中,選中單元格,右鍵單元格格式——>文本.但是筆者發現這樣並不能解決問題,至於數字目前筆者的解決辦法是代碼判斷,如果是純數字就轉化為int型。
1
2
3
4
5
6
7
|
while i < nrows:
cell =
table
.row_values(i)[1] #得到數字列數據
ctype =
table
.cell(i, 1).ctype #得到數字列數據的格式
if ctype == 2
and
cell % 1 == 0: #判斷是否是純數字
cell =
int
(cell) #是純數字就轉化位
int
類型
print
table
.row_values(i)[0], cell
i = i+1
|
接下來我們再看結果:
OK,這下圓滿啦。
*注意:
1.csv或者excel格式的文件在最初設置數據的時候都要右鍵——>單元格格式——>文本
2.excel文件的格式必須是后綴名為*.xls
3.excel文檔的ctype 分為5種,對應分別是:
empty: 0
string: 1
number:2
date: 3
boolean :4
error:5