2016-02-22 55 views
-1

我嘗試使用Appium自動執行原生android應用程序的測試。我想測試的功能是,應用程序的某些用戶設置(例如,最喜歡的搜索結果)可以在更新到更新版本的應用程序後保留。我有兩個版本的應用程序,並手動測試此功能的作品。但是當我自動化測試時,所有的設置都被清除/重置。Appium Android自動化:如何在保留plist文件的情況下重新安裝應用程序

我的自動化分兩步完成。首先,在一個會話中,安裝舊版本,並設置收藏夾設置;其次,開始新的會話,安裝新版本。

第一步工作正常。在我的第二個步驟

  • 如果我開始新的會話之前設置full reset我的能力,應用程序被重新安裝新版本,但所有的設置將被清除。
  • 如果我在開始新會話之前將no reset設置爲我的能力,那麼我發現應用程序不會隨新版本重新安裝。

我應該如何設置appium服務器標誌,以便在第二步中,我可以在保持設置的同時安裝新版本?我猜這與應用程序的plist文件有關?

這是我的代碼。 settingOldVersion.java

package RR.upgradeTest; 

import java.io.File; 
import java.net.URL; 

import org.junit.AfterClass; 
import org.junit.Assert; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Point; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.remote.DesiredCapabilities; 

import RR.utility.RRhelper; 
import io.appium.java_client.android.AndroidDriver; 
import io.appium.java_client.remote.MobileCapabilityType; 
import io.appium.java_client.remote.MobilePlatform; 

public class settingOldVersion{ 

public static AndroidDriver DRIVER; 
public static String APK_file = "oldversion.apk"; 

    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 

     File appDir = new File("src"); 
     File app = new File(appDir, APK_file); 

     DesiredCapabilities cap=new DesiredCapabilities(); 
     cap.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID); 
     cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); 
     cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.0.1"); 
     cap.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); 
     System.out.println("\n\n******************************************************"); 
     System.out.println("Installation and startup app "+APK_file); 

     //Android Driver 
     DRIVER=new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap); 
     System.out.println("Driver obtained"); 

     Thread.sleep(2000); 

    } 

    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     DRIVER.quit(); 
    } 

    @Test 
    public void settingFavorite() throws Exception 
    { 
     System.out.println("setting favorite"); 

     //Add search result into favorite 
     .... 

     //Take a screenshot of the favorite page 
     .... 

     String image_path=".//result//UpgradeTest/OldVersion//"; 
     String name="FavoriteSetting"+APK_file; 
     RRhelper.takeScreenshot(DRIVER, name, image_path); 
    } 
} 

這裏是我的檢查新版本代碼:verifyNewVersion.java

package RR.upgradeTest; 

import java.io.File; 
import java.net.URL; 
import java.text.SimpleDateFormat; 
import java.util.List; 

import org.junit.AfterClass; 
import org.junit.Assert; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Point; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.remote.DesiredCapabilities; 


import RR.utility.RRhelper; 
import io.appium.java_client.android.AndroidDriver; 
import io.appium.java_client.remote.MobileCapabilityType; 
import io.appium.java_client.remote.MobilePlatform; 

public class varifyNewVersion{ 

public static AndroidDriver DRIVER; 
public static String APK_file = "newversion.apk"; 

    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 

     File appDir = new File("src"); 
     File app = new File(appDir, APK_file); 

     DesiredCapabilities cap=new DesiredCapabilities(); 
     cap.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID); 
     cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); 
     cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.0.1"); 
     cap.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); 
//  cap.setCapability("fullReset", true); 
//  cap.setCapability("noReset", false); 
     System.out.println("\n\n******************************************************"); 
     System.out.println("Installation and startup app "+app.getAbsolutePath()); 


     //Android Driver 
     DRIVER=new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap); 
     System.out.println("Driver obtained"); 
     Thread.sleep(2000); 

    } 

    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     DRIVER.quit(); 
    } 

    @Test 
    public void checkingFavorite() throws Exception 
    { 

     //Come to Favorite page 
     Assert.assertTrue(RRhelper.ComeToMenuItem(DRIVER, "Favoritter")); 
     Thread.sleep(300); 
     String image_path=".//result//UpgradeTest/NewVersion//"; 
     String name="FavoriteSetting_"+APK_file; 
     RRhelper.takeScreenshot(DRIVER, name, image_path); 

     .... 
    } 
} 

回答

0

使用兩個不同的apk小號,除非它們被使用的應用程序同步你不能保留包設置您正在安裝deviceID(應用程序結束處理)。對於升級,通常應用程序有更新應用程序的選項,可以使用playstore /鏈接到本地​​服務器來完成。

另外fullResetnoReset在指定的包上工作,如果它已經存在,noReset不會覆蓋現有的,並且fullReset會卸載並安裝應用程序。

還有很多,它取決於您的應用程序如何保留標誌/設置的狀態,您是否希望用戶在嘗試強制下載其他apk版本時仍繼續使用相同的設置,或者您想要在這種情況下恢復默認設置。

+0

謝謝你回覆!是的,我希望用戶在升級到新版本應用程序時保持註冊。測試環境中的問題是我們正在使用hockeyapp來託管測試版apk,並且存在hockyapp的錯誤,我們無法使用鏈接從hockeyapp上的新版本更新應用程序。你能指定更多關於如何「從使用deviceID的應用程序同步到」更新應用程序?它可以從Appium完成嗎? – Chao

0

隨着appium服務器設置,或者fullresetnoreset可以服務我的目的,升級應用程序後,測試用戶設置的保留。如問題中所述。現在我找到了一個解決方案,即安裝應用程序adb install -r,這意味着重新安裝一個現有的應用程序,保存其數據。

該命令行可以封裝在我的JAVA測試代碼中。使用adb安裝後,使用appium啓動會話,無需安裝應用程序,

cap.setCapability(MobileCapabilityType.APP_PACKAGE, "package name"); 
cap.setCapability(MobileCapabilityType.APP_ACTIVITY, "activity name"); 

然後我可以看到設置被保留。

相關問題