利用python的第三方openpyxl模塊作Appium數據驅動測試

Python第三方模塊openpyxl簡介

openpyxl是專門用來讀取和寫入Excel文檔的python第三方模塊。本文將使用這個模塊和appium工具進行自動化測試的數據驅動測試實踐。python

安裝openpyxl模塊

使用下面命令來安裝openpyxl:linux

$ pip install openpyxl

若是你使用的是ubuntu等linux系統的話,請在命令以前添加sudo命令:android

$ sudo pip install openpyxl

用ipython熟悉openpyxl操做

準備測試數據文檔

接下來要準備下面測試android計算器的測試數據,請使用MS Office軟件或其餘相似軟件打開一個Excel文件,輸入下面內容並保存爲「test_data.xlsx」:web

輸入圖片說明

本文件的百度網盤下載連接:https://pan.baidu.com/s/1hrS4pMW編程

**注意:**若是你電腦上沒有能夠編輯Excel文檔的軟件,能夠安裝開源的LibreOfficeubuntu

利用ipython學習openpyxl

建議使用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>

從Excel表格讀取測試數據進行appium自動化測試

下面要經過讀取剛剛完成的「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 著

相關文章
相關標籤/搜索