自動化測試工具 - Appium

一、簡單介紹

一、測試對象

appium 是一個自動化測試開源工具,支持iOS和 Android平臺上的原生應用,web應用和混合應用。 
● 移動原生應用:單純用ios或者android開發語言編寫的、針對具體某類移動設備、可直接被安裝到設備裏的應用,一般可通過應用商店獲取,比如某個遊戲app; 
● 移動web應用:使用移動瀏覽器訪問的應用(appium支持iOS上的Safari和Android上的 Chrome),不需要下載到設備上,而是通過瀏覽器直接訪問,比如H5九曲封神遊戲; 
● 混合應用:同時使用網頁語言與程序語言開發,通過應用商店區分移動操作系統分發,用戶需要安裝使用的移動應用,比如手機上的淘寶客戶端

二、支持平臺及語言

● appium是跨平臺的,支持OSX,Windows以及Linux系統。它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了iOS和Android測試套件間代碼的複用性 
● appium支持多語言,採用C/S設計模式,只要滿足client能夠發送http請求給server即可

三、工作原理

如圖所示,appium主要分爲三個點:client端,server端,及測試移動設備 
● client端:用各類語言寫的測試腳本 
● server端:我們安裝appium工具的那部分,專門用來監聽並接收來自client端的請求,轉發請求並控制移動設備執行測試,默認開啓並監聽4723接口 
● 移動設備:支持三類設備,我們的最終目的:在設備上自動執行指定的操作 
整個過程: 
第一,在某臺服務器上安裝appium工具(server端),開啓進程(默認4723接口)進行監聽; 
第二,編寫測試腳本,放置到服務器上,執行該測試腳本(相當於發送命令給server端) 
第三,移動設備接收到server端發送過來的命令,執行指定的操作

四、安裝工具

● 測試語言,如python 
● appium客戶端 
● appium服務端 
● 移動設備,若使用虛擬機則需進行安裝


二、環境搭建

1.安裝Android SDK

1、Android SDK(Software Development Kit,軟件開發工具包)提供了 Android API 庫和開發工具構建,測試和調試應用程序,可以看做用於開發和運行Android應用的一個軟件 
2、提供小工具,比如adb、aapt、uiautomatorview 
3、測試設備使用安卓模擬器,這一步決不能跳過

安裝步驟:https://blog.csdn.net/weixin_42277380/article/details/102894252

2.安裝 appium Server

1、下載地址:https://github.com/appium/appium-desktop/releases 
2、下載appium安裝包(appium-desktop-Setup-1.2.7.exe,appium-desktop-1.2.7.dmg等) 
3、安裝,並配置appium環境變量

3.安裝 python-client

1、先安裝編程語言,比如python語言 
2、安裝Appium-Client,python的話可使用pip安裝:pip install Appium-Python-Client


三、應用及操作

1.調用appium過程

1、配置手機設備參數,告訴server端我想調起的是哪一臺手機設備 
2、抓取手機上應用的控件,指定對應的控件來進行操作 
3、對抓取到的控件進行操作,比如點擊、填寫參數等

2.第一步,配置手機設備參數

Appium 的 Desired Capabilities 基本配置如下:
#Android environment
import unittest
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = PATH('../../../apps/selendroid-test-app.apk')
desired_caps['appPackage'] = package
desired_caps['appActivity'] = activity

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

常見參數解釋:

● deviceName:指定啓動設備,比如Android Emulator、iPhone Simulator等 
● automationName:指定自動化引擎,默認appium 
● platformName:指定移動平臺,Android或者iOS 
● platformVersion:指定平臺的系統版本。例如指定Android系統版本爲4.2 
● appActivity:待測試app的Activity,注意,原生app的話要在activity前加個“.” 
● appPackage:待測試app的包名(package)信息

(三)第二步,抓取手機上應用的控件

通過Android SDK內置工具uiautomatorviewer.bat來查看手機應用的控件參數(該工具位於 /tools/bin/ 目錄下) 

1、id定位 

 使用方法: driver.find_element_by_id('com.android.contacts:id/three')

2、name定位    

使用方法: el = self.driver.find_element_by_name('未接來電') 
         el = self.driver.find_elements_by_name('未接來電')

3、class name 定位      

使用方法: els = self.driver.find_element_by_class_name('android.widget.ImageButton') 
         els = self.driver.find_elements_by_class_name('android.widget.ImageButton')

4、Accessibility ID定位 

使用方法: el = self.driver.find_element_by_accessibility_id('三') 
         el = self.driver.find_elements_by_accessibility_id('三')

5、android uiautomator定位 

使用方法: 
el = self.driver.find_element_by_android_uiautomator('new UiSelector().description(星形符號")') 
els = self.driver.find_elements_by_android_uiautomator('new UiSelector().clickable(false)')

4.第三步,操作控件

1.scroll  
scroll(self, origin_el, destination_el):  
從元素origin_el滾動至元素destination_el  
舉例:driver.scroll(el1, el2)  
用法:driver.scroll(el1,el2)

2.tap  
tap(self, positions, duration=None):  
模擬手指點擊(最多五個手指),可設置按住時間長度(毫秒)  
舉例:driver.tap([(100, 20), (100, 60), (100, 100)], 500)  
用法:driver.tap([(x,y),(x1,y1)],500)

3. swipe
swipe(self, start_x, start_y, end_x, end_y, duration=None):  
從A點滑動至B點,滑動時間爲毫秒  
舉例:driver.swipe(100, 100, 100, 400)  
用法:driver.swipe(x1,y1,x2,y2,500)

4. keyevent
keyevent(self, keycode, metastate=None):  
發送按鍵碼(安卓僅有),按鍵碼可以上網址中找到  
用法:driver.keyevent(‘4’)

5. press_keycode
press_keycode(self, keycode, metastate=None):  
發送按鍵碼(安卓僅有),按鍵碼可以上網址中找到  
用法:driver.press_ keycode(‘4’)

6.text
text(self):  
返回元素的文本值  
用法:element.text

7.click
click(self):  
點擊元素  
用法:element.click()

8.get_attribute
get_attribute(self, name):   
獲取某元素的相關值  
用法:element.get_attribute(“name”)

9.size
size(self):  
獲取元素的大小(高和寬)  
用法 driver.element.size

10. page_source
page_source(self):    
獲取當前頁面的源  
用法:driver.page_source

11.quit
quit(self):   
退出腳本運行並關閉每個相關的窗口連接   
舉例:driver.quit()

四、總結

1、Appium跨平臺,支持Android和IOS自動化測試。 
2、Appium支持多語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure等等 
3、支持原生應用,web應用和混合應用 
4、僅僅支持UI測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章