移動端混合型App(hybrid app)自動化測試選型與實踐


背景

  公司產品的業務已經發展到了移動端,開發選型已經結束,決定使用phonegap做移動端的web應用開發平台。考慮到業務的復雜與多樣,移動端的測試同樣需要自動化。在網上看了很多,最終鎖定了3個移動端測試工具:Selendroid,Appium,Robotium。之所以選擇他們3個,是因為團隊已經有了以Selenium為基礎的測試框架,而這三個工具與Selenium可以說一脈相承。

目標

  基於phonegap的混合型app(hybrid app)web應用移動端自動化測試

選型過程

Selendroid(放棄)

放棄Selendroid的原因是在按照官網教程操作后,運行測試時,報錯,拿着報錯在網上查詢,結果都沒有解決。資料少的可憐,后來看到Appium中集成了Selendroid后,果斷放棄。

 

Robotium(放棄)

其實Robotium在嘗試的過程中是最順利的一個,功能也強大。

但其只支持Android設備,而且其以Android Test工程測試的方式很難集成到公司團隊已有的框架中,所以也放棄了。

但是仍然會關注其發展,社區活躍,功能夠精深有很多可以借鑒的地方。在Appium的研究過程中也起了很大的作用。

 

Appium(選中)

Appium支持ios和android設備,支持hybrid app,集成了Selendroid,易於集成到公司現有框架中,社區正在形成,文檔資料也在豐富中。

在嘗試的過程中雖有曲折,但最后也順利實現了。

混合型app以Appium搭建自動化測試開發環境

Appium

官方網址:http://appium.io/

中文社區:http://testerhome.com/

下載地址(由testerhome社區提供):http://pan.baidu.com/s/1jGvAISu#dir

1. 下載最新版本AppiumServer 1.2.0,解壓后,進入目錄下找到Appium.exe,運行即可,此程序作為Appnium與被測設備之間通訊的服務端

出現如下界面說明啟動成功

2. 將真機連接到PC端

3. 我使用Eclipse作為開發IDE,建立一個maven工程appium-demo,在pom中引用了公司框架中的Selenium核心工程,這樣可以省去添加Selenium依賴的過程

,同時在maven的中央庫中找到Appium包,並引用

Appium的maven引用

GroupId:io.appium

ArtifactId:java-client

Version:1.5.0

 4. 建立工程后,就可以寫測試代碼了,在工程中建立一個Junit Test類Test1.java,代碼如下:

package com.example.hello;

import io.appium.java_client.AppiumDriver;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

@RunWith(BlockJUnit4ClassRunner.class)
public class Test1 extends TestCase {

    private AppiumDriver driver;

    @Before
    public void start() throws MalformedURLException {
        // 使用phonegap打包的hybrid app路徑
        String apppath = "D:\\Work\\codes\\hands\\hands-hello-phonegap\\platforms\\android\\bin\\HelloWorld.apk";

        // 初始化AppniumDriver
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "NX403A");// 真機測試android設備
        capabilities.setCapability("platformVersion", "4.2.2");// 真機android版本為4.2.2
        capabilities.setCapability("platformName", "Android");// 真機為android系統
        capabilities.setCapability("app", apppath);// 被測app apk包的位置
        capabilities.setCapability("appPackage", "com.example.hello");// 被測app的Activity類所在包
        capabilities.setCapability("appActivity", ".HelloWorld");// 被測app的Activity類
        capabilities.setCapability("automationName", "selendroid");// 因為真機為4.2版本,所以使用selendroid
        // http://127.0.0.1:4723/wd/hub地址就是AppiumServer的地址
        driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);
    }

    @Test
    public void main() {
        try {
            Set<String> contextNames = driver.getContextHandles();
            for (String contextName : contextNames) {
                System.out.println(contextName); // 用於返回被測app是NATIVE_APP還是WEBVIEW,如果兩者都有就是混合型App
            }

            Thread.sleep(5000);// 等它一會

            driver.context("WEBVIEW_0");// 讓appium切換到webview模式以便查找web元素
            WebElement text_baidusearch = driver.findElement(By.id("word"));
            text_baidusearch.click();// 點擊百度的搜索輸入框(web元素)

            /*
             * appium不支持中文輸入 參考了robotium的以js方式為元素直接設置value的做法
             * 利用Selenium中Webdriver執行js方法實現中文輸入
             */
            JavascriptExecutor jse = (JavascriptExecutor) driver;
            jse.executeScript("document.getElementById('word').value='輸入法'");

            Thread.sleep(10000);// 等一會觀察下效果
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @After
    public void stop() {
        driver.quit();
    }

}

工程結構如下

5. 保持被測設備為解鎖狀態,雖然Appium有一個unlock的功能,但有時不起作用,所以最好還是將鎖屏關閉。運行Test1.java,得到如下結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM