解放雙手,提高生產(chǎn)力,這款神器你值得擁有

文 |?豆豆
來源:Python 技術(shù)「ID: pythonall」

從石器時(shí)代開始,原始人來已經(jīng)開始學(xué)會(huì)制造并使用工具,以滿足自己的生活所需,這也是人類和動(dòng)物最本質(zhì)的區(qū)別,人類懂得制造并使用工具而動(dòng)物不會(huì)。
21 世紀(jì)的現(xiàn)代社會(huì)更是如此,企業(yè)與企業(yè)之間是人才的競(jìng)爭(zhēng),而人的競(jìng)爭(zhēng)力則嚴(yán)重依賴其會(huì)使用工具的多少以及熟練程度,畢竟古人有云:「君子生非異也,善假于物也」。
軟件測(cè)試作為軟件發(fā)布前的最后一個(gè)環(huán)節(jié),起著至關(guān)重要的作用。雖然在很多公司里相對(duì)于開發(fā)來講,公司對(duì)測(cè)試崗都不太重視,但這絕對(duì)不能掩蓋其地位的重要性,稍有疏漏,就可能給公司帶來巨大的損失。
縱觀國(guó)內(nèi)各公司大部分的測(cè)試工作依然都是手動(dòng)完成的,這不僅是對(duì)人力資源的巨大浪費(fèi),同時(shí)還伴隨著巨大的潛在風(fēng)險(xiǎn)。因?yàn)槿擞袝r(shí)候會(huì)犯錯(cuò),而機(jī)器則不會(huì)。所以我們要盡可能的把可以自動(dòng)化的操作交給機(jī)器去完成,從而解放我們的雙手,去做一些更有意義的事情。
什么是 Appium
Appium 是一個(gè)開源的移動(dòng)端自動(dòng)化框架,可用于測(cè)試原生應(yīng)用,移動(dòng)網(wǎng)頁(yè)應(yīng)用和混合型應(yīng)用,且其是跨平臺(tái)的,可用于 iOS 和 Android 操作系統(tǒng)。這也就意味著你可以針對(duì)不同的平臺(tái)使用同一套 Api 來編寫測(cè)試程序,以提高代碼的服用行和可維護(hù)性。
設(shè)計(jì)思想
為了更好的應(yīng)對(duì)千變?nèi)f化的需求,Appium 沒有和某一門具體的語(yǔ)言綁死,開發(fā)者可以使用自己最熟悉的任何語(yǔ)言來使用該框架。Appium 之所以這么靈活完全得益于其優(yōu)秀的設(shè)計(jì)思路,該框架使用 client-server 的設(shè)計(jì)模式,只要 server 端可以收到 client 端發(fā)送過來的請(qǐng)求,那么 client 端用什么語(yǔ)言來實(shí)現(xiàn)其實(shí)意義已經(jīng)不大了,無關(guān)緊要。
這樣的設(shè)計(jì)思想帶來了巨大的好處,其一就是使框架可以做到支持多語(yǔ)言,其二則是可以把 server 端放在任何機(jī)器上,即使是云服務(wù)器上也完全沒有問題。
入門
想必在程序圈兒的你肯定對(duì) Hello World 不陌生,每當(dāng)我們學(xué)習(xí)一個(gè)新的技術(shù)的時(shí)候基本都會(huì)寫一個(gè) Hello World 的 demo 來快速熟悉該技術(shù),同樣,今天我就帶著大家做一個(gè)入門 Appium。
首先我們把環(huán)境搭建起來,依次安裝下列軟件。
Android Studio JDK Python 3.8 PyCharm 網(wǎng)易模擬器 Appium 桌面版
之所以需要安裝 Android Studio 完全是因?yàn)殒溄影沧磕M器調(diào)試 App 程序時(shí)會(huì)用到 Android SDK,而 Android Studio 附帶了 Andoid SDK,固直接安裝 Android Studio。另外我們選擇 Appium 桌面版,是因?yàn)樽烂姘娓綆Э梢暬僮鹘缑妫瑢?duì)新手比較友好。
其中前四個(gè)大家可能都比較熟悉,自行安裝即可。Appium 則需從 https://github.com/appium/appium-desktop/releases/tag/v1.18.3 下載對(duì)應(yīng)的版本直接安裝就可以了。

安裝完成后啟動(dòng) Appium,Host 和 Port 默認(rèn)即可,接著點(diǎn)擊下面的配置按鈕進(jìn)入配置頁(yè),設(shè)置完成 Android Home 和 Java Home 后直接啟動(dòng) Server 就可以了。


當(dāng)看到如下界面時(shí),恭喜你,Server 已經(jīng)啟動(dòng)成功了。

接下來,我們開始完善 client 端,其實(shí)就是代碼而已,直接調(diào)用 Api 即可。因?yàn)槲覀兪且ㄟ^ Appium 來操控模擬器上的 App,所以需要先將模擬器啟動(dòng)。命令行輸入 adb devices 如果看到以下信息,則說明模擬器是正常的。

接著就是編寫 client 端代碼了,
from?appium?import?webdriver
desired_capabilities?=?{
????"platformName":?"Android",?#?操作系統(tǒng)
????"deviceName":?"emulator-5554",?#?設(shè)備?ID
????"platformVersion":?"6.0.1",?#?設(shè)備版本號(hào)
????"appPackage":?"com.tencent.mm",?#?app?包名
????"appActivity":?"com.tencent.mm.ui.LauncherUI",?#?app?啟動(dòng)時(shí)主?Activity
????'noReset':?True?#?是否保留?session?信息?可以避免重新登錄
}
driver?=?webdriver.Remote('http://localhost:4723/wd/hub',?desired_capabilities)
print('鏈接到安卓模擬器')
有了以上信息之后,我們就可以通過程序直接鏈接到模擬器,然后自動(dòng)啟動(dòng)微信 App 了。

那么啟動(dòng)了微信 App 之后我們還可以做什么操作呢?基本上我們手動(dòng)可以做的操作,程序都可以替我們完成。
driver.find_element_by_id('com.tencent.mm:id/f8y').click()
print('查找搜索按鈕')
time.sleep(3)
driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys('Python?技術(shù)')
print('查找搜索輸入框?&?寫入搜索關(guān)鍵字')
time.sleep(3)
driver.find_element_by_id('com.tencent.mm:id/tm').click()
print('點(diǎn)擊?icon?圖標(biāo)')
time.sleep(3)
driver.find_element_by_id('com.tencent.mm:id/cj').click()
print('點(diǎn)擊右上角頭像')
time.sleep(3)
driver.find_element_by_id('com.tencent.mm:id/a1u').click()
print('點(diǎn)擊第一篇文章')
上面這一套代碼做了什么操作呢,簡(jiǎn)言之就是通過搜索找到「Python 技術(shù)」公眾號(hào),然后再去到該公眾號(hào)主頁(yè)并且查看了第一篇文章。同時(shí)程序?yàn)榱私o App 留出一點(diǎn)反應(yīng)時(shí)間,我們?cè)诿看伟l(fā)送指令后均讓程序休息 3 秒鐘。
細(xì)心的你可能發(fā)現(xiàn)了,上述代碼主要涉及到三個(gè) Api,find_element_by_id()、send_keys() 以及 click,看函數(shù)名也就知道是做什么的了。
那么,我們?cè)趺粗滥硞€(gè)元素的 ID 呢?這時(shí)候就又要請(qǐng)出我們的桌面版 Appium 了。點(diǎn)擊「啟動(dòng)成功」界面右上角的放大鏡圖標(biāo)。之后將上述程序中的配置信息添加上去,最后點(diǎn)擊「Start Session」按鈕,不出意外的話你應(yīng)該能看到微信啟動(dòng)界面了,就是那個(gè)地球。

但是細(xì)心的你會(huì)發(fā)現(xiàn),模擬器上的界面和 Appium 上的不一致,此時(shí)需要你刷新下 Appium 上的界面信息,點(diǎn)擊下圖中的刷新按鈕就可以了。

如果想獲取某個(gè)元素的 ID,那么則先選中選擇按鈕,接著選中你想要獲取 ID 的元素即可。

總結(jié)
今天我們學(xué)習(xí)了自動(dòng)化神器 Appium,其實(shí)該框架不僅僅只是用來做測(cè)試,其用武之地可多著呢,比如定時(shí)給女票發(fā)微信提醒她「多喝熱水」,哈哈哈,小伙伴們可以發(fā)揮自己的想象力做一些好玩的工具出來哦。
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
