appium 調(diào)研學習

名詞解釋:

appium:是個web接口服務(wù),接受http請求诺擅,可以開啟多個端口晨横,默認4723

appium desktop:內(nèi)嵌了appium,還提供了屬性配置鸠天、腳本錄制等功能

Appium Client:appium為其提供服務(wù)端口讼育,他就是請求的發(fā)送者

appium是什么?

appium是自動化測試工具稠集,可以用來測試iOS和Android平臺的應(yīng)用奶段、Web應(yīng)用和Web混合應(yīng)用。在測試中主要用于流程測試剥纷。

他有一個比較重要的特點痹籍,支持跨平臺,下面的工作原理會提到為什么可以跨平臺的

工作原理

appium選擇了Client/Server的設(shè)計模式晦鞋。

工作原理圖

我們使用自己所熟知的語言編寫腳本蹲缠,通過相應(yīng)語言環(huán)境的Client,發(fā)送http請求到Server端鳖宾,Server端得到腳本吼砂,通過解析,驅(qū)動設(shè)備執(zhí)行appium腳本鼎文。

1渔肩、Client端針對不同的語言開發(fā)了相應(yīng)的appium庫,那么我們寫腳本就可以根據(jù)自己所熟悉的語言下載自己熟悉的appium庫拇惋。我們所熟知的語言有:Ruby周偎、Python、Java撑帖、JavaScript (Node.js)蓉坎、Objective C、PHP胡嘿、C# (.NET)蛉艾、RobotFramework。后面附加相應(yīng)語言的客戶端衷敌。

2勿侯、Server端支持兩大平臺MAC和Windows。我們針對不同的平臺安裝使用缴罗。

3助琐、移動設(shè)備支持iOS、Android兩大真機和分別對應(yīng)的模擬器面氓。

總結(jié):多語言兵钮、跨平臺蛆橡。appium的腳本支持多語言開發(fā)、同時可以在不同的平臺運行掘譬。

搭建環(huán)境

作為小白泰演,從搭建環(huán)境到用來做一些簡單的測試,期間遇到各種奇葩問題屁药,繞了很多彎路粥血。在這稍作總結(jié),希望像我一樣的小白們都能有所收獲酿箭。

目前我在Mac系統(tǒng)下复亏,使用Python開發(fā)測試腳本,測試iOS項目(Android項目目前還有問題缭嫡。缔御。。)妇蛀。

Mac系統(tǒng)搭建環(huán)境

Android項目環(huán)境

Node.js耕突,下載地址:https://nodejs.org/en/download/,為什么要裝node.js呢评架?appium server 是用node.js寫的眷茁,安裝node.js可以直接用npm命令安裝appium,或相關(guān) ? ? ? ? ? ?driver、server纵诞。

android SDK上祈、jdk

appium

大體安裝過程是這樣的,brew(mac 套件管理器浙芙,包含很多實用工具)->node->npm->appium

命令行運行:appium-doctor登刺,看看缺什么就裝上什么

iOS項目環(huán)境

Mac系統(tǒng):10.12.6

xCode開發(fā)工具(命令行Xcode Command Line Tools)大多開發(fā)iOS的同學環(huán)境應(yīng)該都是正常的

Appium-Server:目前最新的1.6.2版本

按照上面的工作原理圖 “client->server->移動設(shè)備”分步講解安裝過程。

appium client

不太清楚明明支持多種語言嗡呼,為啥Python和Java測試腳本成為主流纸俭。不過前人栽樹后人乘涼,從網(wǎng)上看了下Python這些例子南窗,最終還是選擇了appium client揍很,其中還有一個最重要的原因,使用appium desktop 可以生成python腳本万伤,試想窒悔,作為小白,把生成的腳本拿來簡單一改就可以使用壕翩,這應(yīng)該算是入門最快的捷徑了蛉迹。

廢話不多說傅寡,直接上python client地址:https://github.com/appium/python-client放妈,下載完成進入到python-clinet目錄執(zhí)行python setup.py install就可以北救,操作如下

git clone git@github.com:appium/python-client.git

cd python-client

python setup.py install

擴展,附贈其他腳本語言的client下載地址芜抒,安裝大同小異珍策,自行百度

Ruby???????????????????????????https://github.com/appium/ruby_lib

Python????????????????????????https://github.com/appium/python-client

Java ? ? ? ? ? ? ? ? ? ? ? ? ? ??https://github.com/appium/java-client

JavaScript (Node.js)???https://github.com/admc/wd

Objective C??????????????????https://github.com/appium/selenium-objective-c

PHP???????????????????????????????https://github.com/appium/php-client

C# (.NET)??????????????????????https://github.com/appium/appium-dotnet-driver

RobotFramework??????????https://github.com/jollychang/robotframework-appiumlibrary

appium server

appium desktop下載地址

https://github.com/appium/appium-desktop/releases/tag/v1.6.2

下面是Appium Server,地址和端口號都是默認的

appium server

點擊啟動Start Server就會開啟監(jiān)聽宅倒,可以看到4723在監(jiān)聽中攘宙,之后運行腳本的所有日志都會在這里展示出來。

點擊放大鏡(Start Inspector Session)拐迁,設(shè)置相應(yīng)的Capabilities蹭劈,為接入設(shè)備做準備。下面是我根據(jù)自己設(shè)備和公司項目的配置的Capabilities

Capabilities配置

關(guān)于Capabilities的配置有很多线召,你想要的都在這里

http://appium.io/docs/en/writing-running-appium/caps/

iOS程序是如何通過server傳遞指令控制界面的铺韧??缓淹?

WebDriverAgent哈打,是實現(xiàn)自動化測試工作的實施者(實施者,我自己起的名)讯壶。他可以在iOS平臺為服務(wù)器實現(xiàn)控制遠端設(shè)備料仗。比如啟動、殺死程序和界面點擊伏蚊、拖拽等立轧。通過連接XCTest.framework和調(diào)用蘋果的API直接在設(shè)備上執(zhí)行命令。

下載地址:https://github.com/facebook/WebDriverAgent

下面是我錄制的腳本

#-*- coding: UTF-8 -*-

# This sample code uses the Appium python client

# pip install Appium-Python-Client

# Then you can paste this? into a file and simply run with Python

import time

from appium import webdriver

caps = {}

caps["platformName"] = "iOS"

caps["deviceName"] = "iPhone"

caps["udid"] = "7e0d8f2dcfbcf64612ae93b087d51bff1f431"

caps["noReset"] = "true"

caps["bundleId"] = "com.yz.spacebridge"

caps["platformVersion"] = "11.2"

caps["xcodeOrgId"] = "<2MUJFSGB46>"

caps["xcodeSigningId"] = "iPhone Developer"

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

el1=driver.find_element_by_xpath("http://XCUIElementTypeButton[@name=\"登錄\"]")

el1.click()

time.sleep( 5 )

els4 = driver.find_elements_by_name("千喜鶴美食廣場")

els4[0].click()

time.sleep( 5 )

els5 = driver.find_elements_by_name("4dc370c7")

els5[0].click()

el2 = driver.find_element_by_accessibility_id("back")

el2.click()

el3 = driver.find_element_by_accessibility_id("back")

el3.click()

driver.quit()

值得注意的是丙挽,我們經(jīng)常會遇到編碼問題肺孵,如上面添加注釋,注意颜阐,此注釋一定要放在最頂端否則不起作用

#-*- coding: UTF-8 -*-

appium desktop平窘,基本使用

要操作或者查看某個(某組)元素,必須事先知道該元素的id或者xpath凳怨,通過appium desktop可以很方便的定位獲取頁面元素id 和xpath瑰艘。另外還有一些基礎(chǔ)的頁面操作,如下圖:

desktop展示圖

縱橫客云小盒收銀接入

好長一段時間的調(diào)研和學習肤舞,最終都要落實到工作和項目中紫新,在云小盒收銀,我們會有所體現(xiàn)李剖。

簡單講下收銀模塊如下:設(shè)置芒率、交易統(tǒng)計、收款篙顺、訂單

云小盒收銀APP主界面

使用appium進行測試偶芍,說白了充择,就是測試整個流程通不通,然后按照“登錄->交易統(tǒng)計->收銀->核對統(tǒng)計結(jié)果->退款”這個主流程一直循環(huán)跑下去匪蟀。

據(jù)上模塊所講椎麦,按照測試流程按照模塊在測試工程中依次劃分下面這四個模塊loginModel(從設(shè)置進入,主測登錄)材彪、cashierModel(收銀)观挎、refundModel(訂單統(tǒng)計、退款)段化、statisticsModel(交易統(tǒng)計)嘁捷。

客戶端模塊架構(gòu)

主模塊:jinyuanbao,統(tǒng)籌管理

threads = []

t1 = threading.Thread(target=runloop)

threads.append(t1)

if __name__ == '__main__':

? ? for t in threads:

? ? ? ? t.start()

總業(yè)務(wù)流程

def task1():

? ? driver = webdriver.Remote("http://localhost:4723/wd/hub", API.desired_caps)

? ? time.sleep(2)

? ? RefundClass().refundAction(driver)

? ? # # 切換賬號

? ? account = LoginClass().loginAction(driver)

? ? API.user_account = account

? ? # 查看賬單

? ? total_dic = StatisticsClass().statisticsAction(driver)

? ? if account != API.account2:

? ? ? ? # 微信支付

? ? ? ? dic = CashierClass().cashier_weixin_Action(driver)

? ? ? ? # # 對比交易賬單

? ? ? ? if dic != None:

? ? ? ? ? ? print dic

? ? ? ? if dic != None and total_dic != None:

? ? ? ? ? ? total_dic = StatisticsClass().payment_data_contrast(driver, total_dic, dic)

? ? ? ? else:

? ? ? ? ? ? print total_dic

? ? ? ? ? ? return

? ? ? ? # 退款

? ? ? ? RefundClass().refundAction(driver)

? ? # 支付寶支付

? ? dic = CashierClass().cashier_alipay_Action(driver)

? ? # 對比交易賬單

? ? if dic != None:

? ? ? ? print dic

? ? if dic != None and total_dic != None:

? ? ? ? total_dic = StatisticsClass().payment_data_contrast(driver, total_dic, dic)

? ? else:

? ? ? ? print total_dic

? ? ? ? return

? ? # 退款

? ?RefundClass().refundAction(driver)

通用模塊 basemethod

主要實現(xiàn)如下功能:

1显熏、本地記錄日志

def report_log(self,content):

? ? ? ? date_current = time.strftime("%Y-%m-%d", time.localtime())

? ? ? ? time_current = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

? ? ? ? log_name = 'log/'+date_current+'.txt'

? ? ? ? logfile = open(log_name, 'a+')

? ? ? ? logfile.write('\n')

? ? ? ? logfile.write('時間:'+time_current+'===')

? ? ? ? logfile.write(content)

? ? ? ? logfile.close()

2普气、通過id查找元素

def get_id(self,id,driver):

? ? ? ? try:

? ? ? ? ? ? element = WebDriverWait(driver,2).until(lambda driver: driver.find_element_by_id(id))

? ? ? ? ? ? return element

? ? ? ? except:

? ? ? ? ? ? print '未定位到元素:'+id

? ? ? ? ? ? return None

3、通過xpath查找元素

def get_xpath(self,xpath,driver):

? ? ? ? try:

? ? ? ? ? ? element = WebDriverWait(driver,2).until(lambda driver: driver.find_element_by_xpath(xpath))

? ? ? ? ? ? return element

? ? ? ? except:

? ? ? ? ? ? print '未定位到元素:'+xpath

? ? ? ? ? ? return None

4佃延、釘釘webhook服務(wù)上報

def dingtalk(self,text):

? ? ? ? self.report_log(text)

? ? ? ? webhook = kwebhook

? ? ? ? xiaoding = DingtalkChatbot(webhook)

? ? ? ? content = text

? ? ? ? xiaoding.send_text(msg=content,is_at_all=True)

5现诀、釘釘webhook error上報

def ding_talk_error(self,text):

? ? ? ? self.report_log(text)

? ? ? ? webhook = kwebhook

? ? ? ? xiaoding = DingtalkChatbot(webhook)

? ? ? ? content = '收銀賬號:' + API.user_account + '\n' + text

? ? ? ? xiaoding.send_text(msg=content, is_at_all=True)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市履肃,隨后出現(xiàn)的幾起案子仔沿,更是在濱河造成了極大的恐慌,老刑警劉巖尺棋,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件封锉,死亡現(xiàn)場離奇詭異,居然都是意外死亡膘螟,警方通過查閱死者的電腦和手機成福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荆残,“玉大人奴艾,你說我怎么就攤上這事∧谒梗” “怎么了蕴潦?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俘闯。 經(jīng)常有香客問我潭苞,道長,這世上最難降的妖魔是什么真朗? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任此疹,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝗碎。我一直安慰自己振诬,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布衍菱。 她就那樣靜靜地躺著,像睡著了一般肩豁。 火紅的嫁衣襯著肌膚如雪脊串。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天清钥,我揣著相機與錄音琼锋,去河邊找鬼。 笑死祟昭,一個胖子當著我的面吹牛缕坎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播篡悟,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼谜叹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搬葬?” 一聲冷哼從身側(cè)響起荷腊,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎急凰,沒想到半個月后女仰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡抡锈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年疾忍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床三。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡一罩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撇簿,到底是詐尸還是另有隱情擒抛,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布补疑,位于F島的核電站歧沪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莲组。R本人自食惡果不足惜诊胞,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撵孤,春花似錦迈着、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闭专,卻和暖如春奴潘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背影钉。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工画髓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人平委。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓奈虾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親廉赔。 傳聞我的和親對象是個殘疾皇子肉微,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、Appium介紹 Appium是一個開源的自動化測試工具蜡塌,其支持iOS和安卓平臺上的原生的浪册,基于移動瀏覽器的,...
    Hello桃sir閱讀 27,357評論 0 30
  • Appium 是什么 Appium 是一款用于測試 Mobile App 的開源自動化測試框架岗照。它是通過使用 We...
    l藍色夢幻閱讀 12,150評論 2 21
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,989評論 1 3
  • 目錄 安卓主流的自動化測試框架及對比.................................... 2 ...
    323e134d370d閱讀 2,318評論 0 7
  • 等待 霓虹下的剪影行至將近 投射出思念的輪廓 轉(zhuǎn)身 欲言又止的回眸 一步一心痕 一步亦相怯 靜坐 我已不再奢求而立...
    情書丟在雪國閱讀 130評論 0 0