openpyxl是專門用來讀取和寫入Excel文檔的python第三方模塊。本文將使用這個模塊和appium工具進行自動化測試的數據驅動測試實踐。python
使用下面命令來安裝openpyxl:linux
$ pip install openpyxl
若是你使用的是ubuntu等linux系統的話,請在命令以前添加sudo命令:android
$ sudo pip install openpyxl
接下來要準備下面測試android計算器的測試數據,請使用MS Office軟件或其餘相似軟件打開一個Excel文件,輸入下面內容並保存爲「test_data.xlsx」:web
本文件的百度網盤下載連接:https://pan.baidu.com/s/1hrS4pMW編程
**注意:**若是你電腦上沒有能夠編輯Excel文檔的軟件,能夠安裝開源的LibreOffice。ubuntu
建議使用IPython來熟悉openpyxl的使用方法,具體請查看openpyxl的官方文檔,地址:https://openpyxl.readthedocs.io/en/default/api
在終端中輸入下面命令啓動ipython。服務器
$ ipython
繼續在ipython交互環境中輸入如下代碼進行openpyxl的學習:app
In [13]: wb = openpyxl.load_workbook('test_data.xlsx') #打開當前目錄下的test_data.xlsx文件 In [14]: wb.get_sheet_names() #獲取當前sheet名稱 Out[14]: ['Sheet1'] In [15]: sheet = wb.get_active_sheet() #新建sheet對象 In [16]: sheet.title #查看新建sheet對象的標題 Out[16]: 'Sheet1' In [17]: sheet['A1'].value #查看sheet頁中A1單元格的數值 Out[17]: '編號' --略-- In [26]: sheet.rows #sheet頁中的行數對象 Out[26]: <generator object get_squared_range at 0x7fe384b47fc0>
下面要經過讀取剛剛完成的「test_data.xlsx」表格中的元素id來定位並點擊,android手機自帶的計算器中對應的按鈕,而且將每一條的執行結果記錄在一個新的表格中。編輯器
請打開一個新的文本編輯器窗口,輸入的代碼以下,將文件保存爲testCal.py:
#!/usr/bin/env python3 # coding=utf-8 import openpyxl #此模塊用於讀寫Excel表格 from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' #設置操做平臺 desired_caps['platformVersion'] = '5.1.1' #操做系統版本 desired_caps['deviceName'] = 'Nexus 4' #設備名稱 desired_caps['appPackage'] = 'com.android.calculator2' #啓動原生的計算器 desired_caps['appActivity'] = '.Calculator' #同上,啓動原生的計算器 desired_caps['udid'] = '04c5a5af52197902' #設備ID,能夠經過adb devices命令查看 desired_caps['noReset'] = 'True' # 設置會話不會重置 #經過appium服務器,新建driver對象 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) wb = openpyxl.load_workbook('test_data.xlsx') # 加載測試數據表格 sheet = wb.get_sheet_by_name('Sheet1') # 經過枚舉函數來循環處理全部的數據行,注意去除標題行 for i, _ in enumerate(list(sheet.rows)[:-1]): id = sheet['C' + str(i + 2)].value # 讀取測試數據字段 driver.find_element_by_id(id).click() #點擊指定的id的按鍵 #元素定位到公式顯示區域,獲取此元素的文本值做爲實際結果 text = driver.find_element_by_id('com.android.calculator2:id/formula').text sheet['E' + str(i + 2)].value = text # 給E列賦值,實際返回結果 expected_result = sheet['D' + str(i + 2)].value #獲取預期結果字段 # 判斷實際結果和預期結果是否一致,一致的話標記pass,不然標記fail。 if text == expected_result: sheet['F' + str(i + 2)].value = 'pass' else: sheet['F' + str(i + 2)].value = 'fail' wb.save('updatedTestData.xlsx') # 另存爲表格文檔 driver.quit()
上面這段代碼首先導入了openpyxl模塊,也導入appium相關的模塊,你能夠用appium進行android手機自動化測試,若是你對appium不熟悉,能夠參考我以前寫的文章《利用IPython來學習Appium操做》來先學習一下。 接下來代碼進行appium啓動須要的相關設置,而後啓動被測應用。繼續經過openpyxl的函數來讀取Excel表格數據,用for循環來遍歷每一行測試數據,這裏注意要排除掉第一行數據(也就是標題行)。在for循環內部對每一行數據都進行讀取測試數據,執行測試和將實際結果和測試結果寫入表格的操做。
最後成功運行上面代碼後,查看新生成的測試結果'updatedTestData.xlsx'文件,結果以下:
利用python的openpyxl模塊不僅是能夠配合appium進行測試,一樣能夠和selenium等工具配合,並且也能用在api接口測試方面。 並且openpyxl模塊的功能不單單是簡單的讀入和寫入數據,它還有生成Excel圖表,調整電子表格格式等功能,若是讀者興趣的話,能夠深刻研究官方文檔。
參考文獻:
《Python編程快速上手——讓繁瑣工做自動化》 AI Sweigart 著