没有目标就不会成长!

发布新日志

  • (转)一个软件测试工程师面试结束后想说的

    郝克存 发布于 2012-12-25 16:57:43

    昨晚正式收到支付宝的Offer,提交完离职申请,我的求职过程也就告于段落了。写下这篇文章,希望我的这些经历可以对正在求职的你能有点启发。

      首先,交代下我的背景,这样大家看的时候,就可以有个对比参照。我2010年7月份毕业于南京晓庄学院计算机专业,一所二本学校,经常用大学班主任的气话来调侃“我是一所三流学校里面的二流学生”。在大学期间,成绩一般,没拿过一等,唯一一次有机会拿二等,还因为一门公共课挂科而取消资格,但也扎扎实实学过一些专业课程,比如数据库、网络、C++编程。考研,挂了。大学毕业那会,因为一直在实习,就没正儿八经投过几份简历(现在再看我大学毕业时的简历,真是一塌糊涂),那时候面试过金蝶,失败,富士通的笔试都没过。所以可以讲,我毕业那会基本没有面试经验。后来,没办法就厚脸皮,外包进入实习的那家很牛逼的杀毒软件公司,入行软件测试。这一待就是二十九个月。

      在这两年五个月的时间里,开始我对软件测试知之甚少(大学课程中,也就软件工程课中提到过软件测试),利用工作间隙一点点学习:测试理论、Java、Python、设计模式,甚至学习过servlet、JSP,Spring框架……,现在看学的好混乱啊。同时,项目中接触到了自动化测试,就给自己定位要学好自动化测试。学习过程就不细述了,最后经过不断学习,我敢贴在自己简历中的技术背景是这样的:

      从八月底开始,到十二月初我差不多投递了80多封求职简历(还不算在51Job中申请的职位),80+的求职邮件,收到了差不多40封邮件反馈。九月中旬,陆陆续续进入面试高峰期,有时,一周面三家单位,投的都是外地公司,所以接到都是四十分钟以上的电话面试。在这三个半月的时间里,我经历着“希望-失望-又有希望-再一次失望”这样的煎熬,一次次失败,逼得我不断反思,我问自己问题出在哪?一遍遍修改求职简历,从措辞到排版,到最后甚至计较该用什么字体,字体大小设置多大看起来比较美观。一遍遍独白面试第一部分的“自我介绍”,该如何有条理的把自己这两年所学,所做的事情阐述出来。更为重要的事,我开始整理这两年所学,梳理那些测试理论,编程语言,项目经验。

      在决定换工作的时候,自己首先需要弄明白为什么要换工作?真的到了非换不可的地步了吗?我不赞成轻率地、频繁地换工作,在我看来换一份工作成本还是蛮大的。但当我在这一个项目两年以上,当日常工作游刃有余,没有压力时,当我不是很清楚地知道我该学些什么的时候,我知道该make change了。上周周会,看到项目未来半年的WBS,看到那些摊派到我头上的任务,我知道我做了正确的决定。促成我换工作的另一个原因是,这两年多来,我一直待在同一个项目组,测试的是IBM的Domino邮件服务器相关,单一的项目经验,对我自身的发展有很大局限。况且在Domino日趋衰败大背景下,我想出去呼吸点互联网公司的气息。

      在这里,顺便谈下我对外包的看法。这两年多来,我一直是外包到一家跨国的杀毒软件公司,从事测试。在这里我遇到了我工作中的两位Mentor(Rongting & Paul,当然他们是Regular),从他们那我学到了做事的方法,带着我学习提高,解答了我的很多问题,对我帮助很大。遇到了现在的Leader,他对我的信任、认可,让我能有机会做更多的事,像设计测试用例、自动化测试开发、性能测试等。整个Team氛围都很open, 能有机会参加基本所有的项目会议,参与讨论。一毕业就能有机会,在这样的大公司,在各种规范的流程指导下学习工作,我真的受益匪浅。我知道这是我的幸运,不同的项目对外包的工作,管理都是不太一样,和Leader有很大关系。另一个项目外包的同事,进组一年多了,都没机会设计测试用例。这里我想讲的是,虽然外包总给不了人一种归属感,但同时也让你有机会和一群比你厉害的人一起工作,要利用这样的工作机会向同事请教、学习,迅速提高自己。还有一点很重要,一定要自信,如果你觉得你能胜任,就可以争取点不同的任务。

      当决定好要换工作后,下面就要开始准备你的简历了。简历是你的敲门砖,用人单位看完你简历后,觉得合适,通过简历筛选,才能够获得面试机会。简历首先要真实,真实反映你所干过的活,所承担的角色,你的贡献,真实反映你的技术背景。面试官一般会围绕你提供的简历,展开提问,你简历上所描述的,你一定要很有把握。第二点,简历拿出来要有亮点。一位测试前辈老师,看完我的简历给我建议是“如果你觉得自己是实力派的人,在简历中要突出你的能力,过去的业绩亮点。”最后一点,如果应聘的是外企,或则职位描述是用英文来写的,一定要附上中英文简历,要准备一份拿得出手的英文简历哦!锦上添花的是,如果你的简历排版简洁(中文简历一般不超过两页),美观,也会为你加分不少。

      如何获取职位信息?当我发现我在大型招聘网站(如51job,智联招聘)申请那些我向往的职位都没消息后,我就放弃在这类网站上申请职位了,还发现在这些招聘网站上发布信息的就是那么几家公司,后来都懒得登入这些网站看了。那我的职位信息是从哪来的呢?答案是专业技术论坛,就测试而言,很多公司会在51testing中发布职位信息,我的简历很大一部分都是投给了这些职位。一般还都能收到反馈,即使简历不合要求。十月份的时候,我发现很多人会在weibo上发布职位信息,就开始关注weibo中发布的测试岗位了。后来,要我的那两家公司也都是我在weibo上看到的信息,投的简历。现在想想,在大型招聘网站发布信息的都是HR,他们要在海量候选人中选择,被刷的概率更高。而利用论坛,weibo这些媒介发布信息的都是项目组的leader,他们将身边的一些岗位需求发布出来,有合适的候选人就内推,将来如果你面试成功,他们也可以获得一笔奖金。还有一个好处是,面试结果后,你可以发邮件请帮你推荐的人,查询面试结果。

      附上技术博客链接、Github账号,如果平日里你有写技术博客的习惯,或者参加过开源项目,有Github账号,都可以把链接帖在简历上。在面试的过程中,不只一次听面试官跟我讲,“我看过你写的文章,觉得写得挺不错”。这些都会为你的面试加分。

      利用好面试提问环节,一般面试结束前,面试官都会问你,有没有神马问题问他的?可以好好利用这个环节,一个漂亮的提问会为你加分哦!

      下面谈谈,我面试过一些的公司,以及这些公司对测试工程师的要求,可能具体的面试题记得不是很清了,就写个大概印象吧。

    ● 目前所在的杀毒软件公司 —— 对我帮助很大的一场面试

      这是上半年的一场面试,之所以放在这讲,因为这场面试让我认识到自身的一些不足。三月份的时候,在51job上看到南京焦点科技的专场招聘信息,周六下午没事就过去了,后来顺利通过笔试面试,拿到Offer。在我和Leader谈准备离开的时候,Leader又帮我争取到了面试我所外派的这家公司的机会。这算不上一次正式的面试,是周会结束后和QA Manager的一个小时左右的交流。一开始,是我讲进入项目组以来,我学到的知识,干的活,还有就是介绍自动化测试相关的。后来就是老板的提问,到现在我还记得这些问题:

      1、作为一名QA,你是怎么理解“质量”这个概念的?

      2、Java的垃圾回收机制、内类的几种方式、堆和栈区别

      3、在写自动化代码中,用到了哪些设计模式?

      4、最近读过的关于软件测试的书,文章?有哪些给你留下了比较深的印象?

      5、职业发展规划

      回答这些提问时,我发现自己对测试的理解还是不深,对Java中的很多概念还是比较模糊。我突然意识到自己是有多浮躁。面试结束后,老板给了我些建议,弄清基本概念,多读一些优秀的开源代码,不要贪多,一定要深入学习下去。那次面试后,我放弃了焦点科技的Offer,继续留在项目组,又系统学习了Java编程思想,学习Junit那些框架的源码,并开了这个技术博客,逼自己要定期写文章。

      ● 四战IBM  —— 英语口语要求较高

      从八月底到十二月初,这短短几个月里,我先后面试过IBM三个不同项目组,前后经历四波面试。七月初的时候,在Lotus中国社区看到Domino组在招测试工程师,就试着投了简历,后来也一直没消息。八月底的一个周二,刚下班接到了北京IBM的电话,约周四上午电话面试。因为现在测试的产品是Hook在Domino邮件服务器上的,在介绍所做的项目是,面试官问得很细致。接着细诉了,关键字实现、框架流程等。下面就是面试官提问:

      1、一些STAF/STAX的服务命令。

      2、自动化测试如何和CI系统集成。

      3、Domino中邮件路由过程

      4、算法题:一个字符串,如“This is a test !” ,输出“test a is This”,要考虑空间。

      5、设计模式:对单例模式的理解,有几种实现方式。

      6、Python:字符串查找

      7、口语题:你安排了一次团队活动,现在去给老板汇报,讲清楚:时间、地点、交通、具体活动安排。第二轮的时候,面试官会问,如果有一名RD手头有活,不愿意参加,你怎么说服他参加。

      这次面试,答得最差的题是口语题,基本是结巴着讲完的。准备面试的时候,没在网上搜过面经,根本没想过会有口语考核。血的教训啊,我后来面试外企的时候,都会提前问下有没有口语。这里顺便讲下有意思的事,面试完后,我在一个Lotus技术QQ群里问,有没有IBMer,问面试IBM多长时间有结果,没想到的是,居然有人小窗找我,是NW,NW是IBM Lotus Notes组的工程师,NW讲,看到群里的QQ名,猜出了我就是前两天面试的人。原来,我的简历就是他挑选出来的。这个世界真小。后来他帮我查了面试结果,“HELD – wait for manager interview if no better candidate”,评价是“Java基础扎实,有自动化开发经验,但口语有待提高”。后来也没有接到进一步的消息,哎,感叹当了次备胎,失败了。

      九月份的时候,在人人网IBM公共主页看到宁波研发中心招聘测试工程师,投简历,电话面试,也没消息了。十月份在weibo中看到发布招聘测试工程师,要求懂Java,有自动化开发经验。投简历,一轮电话面试,居然是IBM System i 项目组,二轮电话面试,后来又没消息了。需要说的是,这两个组的面试也都有英文对话。

      十一月底的时候,在weibo中看到老高发的招聘信息,要求“Java编程有所涉猎。软件测试流程和工具熟练掌握。对自动化测试,尤其是GUI程序的自动化测试有扎实经验”。后来知道老高是IBM Lotus Notes组的老板。老高将我的简历给了Domino组的老板沙。周一的时候,沙约我视频面试,当时在Office,没法进行,下午沙和另一位同事,电话面试了40分钟,视频面试推迟到晚上。视频最后,沙问了我期望薪水、到岗时间,最后沙讲,年底了headcount很紧,明年应该会有名额。第二天问NW,NW帮我查了面试结果,从面试记录上看,通过了。周三的时候,收到电话让我填写内部推荐的一个表格,就在我以为没问题的时候,接下来的周一,沙打电话给我,肯定了技术,但是因为年底没有名额了,来年再看。让keep in touch ,坑爹啊!

    ● 百度 —— 技术要求很高

      六月份的时候,Paul让我给他一份简历,项目组缺人,结果那次简历没通过筛选。十一月份中旬的时候,百度又在招人,Paul问我要了最新的简历,又帮我推荐了次。Paul还给我讲了可能会问到哪一类的题目,比如算法。当时项目比较忙,考虑到时间有限,我就没花心思去准备算法。这个决定让我很后悔。面试也是,首先自我介绍,介绍所做的项目,在项目中的角色,做了哪些事情。来看看Baidu一面的问题:

      1、在自动化实施过程中成本最大的一部分是什么

      2、在实现自动化过程遇到的最大困难,是如何解决的?

      3、Java:HashMap与HashTable的区别

      4、Java:对抽象类与接口的理解

      5、设计模式:如何实现线程安全的单例模式

      6、设计模式:监听者模式

      7、算法题:判断一个链表是否有环

      8、算法题:字符串左旋

      9、算法题:二叉树中,两个节点间的最大路径。

      面试到最后,想死的心都有,算法题懵了。后来在网上搜面经,发现这些都是常见的算法面试题,如果事先稍微准备下,就不会这么被动了。面试结束后,Paul帮我查了下面试结果,Pending。Paul让我准备第二轮面试,接下来的一周,我都在复习算法知识。一周后的周四,二面百度:

      1、自动化框架的实现,为什么这么做?

      2、自动化过程中遇到的难点,困难?

      3、面向对象的特性,简单阐述这些特性带来的优势

      4、接口与抽象类的区别

      5、异常类处理机制

      6、反射机制,在实际写代码中应用

      7、final,finally,finalize的区别

      8、有没有用过spring框架

      9、测试用例设计题:就linux下的CP命令设计测试用例。

      10、如果让你设计一些log监控系统,你会从哪些方面考虑?

      二面表现一般,但因为一面算法部分答得太差,最后没能进入三面。我的感觉,百度对技术要求真的很高,测试人员面试考算法的很少。如果大家将来面试百度,可以在网上找找相关的面经,做做类似的算法题,会有很大帮助。

    ● 红帽软件(Redhat) —— 各种假设

      我是几乎同时接到百度、支付宝、Redhat的面试邀请的。相比其他公司,红帽好像更注重员工的工作习惯的考核。红帽的一面顺利通过,二面结束一周后,查看面试状态“no longer in consideration”。在技术上面的问题,我有印象的好像有这么几道,“自动化框架,关键字实现的Java代码总共有多少行”,“Python程序共有多少个module”,“两个Linux系统之间如何传文件” 。来看看其他问题:

      1、如果让你带实习生,实习生每天有很多问题,这可能会打乱你的工作,你会怎么处理?

      2、如果到了预订日期,你的工作还没完成,你会怎么办?

      3、当你和其他同事,在技术方案的选择上发生争执,怎么办?你会如何说服他

      4、用十个以内的词来形容你自己

      5、用英文描述下你的兴趣爱好

      ● 其他一些公司

      Dell开始提供面试机会的是一个开发岗位,因为我觉得不合适,HR帮我推荐了一个虚拟化的职位,因为这是一个纯手工测试的岗位,我个人不是太感冒,面试一轮后就没消息了,我想说的是,Dell的HR manager Ripple是我遇到过的最nice的HR了,你有任何疑问邮件咨询,她会第一时间电话解答,并邮件确认。赞一个。HP的职位是我在51job中看到的,但也是发邮件申请的,面试挺顺利的,最后谈到了薪资这一块,但后来居然没消息了,接着传来了HP在裁员的消息。360的面试,就记得问过我,“闰秒”,“32位系统,和64位系统下的测试有何不同”,说实话,这两问题我真不知道。赛门铁克,面过,没留下任何印象。VMWare很向往的一家公司,但自动化测试偏重于UI方面的,问过的技术问题:hashmap与hasptable的区别,讲讲java collection framework的了解,Java反射机制。

      ● 支付宝 —— make it

      支付宝的职位信息也来自weibo,看下面的截图:

      投完简历不到一周时间,周四下午的四点多钟接到电话,有点奇怪的是支付宝并没有像其他公司一样,事先约定面试时间,而是直接就开始面试了。面试进行了四十多分钟,比较顺利,最后面试我的女生问,支付宝需要经常加班,你可以接受吗?

      接下来的周一,接到支付宝HR到杭州面试的邀请。面试定在周五中午十一点,我是周四晚上到杭州的,住在支付宝附近的汉庭,晚上快十一点了,支付宝大楼依旧灯火通明。第一轮,是两位工程师面的,挺顺利的。很从容的拿着笔在白板墙上讲解自动化框架、流程。面试官问了:

      1、自动化测试执行时间,容错处理机制

      2、Robot Framework 框架的优缺点

      3、自动化测试下一步的有哪些可以提高的地方

      4、Java的多态机制

      5、平日工作是如何设计测试用例,讲解下目前所测产品的一个模块的测试用例设计策略

      6、在整个项目周期中,测试要做哪些事情

      第一轮面试,大概进行了一个小时十分钟,接着休息了五分钟后,进入第二轮面试。第二轮面试,面试官是测试总监、HR。第二轮面试,简单阐述了目前的项目,我所做的事情。后来就是提问了:

      1、C++和Java对内存的操作有何区别?Java的垃圾回收机制为什么不能避免内存泄露问题?

      2、熟悉哪些网络协议?

      3、不同网段的两台机器是如何通信的?

      4、考研了吗

      5、大学同学都从事哪些方面的工作(hr问)

      最后,面试结束后,总监问我有什么问题?这个环节我准备的问题是,之前项目周四学习小组一起学习ET时,看taobao的探索式测试白皮书时,提出的疑问。听到这个问题后,总监笑了,说这个问题问得好,但我没法解答你,我也疑惑呢。

      当我走出面试的那个房间时,我心里有80%的把握。接下来的两周是漫长的等待,因为支付宝面试不通过是发拒信的,我不时刷新我的邮箱,期盼着结果。最后实在忍不住,托帮我投递简历的人,查看了面试状态,答复“结果还好,但还没最后结果还在确认中”。第三周的时候,接到HR电话,聊了下薪资期望。第四周,开始有点睡不踏实了,真的很渴望这份Offer,我打电话一再和HR确认,周五晚上六点五十,收到了最终Offer。

      结束语:大学毕业的那年春天去国展中心的招聘会,人头攒动,那时候的我很茫然,不知道自己能找到什么样的工作,也不是很清楚自己想要什么样的工作。这两年来我一直在努力,慢慢的我知道了自己想要找什么样的工作,渐渐地我也知道了我能找到什么样的工作。这条路,谈不上曲折,我一步步踏踏实实地走来。

  • loadrunner 对接口进行测试

    bob123654 发布于 2011-12-26 10:26:49

    Action()
    {
       char * filename ="E:/test.txt"; //文件名称

       long file; //文件的句柄


       /*打开刚定义的问题,如果找不到就给出提示*/
       if ((file = fopen(filename, "wt+")) == NULL) { 
         lr_output_message ("Unable to create %s", filename); 
        }

        /*关联所有返回的数据,如果有错误的话,可以抓了进行分析*/
    web_reg_save_param("Return_All",
    "LB/IC=",
    "RB/IC=",
    "Ord=1",
    "NotFound=ERROR",
    "Search=All",
    LAST);

     /*针对关键字进行抓取,利用该参数来判断服务器返回值是否成功*/
        web_reg_save_param("Status",
    "LB/IC=status\":\"",
    "RB/IC=\"}",
    "Ord=1",
    "NotFound=ERROR",
    "Search=All",
    LAST);


    lr_think_time(10);


    web_url("ddz_pair.do",
    "URL=http://localhost:8080/kpclientservice/ddz_pair.do?JSON={要传送的消息体}",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t2.inf",
    "Mode=HTML",
    LAST);


    if (lr_eval_string("{Status}")!="1") {//因为消息体给出的是1是错误,2是正确,所有如果返回的状态值为1就报错


     //lr_output_message("返回的所有消息%s",lr_eval_string("{Return_All}"));
             fwrite(lr_eval_string("{Return_All}"),strlen(lr_eval_string("{Return_All}")),1,file);

    }

    return 0;

    }


    另附:c语言fopen函数

      fopen函数用来打开一个文件,其调用的一般形式为:
      文件指针名=fopen(文件名,使用文件方式);
      其中,
      “文件指针名”必须是被说明为FILE 类型的指针变量;
      “文件名”是被打开文件的文件名;
      “使用文件方式”是指文件的类型和操作要求。
      “文件名”是字符串常量或字符串数组
      例如:
      FILE *fp;
      fp=fopen("file a","r");
      其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
      又如:
      FILE *fphzk
      fphzk=fopen("c:\\hzk16","rb");
      其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
      使用文件的方式共有12种,下面给出了它们的符号和意义。
      文件使用方式
      意义
      “rt”
      只读打开一个文本文件,只允许读数据
      “wt”
      只写打开或建立一个文本文件,只允许写数据
      “at”
      追加打开一个文本文件,并在文件末尾写数据
      “rb”
      只读打开一个二进制文件,只允许读数据
      “wb”
      只写打开或建立一个二进制文件,只允许写数据
      “ab”
      追加打开一个二进制文件,并在文件末尾写数据
      “rt+”
      读写打开一个文本文件,允许读和写
      “wt+”
      读写打开或建立一个文本文件,允许读写
      “at+”
      读写打开一个文本文件,允许读,或在文件末追加数据
      “rb+”
      读写打开一个二进制文件,允许读和写
      “wb+”
      读写打开或建立一个二进制文件,允许读和写
      “ab+”
      读写打开一个二进制文件,允许读,或在文件末追加数据
      对于文件使用方式有以下几点说明:
      1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
      r(read): 读
      w(write): 写
      a(append): 追加
      t(text): 文本文件,可省略不写
      b(binary): 二进制文件
      +: 读和写
      2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
      3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
      4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。
      5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
      6) if((fp=fopen("c:\\hzk16","rb")==NULL)
      {
      printf("\nerror on open c:\\hzk16 file!");
      getch();
      exit(1);
      }
      这段程序的意义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。
      7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
      8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。


  • 网页级在线性能网站测试

    msnshow 发布于 2012-05-26 22:54:14

    1 Web Page Test
    官方网站:http://www.webpagetest.org

    2 Load Impact
    官方网站:http://loadimpact.com/

    3 FreeSpeedTest
    官方网站:http://www.freespeedtest.com/

    4 Browser Mob
    官方网站:https://browsermob.com/performance-testing

    5 Rapid Search Metrics
    官方网站:http://www.linkvendor.com/seo-tools/speedtester.html

    6 Host Tracker
    官方网站:http://host-tracker.com/

    7 Pingdom Tools
    官方网站:http://tools.pingdom.com/

    8 Webo Software
    官方网站:http://www.webogroup.com

    9 iWebtool
    官方网站:http://www.iwebtool.com/speed_test

    10 Wave
    官方网站:http://wave.webaim.org/

    11 Web Page Analyzer
    官方网站:http://www.websiteoptimization.com/services/analyze/

    12 webtoolbub
    官方网站:http://www.webtoolhub.com

    13 gtmetrix

    官方网站:http://gtmetrix.com/

    14 pingdom

    官方网站:http://tools.pingdom.com/fpt/

    15 webwait
    官方网站:http://webwait.com/

  • 使用 TestLink 进行测试管理

    Slayer_Peter 发布于 2010-12-22 13:27:58

    TestLink 是sourceforge的开放源代码项目之一。作为基于web的测试管理系统,TestLink的主要功能包括:

    • 测试需求管理
    • 测试用例管理
    • 测试用例对测试需求的覆盖管理
    • 测试计划的制定
    • 测试用例的执行
    • 大量测试数据的度量和统计功能。

    TestLink的最新版本是1.6.2。在本文接下来的部分里,作者将详细地介绍使用TestLink1.6.0来进行测试管理的完整过程。

    一、安装启动

    1、 在安装TestLink1.6.0前,需要完成以下安装运行所需要的环境:Webserver、php4和MySQL。笔者推荐的安装环境如下:

    • Apache HTTP Server 2.0.59
    • Php 4.4.1
    • Mysql 4.1.21

    2、 将 TestLink 安装包保存到服务器,解压缩到 Apache2 的 htdocs 目录下,并重命名为 testlink。

    3、 自动安装 TestLink

    • 在浏览器输入访问地址http://yoursite/testlink/install/index.php,如:http://localhost:80/testlink/install/index.php
    • 选择new install,在进入的页面中,输入登录MySQL的用户名和密码,如root。提示安装成功,详细的安装说明请参照http://blog.csdn.net/judyxm/archive/2006/01/12/577148.aspx

    4、 登录testlink首页面。系统为testlink创建一个默认管理员账号,用户名和密码为:admin/admin。你可以使用这个账号访问TestLink 。登录http://127.0.0.1:80/testlink/index.php,如果你看到的页面如下,就说明你已经安装成功了。




    二、初始配置(设置用户、产品)

    1、 用户设置

    在TestLink系统中,每个用户都可以维护自己的私有信息。admin可以创建用户,但不能看到其它用户的密码。在用户信息中,需要设置Email地址,如果用户忘记了密码,系统可以通过mail获得。

    TestLink系统提供了六种角色,分别是admin、leader、senior tester 、tester、guest、testdesigner。相对应的功能权限如下:(详见图)

    • Guest:只有读的权限,适合于查看测试用例和测试需求,以及项目分析的用户。
    • Testdesigner:可以开展测试用例和测试需求的所有工作。
    • Tester:只能执行测试用例。
    • Senior tester:可以查看和维护测试用例,并且可以执行测试用例,但是不能管理测试计划、分配测试任务。
    • Leader:可以开展测试规格和测试需求的所有工作,还可以管理测试计划、分配测试任务。
    • Admin:维护产品,用户。

    同时,支持不同地域用户对不同语言的需求,可以根据用户的喜好对用户提供不同的语言支持。



    2、 产品设置

    TestLink可以对多个产品进行管理,Admin进行产品设置后,测试人员就可以进行测试需求、测试用例、测试计划等相关管理工作了。TestLink支持对每个产品设置不同的背景颜色,方便管理。




    三、测试需求管理

    测试需求是我们开展测试的依据。首先,我们对产品的测试需求进行分解和整理。一个产品可以包含多个测试需求规格,一个测试需求规格可以包含多个测试需求;

    • 创建测试需求规格
      对测试需求规格的描述比较简单,内容包含名称、范围。
    • 创建测试需求
      测试需求内容包含:需求ID、名称、范围、需求的状态,以及覆盖需求的案例。 TestLink提供了两种状态来管理需求:正确的(Valid)、不可测试的(not testable)。

    • 从文件导入测试需求
      Testlink提供了从文件导入测试需求的功能,支持的的文件类型有csv和csv(door)两种。

    四、测试用例管理

    TestLink支持的测试用例的管理包含三层:分别为Component、Category、Test case。我们把Component对应到项目的功能模块,而把Category跟每个模块的function对应,Test case就是写在这些Category里的。我们可以使用测试用例搜索功能从不同的项目、成百上千的测试用例中查到我们需要的测试用例,甚至于可以直接将别的项目里写的测试用例复制过来,这样就解决了测试用例的管理和复用问题。

    但是,还有一个问题没有解决,那就是与测试需求的对应问题。在测试管理中,测试用例对测试需求的覆盖率是我们非常关心的,从需求规格说明书中提取出测试需求之后, Testlink提供管理测试需求与测试用例的对应关系的功能。

    • 创建Component
      Component的内容包括:名称、介绍、范围、相关的内容、约束。
    • 创建Category
      Category的内容包括:名称、测试范围和目标、配置信息、测试数据、测试工具
    • 创建 Test case
      测试用例的要素包括:测试用例名称、简要说明、步骤、期望结果、关键字。



      创建好的测试用例树如下:



    • 建立测试用例和测试需求的覆盖关系。
      选中左侧用例树中的测试用例,再选择右侧对应的测试需求,进行Assign即可。


    五、测试计划制定

    在TestLink系统中,一个完整的测试计划包括:

    • 测试阶段的名称(如集成测试阶段、系统测试阶段)
    • 里程碑(明确每个测试阶段的开始和截止时间,以及完成A、B、C三种优先级的比例)
    • Build版本(定义本测试计划中需要测试的build版本,一般以产品名+时间来命名。)
    • 安排测试人员 (从用户列表中选择本测试计划的参与人员。)

    • 测试用例集
      • 制定优先级规则。优先级分为A、B、C三级,系统会根据用户定义的重要级别和风险级别的组合来确定优先级的归属。重要级别分为三级:Low、Medium、High。风险级别包括三级:1、2、3。
      • 从测试用例中选择本测试计划的测试用例集
      • 设置每个测试用例Category的重要级别和风险级别
      • 设置每个测试用例Category的责任归属。从本测试计划的测试人员列表中选择每个Category的Owner,由他来负责和完成测试用例的执行。

    六、测试执行

    执行测试用例,按照对每个build版本的执行情况,记录测试结果。测试结果有四种情况可以选择:

    Not Run:还没有执行过

    Pass:执行通过

    Failed:执行失败

    Blocked:由于其它用例失败,导致此用例无法执行,被阻塞。


    七、测试结果分析

    TestLink根据测试过程中记录的数据,提供了较为丰富的度量统计功能,可以直观的得到测试管理过程中需要进行分析和总结的数据:

    • 测试用例对测试需求的覆盖情况:哪些需求已经通过测试,哪些需求未通过测试,哪些需求处于阻塞状态,哪些需求还未开始测试。

    • 针对每个版本的测试用例执行情况:
      1)各种优先级的测试用例执行的比率
      2)各个模块的测试用例执行的比率
      3)各个测试人员测试用例的执行比率

    • 每个版本的执行情况

    • 所有测试用例在不同build版本的执行情况,显示?的地方表示还未执行。

    • 阻塞的测试用例列表

    • 失败的测试用例列表

    • 每个测试用例的bug数
      如果和bug跟踪系统连接的话,在下表中可以统计出每个测试用例的bug的数目


    八、与bug跟踪系统集成

    TestLink提供了与多种bug跟踪系统关联的接口配置,目前支持的bug系统有Jira、bugzilla、mantis。配置方法的相关文档参照帮助。


    九、其它易用性功能

    TestLink还提供了很多易用性的功能,比如:

    • 从测试需求直接生成测试用例
    • 文档的导入、导出功能
    • 测试报告可以导出为excel
    • 支持设定keyword

    总结

    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,我们可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。

    本文中,作者根据自己的使用经验,详细演示了如何使用TestLink来进行测试管理的全部过程,简单的介绍了TestLink的使用方法。希望能够帮助大家学会使用TestLink的基本功能,同时,大家可以参考这个过程和TestLink的帮助文档来实现对测试过程的管理。


    参考资料

  • TestLink安装配置手册

    Slayer_Peter 发布于 2010-12-22 13:27:09

    TestLink安装配置手册
     
    范围
    本文仅作为安装和配置TestLink的参考文档。

    本文的第一部分为TestLink的安装步骤,第二部分是TestLink的配置方法。

    本文和其他相关文档可在TestLink网站上找到。您也可以在TestLink的论坛中寻求帮助

     

    一般TestLink安装的步骤如下:

    1. 下载TestLink

    2. 解压文件

    3. 创建数据库

    4. 导入缺省数据

    5. 编辑配置文件

    6. PHP文件扩展

    7. 登录TestLink

     

    系统需求

    要使TestLink正常运行,需要安装以下软件:

    MySQL 4.1.x及以上

    php   4.3.x及以上

    WebServer (Apache 1.3.x或2.0.x及以上,IIS 3及以上,等等,更详细的信息请参见<php安装目录>/install.txt)

    对于操作系统平台没有特别要求(TestLink已经在Linux和MS Win32平台上测试通过)

    你也可以将数据库与TestLink分别安装在不同的服务器上,如下图:

     

    安装步骤

    在安装TestLink之前应先完成以下步骤

    1. 安装环境:Webserver、php4和MySQL,安装方法参见这些应用软件的安装文档。

    我是在winXP下安装的,webserver是IIS,PHP5.1.2,MySql的版本是5.0.18

     IIS的安装就不多说了,下面主要讲讲PHP

    从5.0开始,PHP对MySql的支持需要手动配置

    将php_mysql.dll 和libmySQL.dll 文件拷贝到winnt\system32目录里,这两个文件可以在PHP安装目录里找到。
    编辑<windows>目录下php.ini,将;extension=php_mysql.dll前面的“;”去掉

    2. 将TestLink的安装文件复制到服务器上。

    3. 解压缩Testlink的安装文件。

    数据库安装

    自动安装(略)

    手工安装

    创建MySQL数据库

          CREATE DATABASE testlink CHARACTER SET utf8 COLLATE utf8_general_ci

    创建数据表

          # mysql -u <user> -p<password> <dbname> <<testlinkdir>/install/sql/testlink_create_tables.sql

    导入缺省数据

          # mysql -u <user> -p<password> <dbname> < <testlinkdir>/install/sql/testlink_create_default_data.sql

    也可以使用mysql客户端工具进行创建数据库的操作。

    在<testlinkdir>目录下创建config_db.inc.php文件

    <?php // Automatically Generated by TestLink Installer

    define('DB_TYPE', 'mysql');

    define('DB_USER', 'root');

    define('DB_PASS', 'root');

    define('DB_HOST', 'localhost');

    define('DB_NAME', 'testlink');

    ?>

     

    配置

    配置文件
    <testlink installation directory>/config.inc.php - 主要的配置文件,后面会做详细介绍

    <testlink installation directory>/config_db.inc.php - 包含访问数据库的所有配置参数。这个文件在安装或升级过程中产生。通常不必做手工修改

    <testlink installation directory>/cfg/<bug_tracking_system>.cfg.php
    /cfg/bugzilla.cfg.php
    /cfg/mantis.cfg.php
    /cfg/jira.cfg.php
      包含访问bugzilla、mantis或者jira等缺陷跟踪系统的配置参数。如果想从TestLink直接访问这些系统,需要手工修改这些文件,另外这个功能需要在config.inc.php文件中修改一个配置参数。


    必须修改的参数
    DB_SUPPORTS_UTF8
    MySQL4.1以前的版本不支持utf8,因此所有的页面使用ISO-8859-1字符集而数据则以latin1字符集存入数据库,令DB_SUPPORTS_UTF8 = FALSE;
    MySQL4.1及以后的版本,令DB_SUPPORTS_UTF8 = TRUE,使全部页面支持UTF-8而数据以utf8字符集存入数据库。


    可能需要修改的参数
    TL_LOG_LEVEL_DEFAULT
    日志记录的缺省级别,日志级别有(NONE、ERROR、INFO、DEBUG)。DEBUG级别只在开发或者与bug系统集成时使用

    TL_LOG_PATH
    日志文件的文件名和路径

    MAIN_PAGE_METRICS_ENABLED
    这个参数控制矩阵表格是否显示在主页上,允许“TURE”和“FALSE”两个值

    TL_INTERFACE_BUGS
    设置testlink和缺陷跟踪系统的接口。允许的值为:“NO”、“BUGZILLA”、“MANTIS”
    与BUGZILLA的接口配置参见cfg/bugzilla.cfg.php,支持0.19.1
    与MANTIS的接口配置参见cfg/mantis.cfg.php,支持1.0.0.a3

    TL_TREE_KIND
    这个参数用于配置testlink所使用的树形菜单,允许的值为“LAYERSMENU”、“JTREE”、“DTREE”
    LAYERSMENU 是缺省值;在这里,JTREE的性能最好;其他的两种树形菜单,可以记住上一次的位置。

    TL_IMPORT_LIMIT
    最大可以上传的文件的大小,单位是bytes。缺省值是200000。如果需要上传一个更大的文件,你可以加大这个值。另外还有一个参数:TL_IMPORT_ROW_MAX,用户规定导出文件一行最长可以有多长字符,10000字符已经足够了。

    $g_fckeditor_toolbar
    定义fckeditor工具条,你可以修改其内容。这个部件的更详细的信息参见fckeditor的主页(http://www.fckeditor.net/

    TL_TPL_CHARSET
    中文用户只需要设置:define('TL_TPL_CHARSET','gb2312');这样就定义了正确的html字符集。其他的语言可以不必修改这个参数

    TL_DEFAULT_LOCALE
    置缺省语言,必须是$g_locales的一个值。缺省值是en_GB。

    TL_COMPANY,TL_DOC_COPYRIGHT,TL_DOC_CONFIDENT
    用于文档抬头,如果不用写抬头,就置这些参数为空。

    自定义参数

    级联样式表
    可以编写你自己的级联样式表改变TestLink的外观。
    你必须修改以下定义:

    define('TL_LOGIN_CSS','gui/css/tl_login.css'); - 登录、登出的CSS文件

    define('TL_TESTLINK_CSS','gui/css/testlink.css'); - 主页的CSS文件

    define('TL_DOC_BASIC_CSS','gui/css/tl_doc_basic.css'); - 用于测试报告

    重要:CSS文件的路径是相对于<TestLink的安装目录>的路径,是相对路径

    如果要使用自己的CSS文件,建议进行如下操作:

    1. 在gui目录下创建一个新的目录,例如 “gui/css/my_css/”
    2. 复制testlink原文件到新的目录
    3. 按你的想法修改它们
    4. 编辑config.inc.php文件:
       // Original configuration
       //define('TL_LOGIN_CSS','gui/css/tl_login.css'); 
       //define('TL_TESTLINK_CSS','gui/css/testlink.css');
       //define('TL_DOC_BASIC_CSS','gui/css/tl_doc_basic.css');
         define('TL_LOGIN_CSS','gui/css/my_css/tl_login_acqua.css');
         define('TL_TESTLINK_CSS','gui/css/my_css/testlink_acqua.css');
         define('TL_DOC_BASIC_CSS','gui/css/my_css/tl_doc_basic.css');

     

    当产品、部件、分类、测试用例重名时的处理
     

    当从一个已经复制一个产品、部件、分类、测试用例时,经常会发生重名的情况。
    你可以配置如何处理复制:
    如果你设置$g_check_names_for_duplicates=TRUE,那么系统就会进行以下的检查

      1. 产品名是否唯一
      2. 产品下的部件名是否唯一
      3. 部件下的分类名是否唯一
      4. 分类下的测试用例名是否唯一

    一旦置$g_check_names_for_duplicates=TRUE,你可以配置如果进行操作,如果发现重名的情况,就使用$g_action_on_duplicate_name,选项如下:

    'allow_repeat':允许重名(可以和1.0.4、1.5.x兼容)
    'generate_new':生成新名称,将"$g_prefix_name_for_copy"的值和原名合并,成为一个新名字
    'block':返回一个错误

    例如:

    $g_action_on_duplicate_name='allow_repeat';
    $g_prefix_name_for_copy= strftime("%Y%m%d-%H:%M:%S", time());

    允许重复,并将当前时间以(年月日-时分秒)的格式做为原来的名字的前缀。

    测试计划和产品的关联
    从1.6版开始,当创建一个测试计划(Test Plan)时,缺省情况下测试计划会和当前所选择的产品相关联。这意味着你可以以产品为关键字过滤测试计划(Test Plan)。在1.6版本之前,Test Plan没有和指定的产品相关联,当从1.5.x升级到1.6时,安装程序不能将测试计划和产品相关联从而将测试计划的product ID项置为0。这样做将导致老的测试计划将不能被看到。要解决这个问题,必须添加以下参数:

    $g_show_tp_without_prodid=TRUE;

    你也可以通过在数据库中手工关联,以便使用以前的数据。

    通过产品过滤测试计划
    使用以下参数:

    $g_ui_show_check_filter_tp_by_product

    你可以:

    允许用户通过界面来使能测试计划过滤功能。$g_ui_show_check_filter_tp_by_product = TRUE时,在测试计划之前显示了一个复选框。
    $g_ui_show_check_filter_tp_by_product = FALSE时。强制测试计划的过滤,并且用户不能修改

    关键字管理
    如果不想为同一个产品创建相同的关键字:

    $g_allow_duplicate_keywords=FALSE;

    日期和时间本地化
    设置日期和时间的显示方式。使用两个关联的数组进行配置:$g_locales_date_format 和 $g_locales_timestamp_format.

    $g_locales_date_format = array(
    'en_GB' => "%d/%m/%Y", 'it_IT' => "%d/%m/%Y",
    'es_AR' => "%d/%m/%Y", 'es_ES' => "%d/%m/%Y",
    'de_DE' => "%d.%m.%Y", 'fr_FR' => "%d/%m/%Y",
    'pt_BR' => "%d/%m/%Y" );

    $g_locales_timestamp_format = array(
    'en_GB' => "%d/%m/%Y %H:%M:%S",
    'it_IT' => "%d/%m/%Y %H:%M:%S",
    'es_AR' => "%d/%m/%Y %H:%M:%S",
    'es_ES' => "%d/%m/%Y %H:%M:%S",
    'de_DE' => "%d.%m.%Y %H:%M:%S",
    'fr_FR' => "%d/%m/%Y %H:%M:%S",
    'pt_BR' => "%d/%m/%Y %H:%M:%S", );
     

    如果在上述数组中没有找到匹配的本地化格式,以下配置参数将被使用:$g_date_format 和 $g_timestamp_format

    例如:

    $g_date_format ="%d/%m/%Y";
    $g_timestamp_format = "%d/%m/%Y %H:%M:%S";

    从需求生成测试用例
    在创建需求SRS之后,可以选择为每个测试需求创建测试用例(部件和分类也同时被创建)

    使用配置参数:$g_reg_cfg,你可以配置:

    创建的部件的名字:$g_req_cfg->default_component_name="Component Created by Requirement - Auto";
    部件的范围:$g_req_cfg->scope_for_component="Component/Category/Test Cases generated from Requirements";
    创建的分类的名字:$g_req_cfg->default_category_name="TODO";
    分类的目标描述:$g_req_cfg->objective_for_category="Category/Test Cases generated from Requirements";
    分类的名字可以作如下配置:

    $g_req_cfg->use_req_spec_as_category_name=TRUE;
    将需求名称做为分类名称
    $g_req_cfg->use_req_spec_as_category_name=FALSE;
    那么$g_req_cfg->default_category_name将做为分类的名称
    使用自己的Smarty模板(GUI定义)
    使用自定义模板,要用到以下参数:$g_tpl

    $g_tpl['tcView']

    $g_tpl['tcSearchView']

    $g_tpl['tcEdit']

    $g_tpl['tcNew']

    $g_tpl['execSetResults']

    允许创建新的模板,而且新的模板采用不同于原始TestLink模板的名字,以避免在下次升级过程中被覆盖

    注意:不是所有的TestLink页面都可以进行这样的配置

    标准配置如下:

    $g_tpl['tcView'] = "tcView.tpl";
    $g_tpl['tcSearchView'] = "tcSearchView.tpl";
    $g_tpl['tcEdit'] = "tcEdit.tpl";
    $g_tpl['tcNew'] = "tcNew.tpl";
    $g_tpl['execSetResults'] = "execSetResults.tpl";

262/2<12
Open Toolbar