关闭

软件测试

标签: 单元测试JUnit
413人阅读 评论(0) 收藏 举报
分类:

软件测试


     软件测试有时候不被重视,但是测试工作很重要。软件测试可以找出软件中潜在的各种错误和缺陷来提高软件质量、降低因BUG而产生的修复顾本、证明软件的功能和性能与需求说明相符合。测试贯穿了软件开发的生命周期,不仅仅要对编码阶段的工作进行测试,而且对其他阶段也要进行测试(如图1.1),这篇文章主要介绍了测试的类型,JUnit3、JUnit4、如何用Junit编写与平台无关的测试用例,如何对Activity进行测试以及Monkey 命令行工具使用

一、软件测试的类型

、软件测试的类型

1、黑盒测试: 是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。


2、白盒测试:又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。


3、单元测试: 又称模块测试,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。

 

4、功能测试: 根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。

 

5、压力测试: 主体向被 观察者布置一定量任务和作业,借以观察个体完成任务的行为。比如12306系统在每年节假日的时候回出现问题,这就说明负荷过大的时候,压力测试就出现了问题。在Android应用中,也可以进行压力测试:monkey -p <应用程序包名> -v 事件数量

 

6、集成测试: 是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。

 

 

二、JUnit测试框架介绍

      JUnit是一个开源的java单元测试框架。按照框架规定:编写的所有测试类,必须继承自junit.framework.TestCase类;里面的测试方法,命名应该以“test”开头,必须是public void 而且不能有参数;而且为了测试查错方便,尽量一个testXXX方法对一个功能单一的方法进行测试;使用assertEquals等junit.framework.TestCase中的断言方法来判断测试结果正确与否。JUnit中有两个基本对象:TestCase和TestSuite。TestCase通过提供一组方法来实现一系列测试。其中,setup()方法用来在每项测试开始前建立测试所需的测试环境,而teardown()方法用来在测试后销毁该环境,要创建测试程序,需要继承TestCase类,覆写setup和teardown方法,然后添加自己的测试函数,这些函数通常以“test方法名”的形式命名;TestSuite是由几个TestCase或其他的TestSuite构成的,你可以很容易的构成一个树形测试,每个测试都由另外一些测试的TestCase来构成,被加入到TestSuite中的测试对象将在一个线程中依次被执行。

下面用Junit写一个简单的测试用例程序。

被测试类:

public class Calculator{

     public int add(int a, intb){

         return a + b;

       }

     public int minus(int a, intb){

         return a - b;

       }

     public int multiply(int a, intb){

         return a * b;

        }

      public int divide(int a, intb) throws Exception{

         if(0 == b){

                throw new Exception("除数不能为零!");

             }

         return a / b;

        }

}


测试类:

public class CalculatorTest extends TestCase {

         private Calculator cal;

         public void setUp() {

                   cal = newCalculator(); 

         }

         public void tearDown() {

         }

         public void testAdd() {

                   int result =cal.add(1,2);

                   Assert.assertEquals  (3,result);

         }

         //减法和乘法跟加法的写法类似,在此不赘述!

                            public void testDivide2() {

                            Throwabletx = null;

                            try{

                                     cal.divide(4,0);                                        

                                     Assert.fail();

                            }

                            catch(Exception ex){

                                     tx= ex;

                            }

                            Assert.assertNotNull(tx);

                            Assert.assertEquals(Exception.class,tx.getClass());

                            Assert.assertEquals("除数不能为零!",tx.getMessage());

         }

}

 

三、Junit3、Junit4的比较

 Junit4是Junit框架有史以来的最大改进,其主要目标是利用java5的Annotation特性来简化测试用例的编写。

Junit3:

1.测试类必须继承类TestCase;

2.测试方法必须以test开头;

Junit4:

1.测试类不需要继承TestCase;

2.测试方法命名没有特定要求,只要在待测方法前加上@Test即可;

3.通过@befroe替代setUp方法,@After替代tearDown方法;在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。

 

四、测试acticity

1、建立测试项目

a.在 PackageExplorer 里面右击你的项目,选择 Android Tools>New Test Project...,会弹出 "NewAndroid Test Project" 对话框。

b.Project Name 命名为 测试项目, 然后选择 Next

c.在 Select TestTarget 里面选择 XXXActivity,然后点击 Finish。

d.这样一个测试项目就生成了。

经过这些步骤,我们会发现AndroidManifest.xml会自动生成:

<?xml version="1.0" encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

         package="com.android.example.spinner.test"

         android:versionCode="1"

         android:versionName="1.0">

    <uses-sdkandroid:minSdkVersion="3" />

    <application android:label="@string/app_name">

       <uses-library android:name="android.test.runner"/>

   </application>

   <instrumentationandroid:name="android.test.InstrumentationTestRunner"

                    android:targetPackage="com.android.example.spinner"

                    android:label="Tests for com.android.example.spinner"/>

</manifest>


 

2、继承ActivityInstrumentationTestCase2 创建测试用例类,这个测试类可能包括:

a.测试配置。我们一般用JUnit 的 setUp 方法来做一些准备工作,和在跑每个测试前需要运行的任务。

b初始条件测试。这是一个很好的测试技术。通过 instrumentation,我们可以在没有启动主Activity 前就可以观察这个应用。初始条件测试会检查被测应用的某些重要对象是否初始化。如果这个测试都失败了,那别的基于该被测应用的测试也是没有意义的。 > 注意:初始条件测试和 JUnit 的 setUp 方法是不一样的。

c.UI 测试。

 

3、添加构造函数—>添加 setUp 方法—>添加 setUp 方法—>添加初始条件测试—>添加一个 UI 测试。

具体的操作步骤,可以看测试项目的代码!

五、Monkey命令行工具

Monkey是可以运行在模拟器里或实际设备中的程序。Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动、手势输入等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

用法比较简单,比如你项目的包名是com.buyaohe.recycler,可以CMD窗口中执行执行下面这条命令。

 adb shell monkey -p  com.buyaohe.recycler -v 100

“-p”代表应用的包名,”-v”代表事件的数量。

 

 

0
0
查看评论

软件测试 读书笔记(思维导图)

自己整理的有关软件测试的一些知识点。 Xmind原文件 ----------------------------------------------------------------- 如果遇到任何问题欢迎留言讨论,我知道的一定会尽力解答O(∩_∩)O~ ---------------...
  • L664675249
  • L664675249
  • 2015-09-30 00:16
  • 1097

软件测试工作流程

一、测试各个阶段 测试计划阶段:产品立项之后,确定测试负责人,开始制定测试计划; 测试准备阶段:测试用例,测试样机和配件,测试工具,测试人员全部到位。 测试执行阶段:负责人对测试任务分工,按计划执行测试过程,提交并跟踪缺陷。 测试总结阶段:项目测试结束,负责人输出测试报告。 二.测试对产品质量的控制...
  • wei_zhi
  • wei_zhi
  • 2016-02-29 16:20
  • 1504

软件测试推荐书籍

测试入门 1、软件测试(第2版) Software Testing (2e), Ron Patton 一本测试入门的好书,较全面地介绍了各种测试领域和方法,为测试新手提供了正确的观念和宽泛的基础。 2、软件测试工程师面试指导 蔡为东 面向初学者,介绍了软件测试行业、测试工程师素质要求、基本测试技术、...
  • wudiyi815
  • wudiyi815
  • 2014-10-09 17:19
  • 2755

【软件测试】软件质量标准与测试依据和规范

1. 软件质量标准(ISO) 1.1   软件质量保证(ISO) ISO (International Standardization Organization,国际标准化组织) TC/176技术委员会制定的所有国际标准  质量保证标准(ISO9001/2/3)&#...
  • qq_33642117
  • qq_33642117
  • 2017-01-09 17:26
  • 1254

常见软件测试笔试题

1、测试用例的设计方法有哪些?请阐述判定表设计测试用例的步骤。 答:等价类划分,边界值分析,错误推断法,因果图法,正交表分析法,场景分析法。 判定表设计测试用例的步骤:确定规则的个数;列出所有的条件桩和动作桩;填入条件项,得到初始判定表;简化合并相似规则。 2、自动化测试框架有哪几种? 答:模块...
  • shuiziliu1025
  • shuiziliu1025
  • 2016-09-19 21:38
  • 3603

软件测试常考面试题-软件测试面试宝典

问:你在测试中发现了一个  bug ,但是开发经理认为这不是一个  bug ,你应该怎样解决。 首先,将问题提交到缺陷管理库里面进行备案。 然后,要获取判断的依据和标准: 根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供 缺陷是否确认的直接依据; ...
  • MJ813
  • MJ813
  • 2016-09-06 16:43
  • 80743

软件测试工程师的级别(网上看到的)

从网上看到的。 觉得对我有用,就收藏一下。        首先,是否需要编程技能与测试人员从事的测试工作种类有极大关系,相信很多人都听过微软曾经聘用一名家庭主妇来测试Windows操作系统的故事。实际上,软件测试分为:功能测试、需...
  • bingjingfan
  • bingjingfan
  • 2011-04-01 15:38
  • 3312

网易笔试题(java 、 c++ 、软件测试等)

A卷(研发类笔试题) 第一部分(必做): 计算机科学基础 1. (单选)软件设计中模块划分应该遵循的准则是:     A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合 2. (单选)最坏情况下时间复杂度不是n(n-1)/2的排序算法是:  ...
  • ningxuezhu
  • ningxuezhu
  • 2012-10-06 17:43
  • 7998

软件测试工程师面试一般常见问题汇总

1. 编程基础;  2.数据库知识,建议准备好sql语言,能掌握高级查询使用基本可以应对了。 3.软件测试理论,这个大家都不陌生,也是必考的了,应该可以轻松应付。要注意准备下web测试和性能测试这块,现在做web的公司好多。 4.根据公司具体的职位要求可以准备的有linux的命令,CMMI...
  • hyszyl
  • hyszyl
  • 2017-03-09 19:37
  • 5421

推荐几本软件测试方面的经典书籍

《软件测试》作者:(美)Ron Patton译者:周予滨 姚静出版社:机械工业出版社原出版社: SAMS我所见过的最好最经典的软件测试入门书,有一个别名叫“软件测试的本质”。书中没有讨论太多的软件测试理论,只包含了一部分常用的、基本的知识。从什么是软件测试、为什么要作软件测试开始,逐步引入基本的和高...
  • jackei
  • jackei
  • 2004-10-24 15:45
  • 34103
    个人资料
    • 访问:78724次
    • 积分:1666
    • 等级:
    • 排名:千里之外
    • 原创:87篇
    • 转载:0篇
    • 译文:0篇
    • 评论:18条
    博客专栏