Uiautomator--断言的使用

本文详细介绍了自动化测试中常用的断言函数及其应用场景,包括相等性校验、浮点数比较、状态验证等,并通过具体示例展示了如何将这些断言应用于实际的UI自动化测试中。
一、断言函数的使用
1、用例结构:
  自动化用例结构,一般可以分成一个用例集,然后用例集下面会有非常多的用例组成,我们可以从多个用例中抽出一些用例组成测试套件。
2、用例的标准结构:
  setUp:初始化
  Test:
    初始化场景与数据
    模拟操作步骤
    断言(一个完整的测试用例必须要有一个断言,作为标准来判断用例成功或失败)
    恢复场景
  tearDown
3、JAVA错误类型
  1)Error:
  一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误导致的应用程序中断,仅靠程序本身无法恢复和预防(断言失败属于Error)
  2)Exeeption:
  表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常(uiautomator中最常见的是UI对象找不到的异常)
  3)失败与错误的区别
  失败:用例失败,不通过,不可恢复。
  错误:脚本中编写错误,可以恢复,可以捕获,可以运行。用try()catch处理,可以继续运行下去,也可以往方法体抛。
 
二、断言函数API解说
 
1、相关API--Equal
方法说明
assertEquals(boolean,boolean)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,boolean,boolean)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(byte,byte)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,byte,byte)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(char,char)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,char,char)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(int,int)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,int,int)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(long,long)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,long,long)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(Object,Object)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,Object,Object)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(short,short)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,short,short)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,String)如果期望(expected)和实际(actual)相等则通过,否则失败
assertEquals(String,String,String)如果期望(expected)和实际(actual)相等则通过,否则失败

  

//断言两个对象是否相等
static public void
asserEquals(String message,Object expected,Object actual){
//判断两个都为空,则相等
    if (expected==null && actual==null){
        return ;    
    }
//判断两个相等
    if (expected!=null && expected.equals(actual)){
        return
    }
//如果以上都不符合,直接抛出异常
    failNotEquals(message,expected,actual);
}
public void testDemo1() throws UiObjectNotFoundException{
    //断言相等的例子
    assertEquals(5, add(2,3));
    //断言不相等的例子
    assertEquals(6, add(2,3));
}
//新建一个加法方便使用断言函数
public int add(int a,int b){
    return a+b;
}
注意:
  所以的断言函数都是静态类型
参数说明:
  message:可选消息,在断言失败后会抛出这个消息
  expected:期望对象
  actual:实际对象
 
2、相关API--浮点运算
方法说明
assertEquals(double,double,double)如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败
assertEquals(String,double,double,double)如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败
assertEquals(float,float,float)如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败
assertEquals(String,float,float,float)如果期望(expected)和实际(actual)相差不超过精度值(delta)则通过,否则失败
浮点运算不是万全精确的,所以比较浮点数值的时候引入精确程度assertEquals(double expected,double actual,double delta)
public void testDemo1() throws UiObjectNotFoundException{
    //断言不相等的例子
    assertEquals(0.3333, Double.valueOf(1)/3,0);
    //断言相等的例子
    assertEquals(0.3333, Double.valueOf(1)/3,4);
    //断言相等的例子
    assertEquals(0.3333, Double.valueOf(1)/3,0.0001);
}
//新建一个加法方便使用断言函数
public int add(int a,int b){
    return a+b;
}

 

3、相关API--same

方法说明
assertFalse(boolean)如果条件(condition)为False则通过,否则失败
assertFalse(String,boolean)如果条件(condition)为False则通过,否则失败
assertTrue(boolran)如果条件(condition)为True则通过,否则失败
assertTrue(String,boolran)如果条件(condition)为True则通过,否则失败
assertNotNull(Object)如果条件(condition)为非空则通过,否则失败
assertNotNull(String,Object)如果条件(condition)为非空则通过,否则失败
assertNull(Object)如果条件(condition)为空则通过,否则失败
assertNull(String,Object)如果条件(condition)为空则通过,否则失败
assertNotSame(Object,object)如果期望(expected)和实际(actual)引用不同的内存对象对象则通过,否则失败
assertNoteSame(String,Object,Object)如果期望(expected)和实际(actual)引用不同的内存对象对象则通过,否则失败
assertSame(Object,Object)如果期望(expected)和实际(actual)引用相同的内存对象对象则通过,否则失败
assertSame(String,Object,Object)如果期望(expected)和实际(actual)引用相同的内存对象对象则通过,否则失败
/示例一: 
public void testDemo1() throws UiObjectNotFoundException{ 
     //自己声明一个布尔值为了测试断言函数的使用 
     boolean is=true; 
     //断言成功的例子 
     assertTrue(is); 
     //断言失败的例子 
     assertFalse(is); 
     } 
//示例二:
public void testDemo1() throws UiObjectNotFoundException{
    int a = 100;
    int b = 100;
    Integer c=new Integer(100);
    //断言成功的例子,值的比较
    assertSame(a, b);//a和b的值相等,内存指向也相等
    //断言失败的例子
    assertNotSame(a, b);
    //断言失败的例子,内存地址比较
    assertSame(a, c);//a和c的值相等,内存指向不相等
    //断言成功的例子
    assertSame((Object)a, c);//a和c的类型不一样,所以要把a强制转换成对象,才可以比较
}

 

4、相关API--fali

方法说明
fail()用例立即失败
fail(String)用例立即失败,且抛出指定消息
failNotEquals(String,Object,Object)用例立即失败,且抛出指定消息与期望、实际值不相等的消息
failNotSame(String,String,String)用例立即失败,且抛出指定消息与期望、实际值不相等的消息
failSame(String)用例立即失败,且抛出指定消息
public void testDemo1() throws UiObjectNotFoundException{
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressMenu();
    UiDevice.getInstance().pressHome();
    //用例失败,且抛出异常
    fail("Failed");
}

 

三、结合实例

//开始
protected void setUp() throws Exception{
    super.setUp();
}
public void testDemo1() throws UiObjectNotFoundException{

    //初始化场景
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressHome();
    //打开文件管理
    UiObject app=new UiObject(new UiSelector().description("应用"));
    UiObject file=new UiObject(new UiSelector().text("文件管理器"));
    app.clickAndWaitForNewWindow();
    file.clickAndWaitForNewWindow();
    //验证开启成功
    String packageName=UiDevice.getInstance().getCurrentPackageName();
    assertEquals("File open succes!","com.cyanogenmod.filemanager", packageName);
    //检查目录名为test的目录
    UiObject test=new UiObject(new UiSelector().text("test"));
    UiScrollable listView=new UiScrollable(new UiSelector().className("android.widget.ListView"));
    boolean FindResult=listView.scrollIntoView(test);
    //如果有该目录则停止执行用例
    if (FindResult==true){
        fail("test目录已经存在");
    }
    //如果没有该目录则新建test目录
    UiObject dos=new UiObject(new UiSelector().description("操作"));
    dos.clickAndWaitForNewWindow();
    UiObject newFile=new UiObject(new UiSelector().text("新建文件夹"));
    newFile.clickAndWaitForNewWindow();
    UiObject input=new UiObject(new UiSelector().className("android.widget.EditText"));
    input.setText("test");
    UiObject ok=new UiObject(new UiSelector().text("确定"));
    ok.click();
    //验证新建成功    
    boolean FindResult2=listView.scrollIntoView(test);
    assertTrue("test目录创建成功",FindResult2);
}
//完成
protected void tearDown() throws Exception{
    super.tearDown();
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressBack();
    UiDevice.getInstance().pressHome();
}

 

转载于:https://www.cnblogs.com/WXBai/p/6230430.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值