一、pandas的安裝:
1.安裝pandas其實是非常簡單的,pandas依賴處理Excel的xlrd模塊,所以我們需要提前安裝這個,安裝命令是:pip install xlrd
2.開始安裝pandas,安裝命令是:pip install pandas
二、讀取excel文件
webservice_testcase.xlsx結構如下:
1.首先我們應該先將這個模塊導入
import pandas as pd
2.讀取表單中的數據:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#這個會直接默認讀取到這個Excel的第一個表單 data=sheet.head()#默認讀取前5行數據 print("獲取到所有的值:\n{0}".format(data))#格式化輸出
3.也可以通過指定表單名來讀取數據
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name='userRegister') data=sheet.head()#默認讀取前5行數據 print("獲取到所有的值:\n{0}".format(data))#格式化輸出
4.通過表單索引來指定要訪問的表單,0表示第一個表單,也可以采用表單名和索引的雙重方式來定位表單,也可以同時定位多個表單,方式都羅列如下所示
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name=['sendMCode','userRegister'])#可以通過表單名同時指定多個 # sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name=0)#可以通過表單索引來指定讀取的表單 # sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name=['sendMCode',1])#可以混合的方式來指定 # sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name=[1,2])#可以通過索引 同時指定多個 data=sheet.values#獲取所有的數據,注意這里不能用head()方法 print("獲取到所有的值:\n{0}".format(data))#格式化輸出
二、操作Excel中的行列
1.讀取制定的某一行數據:
sheet=pd.read_excel('webservice_testcase.xlsx')#這個會直接默認讀取到這個Excel的第一個表單 data=sheet.ix[0].values#0表示第一行 這里讀取數據并不包含表頭 print("讀取指定行的數據:\n{0}".format(data))
得到了如下結果:
2.讀取指定的多行:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#這個會直接默認讀取到這個Excel的第一個表單 data=sheet.ix[[0,1]].values#0表示第一行 這里讀取數據并不包含表頭 print("讀取指定行的數據:\n{0}".format(data))
得到了如下的結果:
3.讀取指定行列的數據:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#這個會直接默認讀取到這個Excel的第一個表單 data=sheet.ix[0,1]#讀取第一行第二列的值 print("讀取指定行的數據:\n{0}".format(data))
得到了如下結果:
4.讀取指定的多行多列的值:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') data=sheet.ix[[1,2],['method','description']].values#讀取第二行第三行的method以及description列的值,這里需要嵌套列表 print("讀取指定行的數據:\n{0}".format(data))
得到了如下的結果:
5.讀取所有行指定的列的值:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') data=sheet.ix[:,['method','description']].values#讀取第二行第三行的method以及description列的值,這里需要嵌套列表 print("讀取指定行的數據:\n{0}".format(data))
得到了如下的結果:
6.獲取行號輸出:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') print("輸出行號列表",sheet.index.values)
得到了如下的結果:
7.獲取列名輸出:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') print("輸出列標題",sheet.columns.values)
得到了如下的結果:
8.獲取指定行數的值:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') print("輸出值",sheet.sample(2).values)
9.獲取指定列的值
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx') print("輸出值",sheet['description'].values)
得到了如下的結果:
三、將excel中的每一條數據處理成字典,然后讓如一個列表中
test_data=[] sheet = pd.read_excel(self.file_name, sheet_name=key) for i in sheet.index.values:#獲取行號的索引,并對其進行遍歷:#根據i來獲取每一行指定的數據 并利用to_dict轉成字典 row_data=sheet.ix[i,['id','method','description','url','param','ExpectedResult']].to_dict() test_data.append(row_data)
另外,我們可以把測試用例相關的東西寫入一個配置文件當中,讀取的時候可以根據配置文件中的內容來進行讀取:
配置文件如下:
[CASECONFIG] sheet_list={'sendMCode':'all', 'userRegister':'all', 'verifyUserAuth':'all', 'bindBankCard':[] }
配置文件處理.py代碼如下:
import configparser class ReadConfig: def read_config(self,file_path,section,option): cf=configparser.ConfigParser() cf.read(file_path,encoding="utf-8") value=cf.get(section,option) return value
project_path.py代碼如下:
import os Project_path=os.path.split(os.path.split(os.path.realpath(__file__))[0])[0] #配置文件路徑 case_config_path=os.path.join(Project_path,'config','case.config') #測試用例的路徑 test_cases_path=os.path.join(Project_path,'test_data','webservice_testcase.xlsx')
然后我們把讀取excel中的內容封裝成一個類,代碼示例如下:
from common import project_pathfrom common.read_config import ReadConfig as RC import pandas as pd class DoExcel: def __init__(self,file_name): self.file_name=file_name self.sheet_list=eval(RC().read_config(project_path.case_config_path,'CASECONFIG','sheet_list')) def do_excel(self): test_data=[] for key in self.sheet_list: if self.sheet_list[key] == 'all': # 讀取所有的用例 sheet = pd.read_excel(self.file_name, sheet_name=key) for i in sheet.index.values:#獲取行號的索引,并對其進行遍歷: #根據i來獲取每一行指定的數據 并利用to_dict轉成字典 row_data=sheet.ix[i,['id','method','description','url','param','ExpectedResult']].to_dict() test_data.append(row_data) else: sheet = pd.read_excel(self.file_name, sheet_name=key) for i in self.sheet_list[key]:#根據list中的標號去讀取excel指定的用例 row_data=sheet.ix[i-1,['id','method','description','url','param','ExpectedResult']].to_dict() test_data.append(row_data) return test_data if __name__ == '__main__': test_data=DoExcel(project_path.test_cases_path).do_excel() print(test_data)
如果將配置改成如下內容:
[CASECONFIG] sheet_list={'sendMCode':[1,3,5], 'userRegister':[], 'verifyUserAuth':[], 'bindBankCard':[] }
我們將會得到如下的運行結果:
[{: 1, : , : , : , : , : }, {: 3, : , : , : , : , : }, {: 5, : , : , : , : , : }]
到此,將excel中的用例數據讀取成為[{key1:value1},{key2:value2},...,{keyn:valuen}]這樣的形式已經完畢,但是還有很多東西需要完善,比如用例中完成參數的替換,測試完成后回寫測試數據到excel對應的表格中等等內容。