学习心得——测试框架浅析

笔者按:       在这一学期的软件测试课程学习中,我逐渐接触到了软件测试的相关知识,实现了从较为关注软件编写与实现等前端内容到逐渐理解软件测试等项目后期环节的跨

越与 转变。而在软件测试领域,我们经常会听到测试框架这个名词,那什么是测试框架?它在软件测试中起到什么样的作用?我将就自己浅薄的学习心得,在这里为大

家做一个简单的分析与交流。

正文:          我们先来看一下百度百科给出的关于“框架”一词的定义:“框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题。” 那么如果我们将框架

这一概念引入到软件领域,可以给出什么样的一般性概念呢?笔者在对比了多种解释之后,认为以下的这种解释较为概括与全面:框架是整个或部分系统的可重用设计,

表现为一组抽象构件及构件实例间交互的方法。

针对以上的定义,我认为关键词在两个词上:“可重用”与“交互”。如果想要深刻理解这两个词的意义,我认为,在这里我们应该深究以下我们为什么需要在软件测试

领域中引入测试框架的概念,随着软件项目的逐渐增大,软件测试在软件开发中的地位显得越来越重要。如果软件项目没有良好的测试流程,随着系统的增大,无论项目

管理人员还是软件开发人员都会对项目的前景失去信心,甚至会对项目的目标产生分歧,因为长期以来没有对程序代码和系统设计进行有效的控制,很多问题都被暂时掩

盖或逐渐演化成其他的问题。软件开发周期越长,就会使得问题进化的版本越多,最后造成的结果是“剪不断,理还乱”。而测试框架的好处在于:提高开发速度,提升测

试代码的执行效率;提高软件代码质量,同时引入重构概念,让代码更干净和富有弹性;提升系统的可信赖度,作为回归测试的一种实现方法支持修复后“再测试”,确保

代码的正确性。常用的测试框架分类包括自动化测试框架和单元测试框架。根据所用开发平台不同,也可使用不同的测试框架展开测试。

关于“可重用”,我认为我们可以将软件测试框架简单地理解为:测试框架不是一个现成的完备的系统,而是一个半成品,测试工程师可以结合自己的测试对象的测试

需求,将其转化为对自己可用的测试用例。打一个简单的比方,测试框架就好比一个搭建好的舞台,而测试工程师(舞者)就这一在这个开放的、标准化的搭建好的舞台

上跳出自己想要跳出的舞蹈。软件测试框架提取了软件测试系统中的共性部分而形成的体系结构,在其基础上进行软件测试,只要调整部分内容就可以满足自己的需求,可

以有效地降低开发成本,缩短开发时间。这就是软件测试框架“可重用”属性的意义所在。

关于“交互”,我们知道,现在常用的测试框架有自动化测试框架和单元测试框架,自动化测试是为了代替目前较多的手动测试,而单元测试则是单元测试是整个测试

流程中最基础的部分,它们要求程序员尽可能早地发现问题,并给予控制,这是其一。另外,如果集成测试出现问题,它们可以帮助诊断。这样就为在软件开发流程中建

立高效的事件反应机制打下了坚实基础。 如果测试框架中无法实现构建的交互,单元测试就会变得艰难而难以开展,由此可见测试框架中“交互”一词的重要意义。

笔者结合自己学习到的知识,在这里给出单元测试框架的一个例子:JUnit,关于其他的种类的测试框架的具体实例,有兴趣的读者可以查阅相关论文,升入研究。

JUnit 是 Java 社区中知名度最高的单元测试工具;CppUnit 是个基于 LGPL 的开源项目,最初版本移植自 JUnit,是一个非常优秀的开源测试框架。

使用JUnit时,主要都是通过继承TestCase类别来撰写测试用例,使用testXXX()名称来撰写单元测试。

              用JUnit写测试真正所需要的就三件事:

         1.一个import语句引入所有junit.framework.*下的类。

         2.一个extends语句让你的类从TestCase继承。

         3.一个调用super(string)的构造函数。

  

功能类MathTool:

                  packagecom.zj.c01;

                  publicclassMathTool {

publicstaticintgcd(intnum1,intnum2) {

intr = 0;

while(num2 != 0) {

r = num1 % num2;

num1 = num2;

num2 = r;

}

returnnum1;

}

}

测试类MathToolTest:

                   packagecom.zj.c01;

                   importjunit.framework.TestCase;

                   publicclassMathToolTestextendsTestCase {

publicMathToolTest(String name) {

super(name);

}

publicvoidtestGcd() {

assertEquals(5, MathTool.gcd(10, 5));

}

}

补充:      JUnit的各种断言

           JUnit提供了一些辅助函数,用于帮助你确定某个被测试函数是否工作正常。通常而言,我们把所有这些函数统称为断言。断言是单元测试最基本的组成部分。

           1. assertEquals([String message], expected,actual)

            比较两个基本类型或对象是否相等(expected和actual是原始类型数值(primitive value)或者必须为实现比较而具有equal方法);

           2.assertFalse([String message],boolean condition)

            对布尔值求值,看它是否为“真“;

           3.assertTrue([String message],boolean condition)

            对布尔值求值,看它是否为“假“;

           4.assertNull([String message],java.lang.Object object)

            检查对象是否为“空“;

           5.assertNotNull([String message],java.lang.Object object)

            检查对象是否不为“空”;

           6.assertSame([String message],expected,actual)

            检查两个对象是否为同一实例;

           7.assertNotSame([String message],expected,actual)

            检查两个对象是否不为同一实例;

           8. fail( String message )

            使测试立即失败,其中 message 参数使可选的。这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)

相关知识:

白盒与黑盒框架

框架可分为白盒(White-Box)与黑盒(Black-Box)两种框架。相关概念的详细内容,有兴趣的读者可以自行深入了解、学习。

时间: 2024-10-22 12:18:40

学习心得——测试框架浅析的相关文章

学习spock测试框架

spock是一个单元测试框架,类似于junit,可以用java和groovy写. 依赖: <dependency> <groupId>org.spockframework</groupId> <artifactId>spock-core</artifactId> <version>1.2-groovy-2.4</version> <scope>test</scope> </dependency

深入java集合学习1-集合框架浅析

前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框架API是用来表示和操作集合的统一框架,它包含接口,实现类以及一些编程辅助算法.具体位于java.util包下. java集合框架UML图 从上面的UML图中可以看出,集合框架可以简单的分为四部分 Collection接口以及实现类 Map接口及其实现类 Iterator接口及实现类 辅助工具类  

Android 数据库ORM框架GreenDao学习心得及使用总结&lt;一&gt;

Android 数据库ORM框架GreenDao学习心得及使用总结<一> 转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁

前端测试框架学习

做了一年多的前端,从没有认真写过单元测试,对于常说的各种框架并不能彻底的分清,这次做了一个认真的学习与总结. 单元测试框架:Mocha, Jasmine等,因测试框架不包含断言库,因此需要引入断言库,Jasmine带有断言库assertions(未使用过).断言库 assert, shouldjs, chai等,具体的单元测试用例中使用karma是一款自动化测试工具,通过使用配置文件自动检测单元测试文件并进行测试,输出测试结果travis ci 持续集成服务,实现对代码库的代码的检测,编译,发布

软件测试学习笔记week 3 --- 测试框架初体验

测试框架初体验 在这周的软件测试课上,第一次了解了软件测试框架的概念.软件测试框架包含的范围非常广,从自动化测试框架到单元测试框架以及性能测试框架.在上个寒假中,在学习Coursera的在线课程时发现普林斯顿的单元测试做得非常强大,从程序正确性到Time consuming甚至Memory consuming,几乎能发现程序中的每一处错误或者缺陷.因此,在上完了这周的课程后,我查阅了一些资料,做了这篇随笔记录了解到的单元测试的知识. 一.什么是测试框架 要认识测试框架,首先要对所谓框架有概念.框

测试驱动开发(TDD)及测试框架Mocha.js入门学习

组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅存很少的QA用于系统模块间的集成测试. 因此代码的测试与开发都将由开发者(Developer)来保证. 这就需要借助优秀测试框架的帮助,尤其是支持TDD开发模式的自动化测试框架更为重要,因为我使用的编程是语言是Node.js,那么广泛使用的Mocha.js将成为我的首选. 在团队转型过程中,很多事情

[python测试框架学习篇] 分享一个和adb相关的测试框架

https://testerhome.com/topics/7106   (user: zteandallwinner     password: same to qq ) 264768502 · #1 · 2017年01月13日 小小的建议 没缩进不能看,不如贴gist 单纯的adb的封装有很多人写了 比如我(#厚脸皮) https://github.com/264768502/adb_wrapper 比如这贴: https://testerhome.com/topics/6938 如果要处理

Android开源测试框架学习

近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java代码,采用传统的Junit测试,开发人员通常会编写重要接口和函数的白盒测试代码,不做过多讨论. 但因Android的特殊运行机制(Dalvik虚拟机),其中存在Application.Activity.Service等特殊组件,而这些组件都涉及到生命周期管理的问题. 为了对这些组件进行测试,Goog

【Linux学习】基本的多进程测试框架

题目: 编程一个基本多进程测试框架,提示用户输入进程数.和每个进程数运行圈数.进行多进程压力测试.要求父进程能监控所有子进程的退出,避免僵尸进程. #include <stdio.h> #include <unistd.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> void func(int, int);