天天看点

实操:安卓app测试 基于 eclipse + AVD +appium

第一个测试项目,来源一家公司的面试实操题

本来想也整个流程,包括搭建环境,测试用例,脚本编写,但是觉得第一次写,写那么全可能我的逻辑性就不太严密了,所以只写了脚本部分,剩余的之后再补。

进行编码(我将代码复制如下)

package com.jisuanqitest.appium;

//我的包名

import io.appium.java_client.AppiumDriver;

import io.appium.java_client.android.AndroidDriver;

import io.appium.java_client.android.AndroidElement;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.By.ByName;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.remote.CapabilityType;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.remote.DesiredCapabilities;

import org.openqa.selenium.support.ui.ExpectedCondition;

import org.openqa.selenium.support.ui.WebDriverWait;

import com.sun.jna.platform.FileUtils;

import org.openqa.selenium.OutputType;

import static org.junit.Assert.*;

import java.io.File;

import java.io.IOException;

import java.net.URL;

import java.util.List;

import java.util.concurrent.TimeUnit;

//以上是导入的包

public class Jisuanqitest {  

//从我的类名可以看出,是一个计算器app的测试,从apk市场找的,叫iDo Calculator,有计算功能和记录收支功能。

  private  AppiumDriver MT ;

// MT是appium 测试的对象,因为我一开始选的是美团做为我的APP进行测试,但是需要吐槽一下的是,AVD真的太慢了,而且网络连接极不稳定,总卡死,无奈选择了一款体量小,不需要联网的APP,但名字没有换。

  @Before                           

  public void setUp() throws Exception   

//一般APP测试脚本里必有两个方法,一个setUp(),另一个是tearDown(),下面有。setUp,就是做一些前提准备的,具体的每条代码后交代。

  {

      File classpathRoot = new File(System.getProperty("user.dir")); 

//File ,也就是文件,一个目的,指名道姓找地址,要测谁(哪个app),要去哪测(app放在何方)

      File appDir = new File(classpathRoot, "/apps");                         

 //在一开始建立的Java项目中,条件一个文件夹,随便叫啥,里面放你要测试APP

      File app = new File(appDir, "jisuanqi.apk");                              

  //文件夹里APP的名字在交代一下

      DesiredCapabilities capabilities = new DesiredCapabilities();    

//此处多说两句,appium 是基于Selenium ,一款thougtwork公司搞得自动化测试软件,他又是基于webdriver                                                                                                           //我正在学selenium,看一本书上说,seleninm多么多么牛逼,代表着未来,代表着方向,哈                                                                                                                                     //哈。 DesiredCapabilities  实际上很重要,他明确了几件测试时很重要的条件,测谁,安卓的,ios的,虚拟设                                                                                                           //备的,真实设备的,网页的,明确测试对象,

      capabilities.setCapability("deviceName","Android Emulator");    

//告诉计算机我要测试的是  模拟安卓对象

      capabilities.setCapability("platformVersion", "4.2.2");                     

   //平台是4.2.2的

      capabilities.setCapability("avd", "asd");                                         

   //AVD叫asd

      capabilities.setCapability("app", app.getAbsolutePath());

      capabilities.setCapability("appPackage", "com.ibox.calculators");    

 //这句和下一句是要明确apk的信息,有个方法,打开cmd ,输入aapt dump badging  路径\...apk 回车              

 capabilities.setCapability("appActivity", "com.ibox.calculators.CalculatorActivity"); 

//Packagename ,Launch-activity 分别就代表了。

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

  }

@After 

  public void tearDown() throws Exception{                                    

   //这就是必有的两个方法的另一个tearDown(),告诉计算机,脚本测完了,最后怎么办,退出.

  MT.quit();

  }

  @Test                                                                                                   

 //test 是所谓的测试脚本核心,自我感觉最重要的是要懂得元素定位,定的准,定的巧,少很多事,运                                                                                                                        //行效率高。

  public void meishi() throws InterruptedException {

         MT.findElement(By.name("1")).click();                                                      

    //byname 是一种定位方法,对于有text的就直接可以用了

         MT.findElement(By.name("+")).click();                                                    

         MT.findElement(By.name("2")).click();

         MT.findElement(By.name("=")).click();

         MT.manage().timeouts().implicitlyWait(150, TimeUnit.SECONDS);                  

  //隐式等待150秒,我也不知道为啥我操作的时候老是不等,明天去面试的公司问问技术负责                                                                                                                                                     人

         WebElement e =MT.findElement(By.className("android.widget.TextView"));     

    //byclassname也是一种,通常和List<AndroidElement>搭配,使用与有几个相同类型的时候

         assertEquals("错误","3",e.getText());                                                                        

  //assert..断言,就是If..else的一种形式,三个变量,不懂可以百度或查api

         MT.findElement(By.name("Accounts")).click();      

         MT.tap(1, 614, 996, 200);                                                                                            

   //tab真是风险小,不会出错,UIautoview定好就不会错

         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

                                                                                                        /                                                                //By.xpath("//android.widget.FrameLayout[0]/android.widget.LinearLayout[0]/android.widget.FrameLayout/android.widget.FrameLayout[0]/android.widget.RelativeLayout[0]/android.widget.LinearLayout[0]/android.widget.RelativeLayout[0]/android.widget.ImageView[4]"                                                                                                                                                       

 //xpath,我没在用例中用,但我也出来了,想和大家分享,xpath 我觉得虽然麻烦,写一大堆,但是我觉得本办法却简单,从顶写到尾,看着踏实。

         MT.findElement(By.name("Income")).click();      

         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

         MT.findElement(By.name("1")).click();

         MT.findElement(By.name("0")).click();      

         MT.findElement(By.name("0")).click();      

         MT.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

         MT.findElement(By.name("OK")).click(); 

         MT.tap(1, 614, 996, 200);

         MT.findElement(By.name("Paid")).click(); 

         MT.findElement(By.name("5")).click();

         MT.findElement(By.name("0")).click();      

         MT.findElement(By.name("OK")).click();          

  }

 }

写完脚本后,run as >> junit  测试  看结果