Android Junit单元测试 基于Uiautomator UI测试(一)

本文深入探讨软件测试的基础概念,包括软件测试的目的、原则、重点环节及度量指标。介绍了测试环境搭建、测试用例设计与管理的重要性,以及测试覆盖率、缺陷发现率和测试成功率的度量方法。同时,涵盖了黑盒测试、白盒测试、静态分析和动态分析等测试方法,为读者提供了全面的软件测试知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件测试概述:
  • 在学习单元测试和Ui测试之前先要了解基本的软件测试基础

  • 软件测试基本概念:
    • 识别软件却显得过程:具体实践中通过设计测试用例,发现实际结果与预期结果不一致的地方(狭义上)
    • 之软件生命周期中所有的检查、评审和确认工作,包括对分析、设计阶段,以及开发后维护阶段的各类文档、代码的审查和确认。

  • 软件测试两大任务:
    • 验证:保证软件正确地实现某一特定功能的一系列活动
    • 确认:保证软件的实现满足了用户需求的一系列活动

  • 软件测试的目的:
    • 发现软件中的缺陷:
      • 测试只能证明软件中存在缺陷,不能证明软件不存在缺陷
      • 测试可以将软件中的缺陷率降到一定程度,而不能彻底消灭软件中的所有缺陷
      • 以较少的测试用例、时间和人力找出软件中的各种错误和缺陷,以确保软件质量

  • 软件测试最终目标:

    • 确保软件完成了它所承诺或公布的功能
    • 确保软件的功能符合用户的需求,把尽可能多的问题在发布或交付前发现并改正
    • 确保软件满足性能要求
    • 确保软件的健壮性和对用户环境的适应性
    • 为软件质量评估提供依据
    • 为软件质量改进和管理提供帮助
  • 软件测试过程中的基本原则:

    • 保证测试的覆盖程度,但请注意:穷举测试对实际软件是不可能实现
    • 所有的测试都应追溯到用户需求
    • 越早测试越好,测试过程应与开发过程紧密结合
    • 测试的规模由小及大,从单元测试到系统测试
    • 为了尽可能地发现错误,应该由独立的第三方进行测试
    • 测试人员不能为了便于测试而擅自修改程序
    • 既应该测试软件该做什么,也应该测试软件不该做什么

  • Bug的80-20经验比例
    • 在分析、设计、实现阶段的复审和测试工作能狗发现和避免80%的bug
    • 系统测试又能找出其余Bug中的80%
    • 最后5%的Bug可能只有在用户范围、长时间使用后才会暴露出来

  • 软件测试重点环节:
    • 测试环境的搭建
    • 测试用例的良好设计
    • 测试工作的管理

  • 软件测试结果的度量指标
    • 测试覆盖率:
      • 有多少需求和代码已经被测试
    • 缺陷发现率:
      • 缺陷何时被发现,并且有多少缺陷已经被发现
    • 测试成功率:
      • 有多少测试已经通过
      • 计算以通过的测试用例的数目、可用测试用例的数目

  • 测试方法:
    • 黑盒测试:黑盒测试注重测试软件功能,一般在测试后期,与白盒测试是互补的关系。

      • 错误类型:
        • 功能不正确或者遗漏
        • 界面错误
        • 数据结构错误或外部数据库访问错误
        • 性能错误
        • 初始化和终止错误
    • 白盒测试:把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。

    • 静态分析:

      • 静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估。

      • 静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,也可以借助软件工具自动进行。

      • 因为静态测试方法并不真正运行被测程序,只进行特性分析。所以,静态方法常常称为“分析”,静态测试是对被测程序进行特性分析方法的总称。

    • 静态分析可以辅助完成以下任务:

      • 检查算法的逻辑正确性。

      • 检查模块接口的正确性。

      • 检查输入参数是否有合法性检查。

      • 检查调用其他模块的接口是否正确。

      • 检查是否设置了适当的出错处理。

      • 检查表达式、语句是否正确,是否含有二义性。

      • 检查常量或全局变量使用是否正确。

      • 检查标识符的使用是否规沧、- . 致。

      • 检查程序风格的一-致性、 规范性。

      • 检查代码是否可以优化,算法效率是否最高。

      • 检查代码注释是否完整,是否正确反映了代码的功能。

    • 动态分析

      • 动态方法的主要特征是:计算机必 须真正运行被测试的程序,通过输入测试用例,对其运行情况即输入与输出的对应关系进行分析,以达到检测的目的。
      • 动态测试包括:
        • 功能确认与接口测试
        • 覆盖率分析
        • 性能分析
        • 内存分析

  • 打开AS,新建项目选择No Activity模板,进入
  • src目录下有两个分别叫androidTest和test的文件夹,分别做Ui测试和单元测试,先从单元测试开始:
  • 单元测试:
    • Junit是Java中的一个单元测试框架,使用注解即可完成单元测试
    • 在dependencies中已经添加junit
dependencies {    
    implementation fileTree(dir: 'libs', include: ['*.jar'])    
    implementation 'com.android.support:appcompat-v7:28.0.0-rc02'    
    
    testImplementation 'junit:junit:4.12'    
    
    androidTestImplementation 'com.android.support.test:runner:1.0.2'    
    androidTestImplementation 
    'com.android.support.test.espresso:espresso-core:3.0.2'    
    androidTestImplementation 
    'com.android.support.test.uiautomator:uiautomator-v18:2.1.0'
}
  • 在test下的ExampleUnitTest中:
    • 发现使用了注解和断言
    • @Test 说明该方法时 测试方法,必须是public void 可以抛出异常
    • @Ignore 忽略该测试方法
* 忽略一个方法
@Ignore
@Test
public void ...


@Ignore("reason")
@Test
public void ...


* 忽略整个测试方法
@Ignore
public class ...
  • @Before @After
    • @Before 他会在每个测试方法执行前都调用一次
    • @After 他会在每个测试方法执行完都调用一次
    • @BeforeClass 只会为一个测试类执行一次,优先于@Before, 注解的方法必须是public void static修饰
    • @AfterClass注解的方法会在所有测试方法执行完成一次之后被调用一次,注解的方法必须是public void static修饰
public class ExampleUnitTest {    
    @BeforeClass    
    public static void init(){        
        System.out.println("-----init-----");    
    }    
    @Before    
    public void setUp(){        
        System.out.println("-----setUp-----");    
    }    
    @After    
    public void tearDown(){        
        System.out.println("-----tearDown-----");    
    }    
    @AfterClass    
    public static void finish(){        
        System.out.println("-----finish-----");    
    }    
    @Test    
    public void test1() {        
        System.out.println("----test1-----");    
    }    
    @Test    
    public void test2(){        
        System.out.println("----test2----");    
    }
}

输出:
-----init-----
-----setUp-----
-----test1-----
-----tearDown-----
-----setUp-----
-----test2-----
-----tearDown-----
-----finish-----
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值