软件测试
来源:互联网 发布:淘宝店铺卖鞋名字大全 编辑:程序博客网 时间:2024/05/20 08:02
软件测试
软件测试有时候不被重视,但是测试工作很重要。软件测试可以找出软件中潜在的各种错误和缺陷来提高软件质量、降低因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”代表事件的数量。
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- 软件测试
- [leetcode]Generate Parentheses(java)
- 实时查看线程所占cpu
- IOS学习笔记01-关于objective-c的成员属性
- UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- DS90CR287 调试总结
- 软件测试
- c++指针与引用的区别
- C++面试之GetMemory问题
- vim实用教程
- 【20150711】周总结【批量更新trick,UTF_FILE的文件操作,cur与循环
- POJ 3663:Costume Party
- InputStream中read()与read(byte[] b) 用法介绍
- Java T与?
- 关于使用struts2跳转后css和js失效的解决方式