這里介紹的是appium+python自動(dòng)化測(cè)試環(huán)境搭建
腳本語言有幾種,這里選擇了python,簡(jiǎn)單說一下python:
這里介紹的是appium+python自動(dòng)化測(cè)試環(huán)境搭建:
1、腳本語言有幾種,這里選擇了python,簡(jiǎn)單說一下python一些優(yōu)勢(shì)點(diǎn):
Python是一種計(jì)算機(jī)程序設(shè)計(jì)語言。是一種動(dòng)態(tài)的冰垄、面向?qū)ο蟮哪_本語言,最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell)权她,隨著版本的不斷更新和語言新功能的添加虹茶,越來越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā)隅要。
?(1)Python的定位是“優(yōu)雅”蝴罪、“明確”、“簡(jiǎn)單”拾徙,所以Python程序看上去總是簡(jiǎn)單易懂洲炊,初學(xué)者學(xué)Python,不但入門容易,而且將來深入下去暂衡,可以編寫那些非常非常復(fù)雜的程序询微。
(2)可移植性—Python是FLOSS(自由/開放源碼軟件)之一。由于它的開源本質(zhì)狂巢,Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過改動(dòng)使它能夠工作在不同平臺(tái)上)撑毛。如果避免使用依賴于系統(tǒng)的特性,那么Python程序無需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行
(3)Python既支持面向過程的函數(shù)編程也支持面向?qū)ο蟮某橄缶幊踢罅臁T诿嫦蜻^程的語言中藻雌,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在面向?qū)ο蟮恼Z言中斩个,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來的胯杭。與其他主要的語言如C++和Java相比,Python以一種非常強(qiáng)大又簡(jiǎn)單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>
(4)可擴(kuò)展性和可嵌入性受啥。如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開做个,可以把分程序用C或C++編寫,然后在Python程序中使用滚局。也可以把Python嵌入你的C/C++程序居暖,從而向程序用戶提供腳本功能。
(5)豐富的庫藤肢。Python標(biāo)準(zhǔn)庫確實(shí)很龐大寒亥。python有可定義的第三方庫可以使用托慨。它可以幫助你處理各種工作贱案,包括正則表達(dá)式刀脏、文檔生成、單元測(cè)試丑孩、線程冀宴、數(shù)據(jù)庫灭贷、網(wǎng)頁瀏覽器温学、CGI、FTP甚疟、電子郵件仗岖、XML、XML-RPC览妖、HTML轧拄、WAV文件、密碼系統(tǒng)讽膏、GUI(圖形用戶界面)檩电、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python俐末,所有這些功能都是可用的料按。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外卓箫,還有許多其他高質(zhì)量的庫载矿,如wxPython、Twisted和Python圖像庫等等烹卒。
(6)規(guī)范的代碼闷盔。Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。
2旅急、自動(dòng)化測(cè)試框架選擇的是appium逢勾,為什么選擇appium,因?yàn)閍ppium框架在自動(dòng)化測(cè)試中有著統(tǒng)治級(jí)的優(yōu)勢(shì):
(1)主流框架的對(duì)比:
(2)各大框架優(yōu)缺點(diǎn)說明
? ? ? 1)Monkey是Android SDK自帶的測(cè)試工具藐吮,在測(cè)試過程中會(huì)向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流敏沉,如按鍵輸入、觸摸屏輸入炎码、手勢(shì)輸入等)盟迟,實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試,也有日志輸出潦闲。實(shí)際上該工具只能做程序做一些壓力測(cè)試攒菠,由于測(cè)試事件和數(shù)據(jù)都是隨機(jī)的,不能自定義歉闰,所以有很大的局限性辖众。
? ? ? 2)MonkeyRunner也是Android SDK提供的測(cè)試工具。嚴(yán)格意義上來說MonkeyRunner其實(shí)是一個(gè)Api工具包和敬,比Monkey強(qiáng)大凹炸,可以編寫測(cè)試腳本來自定義數(shù)據(jù)、事件昼弟。缺點(diǎn)是腳本用Python來寫啤它,對(duì)測(cè)試人員來說要求較高,有比較大的學(xué)習(xí)成本舱痘。
? ? ? 3)Espresso是Google的開源自動(dòng)化測(cè)試框架变骡。相對(duì)于Robotium和UIAutomator,它的特點(diǎn)是規(guī)模更小芭逝、更簡(jiǎn)潔塌碌,API更加精確,編寫測(cè)試代碼簡(jiǎn)單旬盯,容易快速上手台妆。因?yàn)槭腔贗nstrumentation的翎猛,所以不能跨App。
? ? ? 4)UiAutomator也是Android提供的自動(dòng)化測(cè)試框架接剩,基本上支持所有的Android事件操作办成,對(duì)比Instrumentation它不需要測(cè)試人員了解代碼實(shí)現(xiàn)細(xì)節(jié)(可以用UiAutomatorviewer抓去App頁面上的控件屬性而不看源碼)÷基于Java迂卢,測(cè)試代碼結(jié)構(gòu)簡(jiǎn)單、編寫容易桐汤、學(xué)習(xí)成本而克,一次編譯,所有設(shè)備或模擬器都能運(yùn)行測(cè)試怔毛,能跨App(比如:很多App有選擇相冊(cè)员萍、打開相機(jī)拍照,這就是跨App測(cè)試)拣度。缺點(diǎn)是只支持SDK 16(Android 4.1)及以上碎绎,不支持Hybird App、WebApp抗果。
? ? ? 5)Instrumentation是早期Google提供的Android自動(dòng)化測(cè)試工具類筋帖,雖然在那時(shí)候JUnit也可以對(duì)Android進(jìn)行測(cè)試,但是Instrumentation允許你對(duì)應(yīng)用程序做更為復(fù)雜的測(cè)試冤馏,甚至是框架層面的日麸。通過Instrumentation你可以模擬按鍵按下、抬起逮光、屏幕點(diǎn)擊代箭、滾動(dòng)等事件。Instrumentation是通過將主程序和測(cè)試程序運(yùn)行在同一個(gè)進(jìn)程來實(shí)現(xiàn)這些功能涕刚,你可以把Instrumentation看成一個(gè)類似Activity或者Service并且不帶界面的組件嗡综,在程序運(yùn)行期間監(jiān)控你的主程序。缺點(diǎn)是對(duì)測(cè)試人員來說編寫代碼能力要求較高杜漠,需要對(duì)Android相關(guān)知識(shí)有一定了解极景,還需要配置AndroidManifest.xml文件,不能跨多個(gè)App碑幅。
? ? ? 6)Athrun是淘寶出的一個(gè)移動(dòng)測(cè)試框架/平臺(tái)戴陡,同時(shí)支持iOS和Android。Android部分也是基于Instrumentation沟涨,在Android原有的ActivityInstrumentationTestCase2類基礎(chǔ)上進(jìn)行了擴(kuò)展,提供一整套面向?qū)ο蟮腁PI异吻。
? ? ? 7)Robotium也是基于Instrumentation的測(cè)試框架裹赴,目前國內(nèi)外用的比較多喜庞,資料比較多,社區(qū)也比較活躍棋返。缺點(diǎn)是對(duì)測(cè)試人員來說要有一定的Java基礎(chǔ)延都,了解Android基本組件,不能跨App睛竣。
? ? ? 8)Selendroid:也是基于Instrumentation的測(cè)試框架晰房,可以測(cè)試Native App、Hybird App射沟、Web App殊者,但是網(wǎng)上資料較少,社區(qū)活躍度也不大验夯。
? ? ? 9)Appium是最近比較熱門的框架猖吴,社區(qū)也很活躍。這個(gè)框架應(yīng)該是是功能最強(qiáng)大的:
? ? ? ? ? ?a.它的優(yōu)點(diǎn):開源挥转;支持Native App海蔽、Hybird App、Web App绑谣;支持Android党窜、iOS、Firefox OS借宵;Server也是跨平臺(tái)的刑然,你可以使用Mac OS X、Windows或者Linux暇务;
? ? ? ? ? ?b.它的哲理是:用Appium自動(dòng)化測(cè)試不需要重新編譯App泼掠;支持很多語言來編寫測(cè)試腳本,Java垦细、Javascript择镇、PHP、Python括改、C#腻豌、Ruby等主流語言;不需要為了自動(dòng)化測(cè)試來重造輪子嘱能,因?yàn)閿U(kuò)展了WebDriver吝梅。
? ? ? ? ? c.它的設(shè)計(jì)理念: Client/Server架構(gòu),運(yùn)行的時(shí)候Server端會(huì)監(jiān)聽Client端發(fā)過來的命令惹骂,翻譯這些命令發(fā)送給移動(dòng)設(shè)備或模擬器苏携,然后移動(dòng)設(shè)備或模擬器做出響應(yīng)的反應(yīng)。正是因?yàn)檫@種架構(gòu)对粪,所以Client可以使用Appium client libraries多種語言的測(cè)試腳本右冻,而且Server端完全可以部署在服務(wù)器上装蓬,甚至云服務(wù)器。Session纱扭,
每個(gè)Client連接到Server以后都會(huì)有一個(gè)Session ID牍帚,而且Client發(fā)送命令到Server端都需要這個(gè)Session ID,因?yàn)檫@個(gè)seesion id代表了你所打開的瀏覽器或者是移動(dòng)設(shè)備的模擬器乳蛾。所以你甚至可以打開N個(gè)Session暗赶,同時(shí)測(cè)試不同的設(shè)備或模擬器□逅妫 Desired Capabilities,其實(shí)就是一個(gè)鍵值對(duì),設(shè)置一些測(cè)試的相關(guān)信息來告訴
Server端,我們需要測(cè)試iOS、還是Android,或者換是WebApp等信息。Appium Server是Node.js寫的设拟,所以可以直接用NPM來進(jìn)行安裝跑慕。Appium Clients慰于,Mac OS和Win下提供GUI,不需要裝Node.js妙黍,方便測(cè)試人員操作。
d.相關(guān)限制:如果你在Windows使用Appium怕品,你沒法使用預(yù)編譯專用于OS X的.app文件,因?yàn)锳ppium依賴OS X專用的庫來支持iOS測(cè)試纹安,所以在Windows平臺(tái)你不能測(cè)試iOS Apps塔粒。這意味著你只能通過在Mac上來運(yùn)行iOS測(cè)試卒茬。
二船老、環(huán)境搭建
環(huán)境搭建準(zhǔn)備:
jdk
nodejs
Android SDK
Xcode
appium
python
PyCharm
1咖熟、jdk安裝
下載jdk安裝,配好環(huán)境變量即可柳畔,在終端輸入:java -version馍管,有顯示版本號(hào),就表示安裝成功
2薪韩、nodejs安裝
可以通過brew命令:brew install node進(jìn)行安裝
在終端輸入:node -v确沸,有顯示出版本號(hào),就表示安裝成功
3俘陷、Android SDK?
安裝Android studio罗捎,配好環(huán)境變量即可
4、Xcode安裝
Xcode在mac系統(tǒng)中的App Store直接下載安裝即可
5拉盾、appium安裝
appium安裝有兩種方式:
(1)直接下載appium.dmg 運(yùn)行即可https://bitbucket.org/appium/appium.app/downloads/(我就是使用這種方法安裝的桨菜,簡(jiǎn)單快捷,也建議使用這種方式)
dmg安裝appium捉偏,一般是由兩種版本:正式版和桌面版倒得。正式版最新的版本是V1.5.3,更新速度很慢告私;桌面版appium-desktop屎暇,現(xiàn)在可以更新到V1.9.2了;兩者在使用上都差不多驻粟。
(2)使用npm安裝
在終端輸入命令:npm install -g appium根悼,但是使用npm安裝的appium卻報(bào)錯(cuò)了(如下圖):
這時(shí)候,執(zhí)行命令:npm install -g cnpm蜀撑,安裝cnpm挤巡,然后再執(zhí)行命令:cnpm install -g appium,安裝appium即可
針對(duì)npm和cnpm的區(qū)別酷麦,我去了解了一下:cnpm跟npm用法完全一致矿卑,只是在執(zhí)行命令時(shí)將npm改為cnpm。
上述的原因:npm安裝插件是從國外服務(wù)器下載沃饶,受網(wǎng)絡(luò)影響大母廷,可能出現(xiàn)異常
安裝appium-doctor: cnpm install -g appium-doctor
出現(xiàn)全?,表示appium安裝成功了
如果appium-doctor運(yùn)行后報(bào)錯(cuò):Carthage was NOT found 糊肤!
解決辦法:安裝carthage
brew install carthage
carthage:類似cocoapods管理的第三方代碼琴昆,自動(dòng)將工程編譯為動(dòng)態(tài)庫,所以僅支持ios8以上
啟動(dòng)appium server:appium &
6馆揉、安裝python
由于mac系統(tǒng)自帶了python 2.7业舍,所以可以直接使用
7、安裝PyCharm
到官網(wǎng)去下載mac版的PyCharm,解壓安裝即可
三舷暮、腳本測(cè)試
先介紹幾條查看移動(dòng)設(shè)備參數(shù)的常用命令:
查看devices名:
adb devices
查看platfromVersion
adb shell
getprop ro.build.version.release
查看appPackage和appActivity
adb shell
dumpsys activity | grep mFocusedActivity
寫個(gè)兩個(gè)簡(jiǎn)單的腳本去啟動(dòng)模擬器:
Android:(對(duì)計(jì)算機(jī)進(jìn)行操作)
from appium import webdriver
androidTest={}
androidTest["platformName"]="Android"
androidTest["platformVersion"]="7.0"
androidTest["deviceName"]="emulator-5554"
androidTest["appPackage"]="com.android.calculator2"
androidTest["appActivity"]=".Calculator t23"
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",androidTest)
driver.find_element_by_id("com.android.calculator2:id/digit_9").click()
driver.find_element_by_id("com.android.calculator2:id/del").click()
driver.find_element_by_id("com.android.calculator2:id/digit_5").click()
driver.find_element_by_id("com.android.calculator2:id/op_add").click()
driver.find_element_by_id("com.android.calculator2:id/digit_6").click()
driver.find_element_by_id("com.android.calculator2:id/eq").click()
driver.quit()
ios:(使用safari瀏覽器打開百度)
?from?appium?import?webdriver
import?os,time
PATH?=?lambda?p:?os.path.abspath(
????os.path.join(os.path.dirname(__file__),?p)
)
iosTest={
????"platformName":"ios",
????"platformVersion":"12.1",
????"deviceName":"iPhone?XR",
????"browserName":"safari"
????}
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",iosTest)
time.sleep(5)
driver.get("http://www.baidu.com
")?
補(bǔ)充一下在運(yùn)行腳本過程中所遇到的問題:
1态罪、寫腳本時(shí),from appium import webdriver一直有紅色波浪線
原因:使用的python沒有帶appium和selenium的包
解壓:打開PyCharm下面,點(diǎn)擊Preferences复颈,在界面的Project Interpreter添加Appium-Python-Client和selenium的包即可
2、運(yùn)行腳本诸狭,提示“urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=4723): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10222a950>: Failed to establish a new connection: [Errno 61] Connection refused',))”
原因:appium server沒有啟動(dòng)
解決:重啟appium server
3券膀、運(yùn)行腳本君纫,提示“urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=80): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10825f9d0>: Failed to establish a new connection: [Errno 61] Connection refused',))”
原因:webdriver.Remote里面的127.0.0.1沒有加端口號(hào)驯遇,127.0.0.1的默認(rèn)端口號(hào)為80
解決:127.0.0.1后面加上端口號(hào),端口號(hào)是在appium有蓄髓,默認(rèn)為4723
4叉庐、運(yùn)行腳本,提示“?selenium.common.exceptions.WebDriverException:?Message:?Parameters?were?incorrect.?We?wanted?{"required":["desiredCapabilities"],"optional":["requiredCapabilities","sessionId","id"]}?and?you?sent?["capabilities","desiredCapabilities"]?”
原因:selenium版本和appium版本不匹配
解決:導(dǎo)入selenium版本是3.3.1的包即可
5会喝、運(yùn)行腳本陡叠,提示“ImportError: cannot import name 'InvalidArgumentException' from 'selenium.common.exceptions' (/Users/lxd-computer/PycharmProjects/Appium/venv/lib/python3.7/site-packages/selenium/common/exceptions.py)”
原因:?/Users/lxd-computer/PycharmProjects/Appium/venv/lib/python3.7/site-packages/selenium/common/exceptions.py這個(gè)文件沒有定義到InvalidArgumentException這個(gè)類?
解決:在exceptions.py文件加上:
?class?InvalidArgumentException(WebDriverException):
"""
"""
pass?
6、運(yùn)行腳本肢执,提示“selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not create simulator with name 'appiumTest-iphone XR', device type id 'iphone XR' and runtime id '12.1'. Reason: 'simctl error running 'create': Invalid device type: iphone XR'”
原因:模擬器參數(shù)的值錯(cuò)誤
解決:deviceName的值應(yīng)該是iPhone XR枉阵,而不是iphone XR
7、運(yùn)行腳本预茄,提示“urllib3.exceptions.ProtocolError:(‘Connection aborted.‘,BadStatusLine("''",))”
原因:socket斷開了兴溜,連接中斷
解決:加上sleep等待時(shí)間或者延長(zhǎng)sleep等待時(shí)間
8、Appium中報(bào)錯(cuò)耻陕,“URLError:10061-由于目標(biāo)計(jì)算機(jī)積極拒絕拙徽,無法連接”解決方案
解決方案1:
? ? python連接模擬器的前提是:檢查Appium軟件是否已經(jīng)打開
解決方案2:
打開控制面板>網(wǎng)絡(luò)和Internet>Internet選項(xiàng)>連接>局域網(wǎng)設(shè)置,
代理服務(wù)器那里诗宣,“為L(zhǎng)AN使用代理服務(wù)器”如果是有“√”就點(diǎn)掉膘怕,如果沒有“√”,就勾上召庞。
在這里補(bǔ)充一下岛心,關(guān)于模擬器元素的定位的問題:
我這里介紹的是appium-desktop,appium也是一樣的
1篮灼、首先在appium-desktop啟動(dòng)appium server忘古,打開了日志界面:
2、點(diǎn)擊右上方的搜索圖標(biāo)穿稳,打開Automatic Server界面存皂,在Desired Capabilities,添加模擬器的參數(shù),點(diǎn)擊Start Session:
3旦袋、打開相對(duì)應(yīng)應(yīng)用的界面骤菠,點(diǎn)擊左邊界面上的元素,右邊就會(huì)顯示出對(duì)應(yīng)元素的id疤孕,xpath(appium-desktop是不支持通過name值去定位元素)