自动化单元测试要点

用单元测试的框架MSTEST,做单元测试,集成测试快1年了,总结一下工作中学到都东西。

单元测试,集成测试有什么用?

1. 改进产品质量

软件测试,很多时候围绕着两个问题:

Verification和Validation,常说的双V。前面的Verification就是Is the software built correctly?。后面的Validation就是Have we built the right software?

单元测试,更多的是Verification。所以有时候经过我单元测试和集成测试以后的功能模块,在交给其他同事做功能测试的时候,依然会有一些BUG,这时候开发可能会埋怨我测试得不够完全,诸如此类。但是其实很多时候,我的关注点是单个方法的功能、行为,没有站到更高的位置来测试这个模块。对于这样的问题,开发和测试应该互相体谅,我本人也会提高自身的水平。希望在单元测试和集成测试中也加入更多关于Validation的思考。
Continue reading “自动化单元测试要点”

单元测试的坏味道

Martin Fowler有一本很出名的书《重构》,里面有个很出名的概念,Code Smell。前阵子我也刚发现一本很好的书,《XUnit Test Patterns》。这本书主要讲的是如何重构测试代码,这里的测试代码指的就是自动化测试的代码,再进一步细化就是单元测试为主的自动化测试代码的重构。由于此书已经让清华大学翻译烂了……所以建议大家下载英文版。

所谓的测试的坏味道,有三种:

  1. 项目(Project)
  2. 行为(Behavior)
  3. 代码(Code)

按照《重构》书中提出的坏味道的概念来看,如果说是有坏味道(Smell),那么大多数都是指代码级别的。什么的坏味道?就是程序有可能会有大问题的一种征兆(symptom)。个人理解就是不能被直接观察到的现象,可以称之为坏味道。

对于自动化测试代码来说,如果有了项目级的坏味道,通常变现就是生产环境出现了BUG。如果出现这样的情况,那么自动化测试代码就不是有味道那么简单了,而是有问题了,自动化测试的安全网没有能够抓住这个BUG。
Continue reading “单元测试的坏味道”

测试用例的重用

跟测试工程师打交道最多的可能就是测试用例了,先设计出一些测试用例,然后这些测试用例要经过评审,之后要执行这些测试用例,完了以后还有可能需要对这些测试用例进行更新。测试用例的重用是一个很有必要的活动。那怎么重用呢?很多人可能第一时间想到了一些测试管理工具能帮上忙,例如Quality Center,Test Link;又或者是一些保存测试用例的工具,例如Word,Excel。

不过这些东西真的能帮助我们重用测试用例么?我想未必。测试用例的重用,应该是测试用例里面的设计思想的重用,而不是具体某个测试用例的,因为对于功能测试的测试用例来说,大多数的测试用例都跟某个具体的被测应用有想到大的关联性,例如要测试一个博客编辑器,对于MySpace的博客编辑器和facebook的博客编辑器来说,它们的主要功能是相似的,都有发表博客,编辑博客,修改博客等……但是由于这是两个不同公司的产品,他们的具体功能或者UI是完全不一样的,所以拿到的两套测试用例,也应该是不一样的。如果分别提取出测试用例的核心思想(就是那些可以重用的部分),应该能看到很多的共同点,或许会有这么一条共同的用例思想。
Continue reading “测试用例的重用”

用route命令修改路由表来阻止本机访问特定IP的主机

场景:在本地有一台代理服务器,这台服务器会定时检查部署在远程的服务器的状态,如果检测到某台服务器是工作异常的,那么该台服务器就会被移除到生产服务器列表;如果过了一段时间,程序发现原来工作异常的服务器已经恢复正常,那么该服务器就会被重新添加到生产服务器列表中。那些被检测服务器的IP是以配置文件的方式记录。

测试的一个关键点:某台服务器Down了以后被代理服务器剔除出生产列表,如果这个台服务器恢复正常以后,代理服务器上的监控能否检测到该服务器已恢复正常,并且把该服务器添加到生产服务器列表中。

限制:1. 我没有远程服务器的管理员权限,甚至无法登陆到那些远程服务器;2. 没有处于测试状态的服务器,全部服务器都是线上生产服务器。
Continue reading “用route命令修改路由表来阻止本机访问特定IP的主机”

在C#单元测试中使用HttpContext的简单解决办法

场景:最近在测试一个.NET的Http Module,这个Module是用来做URL重写的。刚开始进展的比较顺利,因为该Module里面的方法参数基本上都是String,后来这个Module进行了一下重构,所有参数都变成了HttpContext了,这就直接导致原来的单元测试都跑不起来了,接着就开始了弄HttpContext了。

1. 采用Visual Studio自带的ASP.NET单元测试

刚开始我看了一下被测试的代码,虽然说用到了HttpContext,但是有很多地方我都可以绕过去的,意思就是这个HttpContext只是名以上需要的一个参数,只要它不是NULL就可以了,并不影响我的测试,所以我采用了ASP.NET Unit Test的办法来获取一个HttpContext,这个方法实现起来是最简单的,但是会有一些问题,后面会提及到。
Continue reading “在C#单元测试中使用HttpContext的简单解决办法”

如何成为一名优秀的测试工程师

以下是我在MSDN杂志上看到的一篇文章,觉得写的挺好的,分享分享。

  1. 如果你工作没有激情,怎么能成为一个好的测试工程师呢?很多人可能抱着2种思想,1.我不如开发,混日子吧;2.找个机会转成开发。其实这都是没有工作激情的表现。
  2. 技术,这就不用说啦,我挺同意作者的观点,要达到75%开发的技术能力,我觉得是综合能力吧,包括编码,架构知识等等
  3. 聪明!
  4. 会管理时间,并且把自己的事情安排好。
  5. 强的适应性和快速学习的能力,其实做IT都要有这样的能力,知识更新的太快了
  6. 工作要主动,不要老大踢一脚,才动一下
  7. 沟通能力,老生常谈啦
  8. 对业务的了解

Continue reading “如何成为一名优秀的测试工程师”

Python中写文本文件的方法

最近在测试一个.NET下面的规则引擎,这个规则引擎用到了IronPython,PYTHON代码是写在配置文件里面的,.NET动态生成一些Python脚本,然后创建一个ScriptContext出来。测试这个动态生成的玩意儿很费劲!所以我就决定把python里面的变量都输出出去,这样就容易调试了。

一、打开文件
代码如下:
>>> f = open(“c:\my.txt”, “w”)
说明:
open(filename[, mode[, bufsize]])
Continue reading “Python中写文本文件的方法”

测试工程师需要懂编程么?

来自于James McCaffrey的一篇博客Do Software Testers Need to Know how to Code? 这个问题一直都是我们做测试的同行所考虑的问题,我觉得这篇博客写的很好,转过来跟大家分享一下,顺便翻译一下,文章主要是意译,不是直译。水平有限,有错在所难免,请大家多多包涵。其实对于这个问题,我以前读过一个前辈说的话,意思大概是:会写代码的人并不代码他的水平比不会写代码的人要高,只是从纵向的比较来看,会写代码的自己一般来说是要比不会写代码在自己的水平要高。

原文(Original):
Continue reading “测试工程师需要懂编程么?”

正交矩阵在测试用例设计中的应用

正交矩阵测试策略Orthogonal Array Testing Strategy (OATS)

其实我本身没有负责这个项目的测试,不过是不想闲着所以拿这个做做玩玩:)有这样一个弹出窗口,上面有很多CheckBox,我只选了其中的7个作为例子的测试对象,意在举例子。


Continue reading “正交矩阵在测试用例设计中的应用”