手機自動化測試用例雖然能夠在模擬器上運行,但是模擬器畢竟和真機仍是有區別的。在第二章咱們講到了模擬器上運行測試用例後,我又花了兩天的時間,研究了一下真機運行測試用例。只有在真機上運行,才能真正發現出問題。期間也遇到了很多問題,不過最終仍是搞定了,如今先將測試用例真機運行的方法說一下,而後再羅列我遇到的問題。html
一, 打開手機的USB調試模式python
不一樣的手機有不一樣的方法打開usb調試模式,但是去網上查一下你手機的調試模式打開辦法(http://wenku.baidu.com/view/3077f06c25c52cc58bd6be15.html?re=view)。還有一個能夠去網上下載一個「USB調試快捷開關」的應用,將手機的USB調試模式打開。android
二, 鏈接手機到電腦web
將手機用數據線鏈接到電腦,並受權USB調試模式。查看鏈接的效果,在cmd下運行命令:adb devices -l 查看UDID,以下圖4.1所示:session
若是有輸出,就表示鏈接成功。函數
三, 啓動Appium服務工具
根據查到的UDID啓動appium服務,運行命令:佈局
#>appium -a 127.0.0.1 -p 4723 –U 4ca1558c --no-reset學習
-U 參數後面跟的一串字符就是手機的UDID,這個是經過第二步查到的。
當程序輸出如上圖信息的時候,表示appium啓動成功,此時即可以運行測試腳本了。
四, 安裝要測試的App
固然咱們要須要在測試機上安裝被測試的App,去網上下載最新的衆籌網的App,而後安裝到測試機上。注意要確保安裝的App的版本,手機系統版本,和android Sdk的API版本相同或是兼容。
五,測試腳本的編寫及運行
真機運行的測試腳本與模擬器上幾乎是相同的,就是有些兒配置不太同樣。具體腳本詳解以下:
#-*- coding: UTF-8 -*- import os import time import unittest from selenium import webdriver from lib2to3.pgen2.driver import Driver from lib2to3.tests.support import driver PATH=lambda p:os.path.abspath( os.path.join(os.path.dirname(__file__),p) ) global driver class LoginAndroidTests(unittest.TestCase): def setUp(self): desired_caps={} desired_caps['device'] = 'android' desired_caps['platformName']='Android' desired_caps['browserName']='' desired_caps['version']='4.4.2' desired_caps['deviceName']='MIUI-KXCCNBF22.0'#這是測試機的型號,能夠查看手機的關於本機選項得到 desired_caps['app'] = PATH('D:\\AndroidAutomation\\AndroidAutoTest\\app\\zhongchou.apk')#被測試的App在電腦上的位置 #若是知道被測試對象的apppage,appActivity能夠加上下面這兩個參數,若是不知道,能夠註釋掉,不影響用例執行 #desired_caps['appPackage']='com.subject.zhongchou' #desired_caps['appActivity']='.ZhongChou' self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) def tearDown(self): self.driver.quit() def test_login(self): time.sleep(10) #點擊「註冊登陸」按鈕 button=self.driver.find_element_by_id("com.subject.zhongchou:id/register_button") button.click() time.sleep(5) #登陸 name = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_phone') name.click() name.send_keys('183XXXXXX05') psd = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_password') psd.click() psd.send_keys('XXXXXXXX’) blogin=self.driver.find_element_by_id('com.subject.zhongchou:id/go_numberlogin') blogin.click() time.sleep(10) #此處加上檢測登陸是否成功的代碼 if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(LoginAndroidTests) unittest.TextTestRunner(verbosity=2).run(suite)
另開一個cmd窗口,運行測試腳本(python XXXX.py)便可。此時服務端就會有輸出,程序在手機上運行。打開App後,輸入用戶名和密碼,而後進入應用後停了10秒後關閉App。
注:在測試用例運行過程當中,要在手機上安裝Appium Settings,按提示容許安裝就能夠了。
(1)電腦鏈接到手機後,運行adb devices –l無信息輸出?
電腦鏈接手機後,通常狀況下會提示安裝驅動程序,若是手機較新的話可能不會提示,可是運行adb devices –l後無任何輸出。此時只須要安裝91手機助手或是其餘手機管理工具,安裝上相應的驅動程序,再次鏈接就能夠了。
(2)運行程序後提示:WebDriverException: Message: u"A new session could not be created. (Original error: Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity)"?
當我從網上學習了腳本的編寫方法後,模擬着寫了一個我本身的測試用例,但是鏈接到真機後,運行腳本時,在執行過程當中出現了上面的錯誤提示,但是程序沒法運行。
在網上查看了一下,找到了問題所在:是程序的'appPackage'和‘appActivity’不正確,查找了解決辦法,有說要反編譯被測試的app,而後查找裏面的appactivity。但是反編譯後才發現,裏面的東西好多,找不到開始的時候appactivity是哪兒個?只好再找其餘的辦法了。
最後在一個論壇的回覆中找到了解決辦法:將setup函數中的兩行代碼註釋掉就能夠了。
desired_caps['appPackage']='com.subject.zhongchou'
desired_caps['appActivity']='.ZhongChou'
(3)在程序執行這程中,用Send_keys()函數對輸入框輸入值的時候,沒法輸入?
當我執行測試用例的時候,發現用戶名和密碼沒法用send_keys()函數輸入到輸入框中。由於輸入就會打開軟鍵盤,而軟鍵盤上面的佈局是九宮格的,點擊一直出錯。
在網上查了好多辦法,人家都是一用的這個函數啊,爲何到我這就不行了呢?我想到了先切換到數字或是英語輸入模式,而後再輸入,折騰起來很麻煩,尚未成功。最後才發現,是我本身好傻,安裝了搜狗輸入法的緣由,把這個輸入法卸掉後就成功了!
本章咱們講解了如何在真實的手機上運行測試用例,固然咱們仍然是以衆籌網App的登陸爲例的。經過分步介紹,咱們能夠一步步地把測試用例在真機上運行起來,這也是咱們真正開始咱們的自動化測試用例編寫之路以前的準備。環境,Appium API和真機運行方法咱們都講解完後,從下一章咱們開始,講解具體的測試用例應該如何入手。