进化的测试

关注软件测试,白盒测试,自动化测试,性能测试

Entries for 七月 10th, 2009

调试部署在IIS上的ASP.NET程序实用小技巧

远程调试ASP.NET程序,似乎是每一个做ASP.NET的人都肯定要掌握的技能,大家都知道,从IIS6开始,就有了application pool(应用程序池)的概念,每个应用程序池都会有单独的worker process,这样可以保障不同的应用程序池之间互相不会影响,就好像MySpace上有博客应用,有论坛应用等等……如果这些应用都用的同一个应用程序池,那么只要一个挂了,其他的也跟着挂。但是如果每个站点都单独使用一个应用程序池,那么A站点挂了对B站点不会有影响。同时如果A站点有部署更新,需要回收应用程序池,B站点不受影响,照常工作。 创建多个应用程序池虽然好处多多,不过却增大了调试的难度。假如一台服务器上有5个站点,那么正常运行的情况下就会有5个w3wp.exe进程,要找到合适的进程进行调试就是一个问题,以前比较笨,就看哪个进程的ID比较小,或者哪个进程占用的内存较多来“判断”,今天发现其实微软有一个非常靠谱的方法。 1. 打开一个命令行窗口 2. 浏览到“Windows > System32” 3. 运行“cscript iisapp.vbs” 得到如图结果,哪个应用程序池对应哪个W3WP.EXE一目了然,从此告别瞎猜

Linq to Object在测试中的应用

.NET Framework 3.5中引入了一个新特性LINQ(集成语言查询),据说.NET Framework 3.5中很多特性都是为LINQ而服务的,例如Lambda表达式的支持,匿名类型,等等……这篇文章会讲述一个把Linq to Object应用于测试的例子。 前一阵子需要测试一个搜索在线会员的功能,如果一个用户是在线的,那么他所能够被搜索到的信息都会作为一条记录,保存在一个表中,主要的字段有5个,也就是根据这5个字段的信息可以查询出用户想要的在线会员。一个简单的方案就是写一个比较复杂的存储过程,然后根据5个输入来查询出不同的结果,不过DBA说在SQL SERVER中进行逻辑运算的性能不是很好,所以开发人员写了12条存储过程,分别对应不同的组合,那么对于我做集成测试来说,我起码要有12个测试方法对应这12条存储过程。同时我还要设计一定数量的测试数据,供我查询测试,而比较要命的是,这些测试数据随着我对这个功能的理解的深入,在不断地增加,结果就是如果我写第一个测试的时候,我准备的数据是30条,OK,测试通过;等我写到第五个测试的时候,测试数据可能有40条了,当我用这40条测试数据重新指向第一个测试的时候,FAILED!!!这让人非常郁闷。所以我想到了能不能用round trip的方法来进行测试。做一个比喻,假如说我想证明WIN7的计算器程序是正确的,那么可以把相同的计算在WIN XP的计算器中跑一遍,如果两者结果一样,那么我可以认为WIN7的计算器程序也是正确的(如果XP的计算器有错怎么办?先别较真,有风险,但很小)。 我的做法就是,准备一些数据,首先用SUT进行查询,然后用LINQ进行查询,如果两者查询结果一致,那么可以认为程序是正确的,否则就是两者之一存在问题。 首先准备一些测试数据,保存为XML文件,第一方便对测试数据进行CRUD,第二可以用XmlSerializer把这些数据转换为对象,方便用LINQ查询。