Appium自動(dòng)化測(cè)試

相關(guān)鏈接

官網(wǎng):http://appium.io/

使用Java編寫API文檔:http://appium.github.io/java-client/

學(xué)習(xí)文檔:https://www.cnblogs.com/fnng/p/4540731.html

技術(shù)展示

安裝(僅Windows)

若電腦上未安裝node.js淹朋,請(qǐng)先安裝node.js
  • 下載安裝包幸乒,下載地址為:https://nodejs.org/en/download/
  • 選擇對(duì)應(yīng)的版本,下載后固惯,打開安裝,一直下一步即可(可修改安裝目錄)
  • 安裝完成后,檢測(cè)下path環(huán)境變量是否配置了Node.js,打開Windows命令提示符京闰,輸入命令"path",輸出如下結(jié)果:


    image
Android的SDK安裝

相信Android開發(fā)人員都已安裝好Android的SDK了甩苛,但Android的環(huán)境變量你設(shè)置了么蹂楣?我本機(jī)的目錄為:E:\Android\Sdk。

下面設(shè)置環(huán)境變量:“我的電腦” 右鍵菜單 ---> 屬性 ---> 高級(jí) ---> 環(huán)境變量 ---> 系統(tǒng)變量 ---> 新建:

變量名 變量值
ANDROID_HOME E:\Android\Sdk

找到 path 變量名—> “編輯” 添加:

變量名 變量值
PATH ;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
安裝 Appium Server

可以在Appium官方網(wǎng)站上下載操作系統(tǒng)相應(yīng)的Appium版本讯蒲,下載地址:https://bitbucket.org/appium/appium.app/downloads/捐迫,
若無(wú)法下載,也可使用提供的百度網(wǎng)盤下載地址:

鏈接: https://pan.baidu.com/s/1UdbSk02TzUS8BQKzOQFYfw 提取碼: zus2

下載的 AppiumForWindows.zip 進(jìn)行解壓爱葵,點(diǎn)擊 appium-installer.exe 進(jìn)行安裝施戴。

[圖片上傳失敗...(image-ef357a-1566473978926)].png)

根據(jù)提示,一步一步進(jìn)行安裝萌丈,這里不再啰嗦赞哗。最終在會(huì)桌面上生成 Appium圖標(biāo) , 雙擊啟動(dòng),appium server 界面如下:

[圖片上傳失敗...(image-777f1-1566473978926)].png)

最后辆雾,打開Windows命令提示符肪笋,輸入“appium-doctor”命令,如果出現(xiàn)以下提示度迂,說(shuō)明你Appium所需要的各項(xiàng)環(huán)境都已準(zhǔn)備完成藤乙。

[圖片上傳失敗...(image-506b25-1566473978926)].png)

注:如果提示:“appium-doctor”不是內(nèi)部或外部命令,找到Appium的安裝目錄惭墓,例如:

E:\Appium\node_modules\.bin

添加到環(huán)境變量path下面(參考Java環(huán)境的設(shè)置)

Appium-desktop
Appium-desktop是什么

Appium-Server有一兩年沒有更新了坛梁。Windows版在 2015 年底止步于的 AppiumForWindows_1_4_16_1.zip。

于是腊凶,新的工具 Appium-desktop 來(lái)了划咐! 它來(lái)繼續(xù) Appium-Server的使命拴念,當(dāng)然, Appium-Server當(dāng)前仍然是可用的褐缠。

注:Appium-Server最高支持模擬器Android版本為6.0政鼠,推薦使用 Appium-desktop。

下載與安裝

下載地址:https://github.com/appium/appium-desktop/releases
根據(jù)自己的平臺(tái)選擇相關(guān)的包進(jìn)行下載队魏。本文以 Windows 為例,選擇 Appium-windows-1.12.1.exe 文件進(jìn)行下載,下載完成后遏佣,雙擊 exe 文件意敛,等待安裝完成即可钓猬。

啟動(dòng)運(yùn)行

雙擊打開桌面上紫色的 appium 圖標(biāo)

[圖片上傳失敗...(image-a9b10d-1566473978926)].png)

點(diǎn)擊 “啟動(dòng)服務(wù)器 V 1.12.1” 按鈕啟動(dòng)服務(wù)

[圖片上傳失敗...(image-77e1cf-1566473978926)].png)

現(xiàn)在可以啟動(dòng)移動(dòng)設(shè)備(真機(jī)或模擬器)综膀,編寫Appium自動(dòng)化測(cè)試腳本剧劝,可以通過(guò) Appium-desktop 來(lái)運(yùn)行測(cè)試拢锹。

連接真機(jī)測(cè)試

主要講解如何連接真機(jī)進(jìn)行測(cè)試卒稳。

  • 手機(jī)通過(guò)USB連接電腦展哭,選擇傳輸文件(MTP)
    [圖片上傳失敗...(image-974f88-1566473978926)].png)
  • 打開開發(fā)者選項(xiàng),允許USB調(diào)試茵休,允許USB安裝
    [圖片上傳失敗...(image-fa3c7-1566473978926)].png)
  • 打開Windows命令提示符棵介,輸入"adb devices"唠雕,可彈出電腦是否連接真機(jī)岩睁,獲取到真機(jī)的devices
    [圖片上傳失敗...(image-f26060-1566473978926)].png)

注:如果提示:“adb”不是內(nèi)部或外部命令邓夕,找到adb的安裝目錄,例如:

E:\Android\Sdk\platform-tools

添加到環(huán)境變量path下面(參考Java環(huán)境的設(shè)置)

java-client安裝與測(cè)試

此次主要講解的是使用 Java 語(yǔ)言編寫 appium 自動(dòng)化測(cè)試腳本点弯。

前提條件
  • 安裝 Java 環(huán)境
  • 安裝 IntelliJ IDEA 或 Eclipse (下面講解的是Eclipse)
  • 安裝 Maven
Maven 安裝 Java-client
  • 啟動(dòng)Eclipse汪榔,創(chuàng)建Maven項(xiàng)目
    [圖片上傳失敗...(image-327473-1566473978926)].png)
  • 導(dǎo)入 appium 的 Java-client
    [圖片上傳失敗...(image-170867-1566473978926)].png)
  • 輸入項(xiàng)目名稱蒲拉,id即可下一步
  • 最后痴腌,pom.xml中的信息應(yīng)如下:
    [圖片上傳失敗...(image-1de956-1566473978926)].png)

注:截止至4月26日為止雌团,最新版本為7.0.0锦援,最新版本號(hào),可在github Java-client開源項(xiàng)目上查看略板。

開始測(cè)試

編寫第一個(gè)Appium測(cè)試程序

啟動(dòng)APP
package com.test;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;

public class TestLanuch {

    private static String path = "E:\\Epoint\\epoint\\component\\FramePlugins\\workplatform\\release\\workplatform-release.apk";

    public static void main(String[] args) throws MalformedURLException, InterruptedException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "8ea41751");
        capabilities.setCapability("automationName", "uiautomator2");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "8.0.0");
        capabilities.setCapability("autoGrantPermissions", true);
        capabilities.setCapability("app", path);

        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

        driver.quit();
    }
}

  • deviceName:?jiǎn)?dòng)哪種設(shè)備种玛,是真機(jī)還是模擬器,若是真機(jī)瓤檐,填寫"adb devices"獲取的設(shè)備號(hào)
  • automationName:使用哪種自動(dòng)化引擎
  • platformName:使用哪種移動(dòng)平臺(tái)
  • platformVersion:指定平臺(tái)的系統(tǒng)版本赂韵。例如指的Android平臺(tái),版本為8.0.0
  • autoGrantPermissions:是否自動(dòng)允許權(quán)限
  • app:打包后挠蛉,apk在本地的路徑
  • appPackage:應(yīng)用的包名
  • appActivity:應(yīng)用啟動(dòng)頁(yè)

注:若手機(jī)上本無(wú)此APP祭示,使用參數(shù)app,不使用appPackage和appActivity谴古,若手機(jī)上有此APP质涛,使用appPackage和appActivity,不使用參數(shù)app讥电。

登錄APP
public static void testLogin(long time) {
    if (timer == null) {
        timer = new Timer();
    }
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            if (driver.getPageSource().contains("com.epoint.workplatform:id/iv_cancel")) {
                System.out.println("APP需要更新");
                System.out.println("取消更新");
                driver.findElement(By.id("com.epoint.workplatform:id/iv_cancel")).click();
                if (timer != null) {
                    timer.cancel();
                    timer = null;
                }
                testLogin(2000);
            } else if (driver.currentActivity().contains("MainActivity")) {
                System.out.println("用戶已登錄過(guò)");
                System.out.println(driver.getPageSource());
            } else if (driver.currentActivity().contains("launcher.Launcher")) {
                System.out.println("返回桌面");
            } else if (driver.currentActivity().contains("GrantPermissionsActivity")) {
                System.out.println("初次登錄");
                System.out.println("授予權(quán)限");
                driver.findElement(By.id("android:id/button1")).click();
                if (timer != null) {
                    timer.cancel();
                    timer = null;
                }
                testLogin(5000);
            } else if (driver.currentActivity().contains("LoginActivity")) {
                driver.findElement(By.id("com.epoint.workplatform:id/et_loginid")).sendKeys("dywei");
                driver.findElement(By.id("com.epoint.workplatform:id/et_pwd")).sendKeys("11111");
                driver.findElement(By.id("com.epoint.workplatform:id/btn_login")).click();
                System.out.println("登錄成功");
            } else {
                System.out.println("啟動(dòng)頁(yè)時(shí)間太長(zhǎng)");
                System.out.println(driver.getPageSource());
            }
        }
    }, time);
}

技術(shù)總結(jié)

測(cè)試腳本的編寫并不局限于Java蹂窖,支持多種語(yǔ)言轧抗,且可以實(shí)現(xiàn)一套測(cè)試腳本的編寫完成Android端和iOS端的自動(dòng)化測(cè)試恩敌,有興趣的可以研究研究。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末横媚,一起剝皮案震驚了整個(gè)濱河市纠炮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灯蝴,老刑警劉巖恢口,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異穷躁,居然都是意外死亡耕肩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門问潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猿诸,“玉大人,你說(shuō)我怎么就攤上這事狡忙∈崴洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)校套。 經(jīng)常有香客問(wèn)我拱撵,道長(zhǎng)株灸,這世上最難降的妖魔是什么堤结? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任琴许,我火速辦了婚禮凫佛,結(jié)果婚禮上井辆,老公的妹妹穿的比我還像新娘语婴。我一直安慰自己季惩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布腻格。 她就那樣靜靜地躺著画拾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菜职。 梳的紋絲不亂的頭發(fā)上青抛,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音酬核,去河邊找鬼蜜另。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嫡意,可吹牛的內(nèi)容都是我干的举瑰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔬螟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼此迅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旧巾,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耸序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鲁猩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎怪,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年廓握,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搅窿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隙券,死狀恐怖男应,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情是尔,我是刑警寧澤殉了,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站拟枚,受9級(jí)特大地震影響薪铜,放射性物質(zhì)發(fā)生泄漏众弓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一谓娃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒滩,春花似錦滨达、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至竹握,卻和暖如春画株,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啦辐。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工谓传, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芹关。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓续挟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親侥衬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诗祸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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