~

我的最新日志

  • 现在来看自动化测试

    2008-3-20

    在公司,我们是专门的自动化测试团队,负责公司所有产品的自动化测试支持,我们根据自己的经验来为各个产品设计自动化测试解决方案,为ST提供公共的脚本开发平台,根据ST的需求开发脚本的底层支持库,甚至在ST比较忙的时候,还分担脚本的开发任务。但说实话,到目前为止,公司的自动化测试还是没有成规模应用。为什么会这样呢?培训的老师介绍了X公司的自动化实施状况,与我们不同的是,X公司的测试人员都能写脚本,他们负责手工测试的人必须完成对应case的自动化脚本。我想这才是一种比较好模式。

    在我们的工作中,为了满足手工case的脚本化,我们去拆分之前写的test case,甚至有时候,要求ST在写test case的时候要考虑自动化脚本的开发,我想我们这点是错误的。Test case的最终目的是帮助ST去发现被测产品的问题,因此,ST应该根据他们的经验去开发高质量的test case,不应该过多的考虑自动化脚本的需求,因为自动化脚本也只有一个目的:帮助ST节省时间,从而有更多的经历发现产品问题。那脚本到底是应该有ST来写,还是由专门的自动化测试工程师来写呢?我现在的想法是:应该由ST来写。在公司做了一年的自动化,从网管,宽带接入,光传输,到现在做以太网功能测试,接触的产品很多,也给每个产品都开发过脚本,但就现在来说,对其中任何一种产品,我都只能说是刚刚了解,远没有达到一个ST的要求,这也就是我对自己开发过的脚本都不自信的原因。不过客观原因是,你确实没有更多精力去深入了解这么多产品的测试。自动化脚本的质量有两个方面,一个是脚本的测试逻辑,一个是脚本的实现。如果可以提供一个高效合理的framework,使得ST在开发脚本的时候,只需要专注于测试逻辑的实现,那么我认为,在这种情况下,相比要去熟悉产品的测试逻辑,开发一个脚本所需要具有能力的要求就更简单,并且容易实现,所以,要保证质量,最好的方法是由ST开发测试脚本。当然,这样避让会加重ST的工作量,也对ST的能力提出了更高的要求。但我觉得,这肯定是一个值得尝试的方法。而自动化测试工程师则可以从产品的测试逻辑中解脱出来:

    1 专注于测试平台的开发和完善,尽可能滴为ST开发脚本,提供一个高效简单的平台,减少他们不必要的工作量。

    2 专注于special case的开发,并提供simulator

    3 提供脚本质量保证机制,这种机制主要用于服务脚本的调试和后期维护,并不涉及到脚本的测试逻辑。从而能和ST一起保证脚本的质量

    4 专注与底层支持库的开发,满足ST开发脚本的各种需求
  • 自动化脚本的check list

    2008-3-20

    过去的三个月一直在做光传输的自动化测试,底层API和自动化脚本也写了不少,但一直都感觉没有一个标准指导自己去写脚本,总是按着自己的习惯去做。前天参加了一个测试大牛的培训,他结合自己的工作经历,讲了很多方面,包括自动化测试,系统测试,测试管理和评估等等。给我的感觉是,如果测试能做到他那样的程度,真的是一件很享受的事情。因为自己是做自动化测试的,所以对他说到的脚本质量比较关心,如何能保证一个脚本的质量和减少后期维护成本呢?他的做法是规定一个脚本的check list,每个脚本出来后,都要和团队其他成员按照check list来review脚本,我觉得这样不错。他说的check list很长,结合我们当前的状况,下面几点确实应该作为我们后期努力的目标:

    1 清晰的title。一个清晰简明的case title能帮助我们了解脚本的大致功能,这个很重要。

    2 丰富的日志。他的要求是,脚本出问题后,通过日志就能发现脚本的测试逻辑和出错原因。我觉得这点很重要。平常为了提高开发效率,往往只在关键步骤后加日志,而且表述也不是很清晰,导致一旦脚本出错,就需要结合日志和脚本一起debug,虽然debug几次后,也可以做到只看日志来找原因,但对于日后维护脚本的人就是个麻烦了。而且脚本的数量会越来越多,在紧张的回归测试里面,为了能更快的定位出错的脚本,一份详细清晰的日志就显得更为重要了。所以我们前期偷懒养成的坏习惯,其实最后都追加到项目成本里面了,而且还降低了脚本的质量,确实很惭愧。对于以后的脚本,我想我能够做到只通过日志就可以了解脚本的测试逻辑和出错原因。

    3 回归脚本的数量会越来越多,为了在紧张的regression test中准确高效的定位问题,我们需要保证,在脚本进入regression train之前,要完成一次clean run report。report包括两个方面:a 测试结果中只有pass 和 fail两种情况;b fail的脚本必须要有清晰的出错原因描述。clean run对于回归测试中定位是软件版本更新的问题还是脚本的问题很有帮助,为了降低大量脚本可能带来的调试和维护成本增加,我们有必要在开始regression test之前,完成这么一个环节。

    4 脚本的版本管理。面对较为频繁的软件版本release,我们需要对脚本进行版本管理,使得每一个软件版本都有其对应的脚本。但如何做到脚本的版本管理,暂时还没有太好的办法!?

  • Transport

    2007-10-19

    下阶段要开始跟着做Transport那边的工作,目标是让Transport的自动化测试能高效的运作起来。主要面对的产品是光传输平台,由于自己之前没有光传输方面的知识,所以接下来一段时间需要恶补,主要集中在三个方面:Ehternet/optical&electrical card/SDH。Transport是一个很高效的部门,R&D和testing的流程都很规范,技术实力也很强,通过这次机会,希望能多多向那边的工程师学习,也希望通过这次完整的自动化实现过程,积累一些自动化实施的经验和技术。先借地方记下流水账:

    1 首先和transport那边负责自动化测试的同事做了一些交流,包括:之前自动化测试实现的方案,当前的应用情况,存在的一些问题,以及以后工作中我们需要准备的背景知识。在确定了这些方面后,那边的同事share了一些培训资料,test case,并指定了相关人员做专门辅导(这对我们的前期准备提供了很大的帮助)

    2 team内部结合以前自动化测试实施的经验以及当前对新工作的了解情况,做了一个短期计划:学习SDH相关基础知识,搭建测试环境,通过手工测试熟悉测试的业务逻辑和需求,了解之前已经实现的自动化case和API,总结存在的问题以及提出解决方案。由于涉及到的方面比较多,不可能每个人(当前有三个人)都一起学习一个方面,但为了以后的工作方便,需要team内部有对每个方面都有比较深入了解的人(方便解决工作中遇到的问题),所以决定在大家对SDH有个初步了解后,在对需要学习的内容分为三块,每个人在针对性的做深入了解:(1)SDH原理,(2)单板业务以及仪表的使用,(3)网管操作。并决定每周开一次例会,share每个人的学习总结以及遇到的问题

    3 由于当前版本在release前需要做模拟现场测试,所以整个测试环境都搬到了工厂那边,测试人员也都full time在工厂那边工作(气氛相当紧张的说),为了我们在熟悉业务的过程中能得到及时帮助,team决定将自动化的调试环境也建在工厂,由于工厂不开放外网,给搭建测试平台带来了一些问题,庆幸的是终于还是解决了(体会:只要大家确实努力做事了,问题就一定可以解决),以后天天都要换衣服跑工厂了

  • Linux

    2007-10-14

    1 linux中如何允许root用户telnet

    将/etc/pam.d/login文件中的"auth required /lib/security/pam_securetty.so" 前面加一个#号,注释掉就OK了

     

  • AdventNet

    2007-10-11

    一直都想尝试用AdventNet提供的SNMP开发包来学习SNMP开发,早在两个星期前就从http://www.adventnet.com.cn/products/snmpapi/snmpapi.html上面将开发包和help文档放到了俺的D盘下,可一直到现在才开始使用,虽然有工作上的原因,但绝对也和自己一贯的懒散有关系。知识在于积累,从今天开始,记录一些学习过程中的总结:

    1 如果仅仅做一些SNMP消息处理,就只需要加载AdventNetLogging.jar和AdventNetSnmp.jar这两个jar包。而且必须使用JDK1.4编译

    3 在使用setObjectID的时候,如果输入完整OID,则必须在OID的前面加个".",这样才能被认为是绝对OID。否则该方法会此OID是相对OID,会自动在OID的前面加上"1.3.6.1.2.1.",就会导致发送异常OID

  • JPL

    2007-9-06

    1 frame与panel

    frame是带标题和边框的最顶层窗体,其默认的布局管理器是BorderLayout

    panel是最简单的容器类,应用程序可以把其它组件放在panel提供的空间内,包括其它panel。panel默认的布局管理器是FlowLayout

    2 getContentPane()方法的使用

    在老的J2SE版本中,不能直接向top level容器中添加component,这些top level容器包括:JFrame,JDialog,JWindow,JApplet,InternalFrame,这种情况下需要使用getContentPane()获取这些容器的面板,然后通过这个面板加入component和设置布局。但在J2SE5.0中,这些top level继承了add,setLayout等方法,可是实现直接加入component和设置布局。

    3 若干个概念

    JDK:Java Development Kit,是开发JAVA最重要的工具,主要包括开发所需要的调试,编译,运行等软件工具

    JRE: Java Runtime Environment, 包括JAVA虚拟机,一些核心类和相关支持文件,是JDK的一部分(Runtime部分)

    Servlet: Java编写的小程序,servlet可以被web服务器加载,执行。这个就如同applet被浏览器加载,执行一样

    J2SE:

    J2EE:

    J2ME:

    JSDK:

    Java中的概念真多,感觉还有点杂,希望过一段时间能真正理解这些东西,come on...

  • tips about winsnmp

    2007-8-31

    1 在利用winsnmp做snmp开发的时候,通过SnmpSetTranslateMode设置通信的传输模式,其中传输模式有三种类型:

    SNMPAPI_TRANSLATED         不常用
    SNMPAPI_UNTRANSLATED_V1    版本V1
    SNMPAPI_UNTRANSLATED_V2    版本V2

    要注意的是,如果我们需要使用getbulk操作,就必须选择SNMPAPI_UNTRANSLATED_V2

  • tips about libsmi

    2007-8-28

    1 在熟悉smi_node中的method时,遇到大部分method不能正常使用,语法完全没有问题,但总也找不到原因,遇到这种情况真的很郁闷(曾不只一次的怀疑是不是编译出来的lib有问题!!)\\!!最后才发现,原来是自己load mib file的顺序有问题。libsmi不能自动对load进来的mib进行排序,所以在程序中按先后顺序load需要的mib file,这样才能正常使用这些method

  • compile libsmi

    2007-8-14

    libsmi开发包可以用作SNMP开发,最近需要在windows平台编译出libsmi的lib。资料提示通过NMAKE来编译,但总是会报错,加上对makefile不是很了解,所以一直没有成功。无奈之下试试直接在IDE中编译,没有想到竟然成功了,很是高兴,具体步骤如下:

    1. 从http://www.ibr.cs.tu-bs.de/projects/libsmi/download.html?lang=de上download libsmi-0.4.5的源码包。解压后会看到lib,win等子目录和文件。lib里面放的是源文件及头文件,win下面放的是用来在windows下编译的源文件和头文件。

    2. 在VC6.0中新建“Win32 Static Library”工程,然后添加所需要的源文件。分为三个步骤:

    (1)添加lib和win目录下的源文件

    (2)创建unistd.h头文件,文件内容如下:

    #ifndef _UNISTD_H
    #define _UNISTD_H

    #include <io.h>
    #include <process.h>

    #endif /* _UNISTD_H */ 

    并将unistd.h放到lib目录下(unistd.h是linux中的头文件,在windows下不存在,所以要自己创建)

    (3)添加lib和win目录下的头文件

    3. 设置VC6.0的编译环境,具体步骤如下:

    (1) project->settings->c/c++, category选择Code Generation,use-runtime library选择Multithreaded DLL

    (2) tools->options->directories, 在include files中添加lib和win两个目录的路径

    4. Build

    5. 虽然会出现warnning,但不影响编译结果。在VC工程中做一些设置就可以是用libsmi提供的方法来做开发了。具体设置如下:

    (1) project->settings->link,在object/library modules下面添加上面编译出来的.lib文件

    (2) 在tools->options->directories->include files中添加添加smi.h所在的目录,或者直接把smi.h添加到系统的头文件目录中

    (3) 在tools->options->directories->Library files中添加编译出来的.lib文件所在的目录,或者直接把该.lib文件添加到系统的lib文件目录中

    (4) project->settings->c/c++, category选择Code Generation,use-runtime library选择Multithreaded DLL(不然在link的过程中会出现很多“MSVCRT.lib(MSVCRT.dll) : error LNK2005”的错误,这是因为DLL和LIB被同时引用造成的)

    (5) 然后在我们的程序中#include<smi.h>,就可以开始做SNMP的开发了,GO!

  • QTP脚本开发点滴

    2007-8-10

    记录QTP脚本开发过程中一些积累

    1.在select JavaTree的某个item时,有时会识别失效。因为展开并显示javatree需要一定时间,如果还没有等javatree完全显示,就执行select语句,会导致item对象识别失败。一个解决办法是在select语句前面加一个等待语句。

Open Toolbar