You are on page 1of 46

www.5etesting.

com

《每日E测》 目录
刊首语.........................................................2

第三期:2009 年 10 月 E测中国大型自动化测试沙龙报道.........3
如何构建成功的QA团队...........................4

关于SilkTest中引用操作符@的使用.......12

watir学习系列之二.................................14

CLI自动化测试初体验.............................18

报表数据的智能统计..................................24

循序渐进学测试.......... ...............................37

《QTP项目应用和进阶》样章选读...........42

征稿启事...................................................45

主办单位:E测中国

出版单位:《每日E测》编辑部

主编: 朱 伟

副主编: 裴明哲,韩 柳,俞戴龙

美工 :杨 冬

本期责任编辑:朱 伟

主页:www.5etesting.com

投稿:askwebmaster@5etesting.com

《每日 E 测》第三期 1 2009 年 10 月


www.5etesting.com

刊首语

——汗水与欣慰
10 月,丰收的 10 月,正如祖国 60 华诞那般,喜庆祥和。随着我们的《QTP 项目应用与

进阶》的出版和发行,E 测中国也在迅速的成长,队伍也在扩大。

10 月 18 日,在百年复旦,见证了我们第一次的沙龙,让 E 测中国和他的热心关注者进

行了一次零距离的交流,其间我们介绍了 E 测和 E 测第一本书,风过无息也进行了一次自动

化测试在企业中的普及的讲座,从自动化测试现状开始分析,我们遇到的问题和自动化测试

引入条件,我们测试框架的关注等方面尽享介绍和分享。最后各位专家和与会人员进行了热

烈的答疑。

通过本次沙龙,E 测又加入了很多热心的测试人员,他们踊跃的提供原创,我们的翻译

团队依然高质量的精品文章,加上《QTP 项目应用与进阶》的样章阅读,我们的 E 测 3 期,

更精彩。

我们的测试,我们的 E 测。

因为专注,所以专业

E 测中国
2009 年 10 月

《每日 E 测》第三期 2 2009 年 10 月


www.5etesting.com
E 测中国大型自动化测试沙龙报道
【Csdn 10 月 21 日 讯】10 月 18 日下午,上海复旦大学光华楼的一个会议室里,
一场气氛热烈的测试人员从业沙龙正在进行。该沙龙由《QTP 项目应用与进阶》的 5 名
作者(他们也是 E 测中国的核心团队成员)召集,目的在于加强测试工程师职业群体内部
的交流。

《QTP 项目应用与进阶》的 5 位作者是这次沙龙的召集人

沙龙上,来自方正软件(苏州)有限公司的测试总监朱伟做了名为自动化测试在测试项
目中的普及的讲演,集中探讨了自动化测试的国内现状,企业引入条件、实践中遇到的问
题和解决方案。

朱伟认为,尽管自动化测试普及到国内已有几年的时间了,但现阶段国内企业中自
动化测试还是出于起步阶段,水平也是参差不齐。而企业要想引入自动化测试,使自动化
测试真正为企业创造价值,最主要的困难在于相关人才的匮乏,特别是中高级人才如自动
化测试架构设计人才和自动化测试管理人才。合格的自动化测试高级人才不仅需要丰富的
测试经验,还要求懂开发,了解业务。

据来自昂讯咨询有限公司的猎头周女士透露,目前外资 IT 企业对有三年自动化测试
经验的工程师开价一般在 8K 到 15K。

然而,国内中高级测试人员还面临一个培养难,提升难的困境。由于对测试工具和
业务的依赖性较大,一般情况下,他们在遇到问题时,求助于外部成功的机遇不大。沙龙
上,与会的测试工程师们都表示要加强测试师群体内部的交流和分享,这样的职业沙龙应
该定期举行。

转自:http://news.csdn.net/a/20091021/214255.html

《每日 E 测》第三期 3 2009 年 10 月


www.5etesting.com
如何构建成功的 QA 团队

How to build a successful QA team


原作者: Sharath R Bhat
译者:Jeff, 黄启鲁, Testone, Wally

本文来源于作者 Sharath R Bhat 的一个帖子。


所谓伟大的测试团队是什么意思?
“拥有明星队员的团队是好团队,但没有一个明星队员的团队是一个伟大的团队”——无名
氏。
上述的引言使我们进入了伟大团队及其特性的讨论之中。这篇文章源于作者在不同团队
中的工作经历,对团队成员在时间非常紧迫和项目非常复杂的情况下的表现的观察。本文适
合于那些想寻求合适成员以求在项目中有出色表现的软件测试团队。
为什么软件测试团队有的成功而有的失败?
这问题有解决方案吗?答案究竟是“是”还是“否”,取决于成员如何向团队的共同目
标看齐,不应是抑制个人兴趣,而是对问题有一致认识而共事。
团队的成功也依靠带头人的领导特质——“船长”
本文目标是帮助软件测试工程师或是相信团队合作的人理解优秀团队的特质,并在自己
团队中培养这些特质。
从长远的角度看考虑,成功的团队依靠的不是被认为是“明星”的个人,而是组成这个
星群的全体,这样才能创造出伟大的团队。

伟大软件测试团队的特质 

初始阶段——问自己下列问题:

你们团队的新成员知道自己入选团队的原因吗?
团队新成员常常会为自己在团队中存在的价值而感到困惑。虽然你可能会说他/她不需
要知道目标,只要根据任务安排进行工作就可以了,这是很多高管的想法。但是清晰明确地
定义角色和职责可以帮助个人在更大的背景下理解这个项目。它包括工作相关内容、个人技
能以及早期定义的团队共同目标。这些将会对工作会有巨大的作用(帮助),因此也会改善
其质量。

领导权:

随着任务和团队规模的增加,项目的复杂性也随之增加,这时让一个领导者跟踪每个人
的任务情况是不太可能的。因此,一个解决办法就是下放权力给个人。然而,如果没有经过
深思熟虑,这种虚拟的权利经常表现为一种阻碍而非解决方案。仅仅委派给个人作为负责人,
而没有认真考虑过他/她是否能胜任不会带来预期的效果。

《每日 E 测》第三期 4 2009 年 10 月


www.5etesting.com
想表现的像一个负责人,他应该具有和领导者接近的思维方式和行使自己未来领导者职
责的自豪感。这些人会在促进团队团结一致的过程中发挥重要作用,而那些对团队漠不关心
的人则会毁了团队。负责人的职责不仅是给团队成员分配任务,而要以更开阔的视角认清手
上的任务及形势,给团队成员带来共识。当成员处理任务遇到困难时予以支持、鼓励,以同
伴而不是领导的身份纠正成员们的错误,提出建议,在适当时机采纳老员工的意见,这些都
有利于共同目标的实现。合作以及团队中牢固的相互依存感可以消除彼此间的相互指责,增
加学习与进步的机会。

团队中专职成员的知识

专职成员是指那些在相同项目或类似工作中投入大量时间的人。他们掌握大量关于项目
的知识,是团队的资源。通过合适的方法激励出他们的专业知识,从而使整个团队都会从中
受益。这些人应该在其他工作上表现勤奋而非自大。常言说:
“往昔成会滋生自满”。他们是
重要的成员,少了他们可能会影响到整个团队,但这不是唯一的准则。因为这也给了其他有
相同能力的人在这个位子上表现的机会。

激励——关键因素

激励不总是把大家聚集起来发表演说,而是抓住每一次机会将这些话单独说给每个成
员。每个成员都有独特的个性和工作方式。对 Test Leader 来说,这个工作要比“说”来的
复杂,因为它要求领导者不仅从分配任务的角度而且从整个项目的角度,去体会每个成员的
想法。积极正向的领导态度将会给团队注入强大的活力--这一点来源于在伟大测试团队中的
工作经验。如果领导者抱怨工作时间过长或坚持要求团队成员按无法实现的计划行事,你的
态度也会反映在你们的团队中。真正的领导者应该是这样的,尽管计划不合理,还是要给团
队成员注入信心,让他们相信自己的能力。同时,在背后为团队为这个计划所做的努力做出
解释和辩护,而不是推迟计划使得成员工作变得简单。

认可

每个人都希望自己的工作得到认可。当一个人因为工作受到奖励,领导者就有责任告诉
其他人获奖原因。在这个问题上,领导者的决定必须是公正的。它会使受到奖励的人得到团
队成员的尊重。团队成员们也会照这个样子去努力,最终团队也会从中获益。在一个虚职领
导的团队中,成员们的工作经常会因为领导者看不见而得不到肯定。这时虚职领导就应该明
确团队成员们工作中的成就和贡献。关心成员的工作,团队成员欢迎,团队成员愿意将来也
和他共事,这样的虚职领导将来就会成为真正的领导。

一对一面谈

经常可见在项目收尾时进行成员角色职责定义,并对成员进行评定。这是一个正常的流
程。但非正式的一对一面谈也会对这个流程起到促进作用。这些非正式面谈的话题应该是团
队成员不愿在小组会议上谈的,诸如成员未来的发展机会、对今后领导者或者负责人的确定,

《每日 E 测》第三期 5 2009 年 10 月


www.5etesting.com
以及在得到成员反馈以后,针对当下问题进行平等的沟通和交流。适时恰当地公布反馈结果
能够区分出这是把问题隐瞒的团队还是把问题看成一种机会的团队。团队表现不佳的责任通
常在于团队结构不佳而不是个人能力不够,当然还是要把个人送去培训来解决一些问题的。
如果团队成员感到他们为了得到奖励和认可而要相互斗争,他们就会保留一些可能对团队有
帮助的信息。当团队有了问题,高效的团队领导者首先把关注点集中在团队结构,而非个人
身上。

“不要告诉人们怎么做事,而是要告诉他们做什么,然后让他们的成就给你惊喜。” —— 乔
治·巴顿

结论 

创建一个成功的团队要考虑相当多的事情。关键词——团结一致、信任、尊重他人的意
见、主张以及无畏的行动,这些是伟大团队的要素,一般说来,这些对任何成功的团队都是
必需的。读完本文以后,看一下你的团队,问你自己:
“你工作在一个伟大的测试团队中吗?”
或者“你愿意尽一切努力来构造一个伟大的测试团队吗?”不要等了,下一秒就可以开始构
造“伟大的测试团队”了。
相逢是开始,相聚是过程,相持是成功。——亨利·福特

《每日 E 测》第三期 6 2009 年 10 月


www.5etesting.com

How to build a successful QA team


This a guest post from author “Sharath R Bhat”

What do we mean by a great software testing team?

“A team with a star player is a good team, but a team without one is a
great
team.” - Author unknown.

The above quote from Author leads us to discussion on great teams and its
characteristics. The article stems from experience gained while working
for different teams, observation of team members behavior under time
pressure coupled with complex nature of project.This holds good for
Software Testing team which finds prominence place in a project activities
and requires right mix of people for performing these activities.

Why does some software testing team fails and others succeed? Is there
any solution for this problem.The answer is “Yes”/”No” – depends on
how the team member aligns himself towards common goal of the team not
at the cost of suppressing his team members interest but working together
with common understanding of problem at hand.
The success also depends on leadership attributes possessed by Test Leads
–“Captain of ship”.

The objective of this article is to help software test engineers or any


person who believes in team work,to understand characteristics of high
performance team and how to cultivate them in their own teams.

Success of team in long run doesn’t depend on individual who is considered


“STAR” but does depends on all who form clusters of stars that makes
great team.

Characteristics of Great Software Testing Team

Initial stage - Ask yourself following question:

Does your new team member knows the reason he has been selected for the
team?

《每日 E 测》第三期 7 2009 年 10 月


www.5etesting.com
New members of the team are often puzzled about their presence in
team.Although you may argue that he/she need not know purpose and just
work on task assigned to him/her.This is assumption made by many higher
management people.By clearing defining the roles and responsibilities
helps individuals to understand the project in bigger context.That
includes the relevance of his/her job,skills of individuals that could
be contributed towards the projects,share common team goal which was
defined earlier.This does bring great commitment towards the work and
hence contributes towards its quality.

Ownership:

When project complexity increases in terms of tasks and team size, it would
not be possible to keep track of individuals tasks by single leader.Hence
the solution to this would be assigning Ownership to individuals. However
this virtual leadership often act as a impediment rather than solution
if not considered appropriately. Mere appointment of individual as Owner
without considering a serious thought of whether he/she could manage their
team would not bring desired result.

Individuals acting as owners should have mindset which matches leaders


mindset and the pride on their part to act as future leaders. These are
people who could make difference by carrying along with them their team
members and the same people by showing Indifferent attitudes towards their
team will disintegrate the team. The task of owners is not merely
restricted to assigning task to team members but to understand task at
hand, situation at much broader perspective and bringing common level of
understanding among their team members. Support their team member at the
time of difficulty of handling task,word of encouragement,correcting
their mistakes by not acting as lead but as a peer,acting up on ideas or
taking advice for appropriate situation from experienced members would
certainly benefit towards shared goal. Collaboration and a solid sense
of interdependency in a team will defuse blaming behavior and stimulate
opportunities for learning and improvement.

Knowledge of seasoned players in the team

The term-seasoned players indicates the person who has spent considerable
amount of time in same project or similar kind of work. They are resources
who have vast knowledge about project. By channeling their knowledge in
proper way,the entire team could be benefited.These individual should
show an act of diligence towards others work rather than arrogance.It is

《每日 E 测》第三期 8 2009 年 10 月


www.5etesting.com
commonly said “Past success breeds arrogance”. They are higher
performers who’s absence could be felt in a team but it should be not
sole criteria as there are equal chance for others who has similar caliber
to act at this position.

Motivation – Key Factor

Motivation is not all about giving speech when members of team are
assembled but rather every effort should be made to tailor these speech
to address each individual. This means each of team member has unique
qualities and unique working style. This task is rather complex than said
for Test Lead since it will bring effort on leaders part to sense the team
member’s feeling not only to task assigned to members but also on project
as whole. Positive attitude of lead will energies team – This is quoted
from experience working for one of great test team.If the leader complains
about long working hours or insisting the team members to work at schedule
which is impossible to meet, your team will reflect your attitude. He/She
is true leader who inspite of unreasonable schedule instills the
confidence among team members to believe in their abilities and at the
same time working at the background on his part to justify his team members
effort working on unreasonable schedule but bring an extension to these
schedule to make his team members job simple.

Recognition

Everyone likes to be recognized for his/her work.When an individual is


awarded for his/her work,the responsibility of team lead should bring
reason for individual recognition in front of others. The team lead
decision for these kind of task should be impartial.This does bring great
respect for the awarded individual by members in the team. They would be
acting on similar grounds and ultimately team benefits from their
collective response. Very often that members working for virtual leader
often are not recognized since due to zero visibility to the leader of
team. It is virtual leader who has to bring on table the
accomplishment,contribution done by team member towards their task.This
indicates that virtual leader is future leader who does take care of
members of his team and well received by members of his team to whom they
always wanted to be associated in future.

《每日 E 测》第三期 9 2009 年 10 月


www.5etesting.com
One-One basis Meeting

It is often seen that roles and responsibilities for the members are
defined and assessment is done at the end of project.Agreed that it is
formal process.But informal talk like One – One basis adds to this formal
process as well. These informal meeting should address issues at present
whom members wont feel like conveying during group meeting, future
opportunities for members, identifying future leaders/owners of the team
and equally acting on issues at hand after feedback from team
members.Timely and appropriately delivered feedback can make the
difference between a team that hides mistakes and a team that sees mistakes
as opportunities. The responsibility for poor performance is usually a
function of the team structure rather than individual incompetence; yet,
it is individuals who are sent to training programs for fixing. If team
members feel like they are pitted against one another to compete for
rewards and recognition, they will withhold information that might be
useful to the greater team. When a team has problems, the effective team
leader will focus on the team’s structure before focusing on individuals.

“Don’t tell people how to do things, tell them what to do and let them
surprise you with their results.” - George Patton

Conclusion

There are plenty of things to be considered while building successful


team.The key words – Unity,Trust,Respect for others opinion and acting
without fear are ingredients for great test team,in general for any
successful team. After reading this article look at your team and question
yourself “Are you working in great test team” or “ Will you make every
effort to build great test team”.Then don’t wait,try next second to
build “Great Software Testing Team”.

“Coming together is a beginning, Keeping together is progress, Working


together is success”. - Henry Ford

Over To You!

What do you think from your experience, What are your characteristics for
building a successful QA team?

《每日 E 测》第三期 10 2009 年 10 月


www.5etesting.com
About author: Sharath R. Bhat is a Software Test Engineer at Torry Harris
Business solutions, Bangalore and has more than three years experience
in software Testing. An ISEB/ISTQB Certified Test Engineer and worked in
Telecom, Finance and Healthcare domains. Areas on technical expertise
include testing Web Applications, Client-Server, Data Warehousing and
Middleware applications built using “Kabira”.

《每日 E 测》第三期 11 2009 年 10 月


www.5etesting.com
关于 SilkTest 中引用操作符@的使用
作者:蓝天伟

在 SilkTest 中有一个非常有用的操作符@,其类似于指针,主要的作用是进行引
用调用,所以也称引用操作符。我们可以用它来对函数,对象,记录等进行引用
调用,通过@这个操作符的使用,我们可以写出更具灵活性,高复用性的自动化
测试脚本。这里我对它的使用方法进行一个简单的介绍,不足之处还请大家指正。
1.用于函数的引用调用

[-] VOID DoAction(STRINGsFunctionName, STRING sArg)

[] @( sFunctionName)( sArg)

在此例子中,@的作用是将字符串类型的函数名转换成对函数的直接调用,可以
实现对函数的动态调用,从而对函数灵活控制和复用。

2.用于对象的引用调用
[-] VOID MyFunction (STRING sFieldName, STRING sNewValue)

[ ] wMainWin.@( sFieldName).SetText(sNewValue)

在此例子中,@的作用是将字符串类型的对象名转换成对对象的直接引用,可以
实现对对象的灵活操作,减小代码的复杂度。[提示:这里的对象名是对象的逻
辑名]

3.用于记录/枚举型数据的引用调用
[-] VOID MyFunction (STRING sFieldName, STRING sNewValue)

[ ] wMainWin.@( sFieldName).SetText(sNewValue)
该例子实现了对记录的直接引用,一般用的不是很多。

以上是@在SilkTest中的一些主要使用方法,而其中函数引用和对象引用运用
的比较多。当下次我们再写一堆复杂的脚本时,或许我们可以考虑下是否我们可
用@让我们的脚本更加灵活,更加高效呢。

《每日 E 测》第三期 12 2009 年 10 月


www.5etesting.com
最后如果大家有什么SilkTest方面的问题或想法,欢迎大家和我交流探讨,共同
提高。本人的MSN:lantian.wei@hotmail.com, 或登陆本人的个人网站
—www.lantianwei.com

《每日 E 测》第三期 13 2009 年 10 月


www.5etesting.com
watir 学习系列之二
作者:dotlink

watir学习系列--Excel操作

加载 win32ole 文件: require ‘win32ole’

创建应用对象: excel = WIN32OLE.new("Excel.Application")

新建 Excel 文件: excel.workbooks.Add #默认 Excel 文件

excel.workbooks.Add 1 #单工作表

创建 Excel 文件对象: wb = excel.ActiveWorkBook

创建工作表对象: sheet = web.ActiveSheet

打开 Excel 文件: excel.workbook.open "文件路径名.xls"

取单元格值: str = sheet.Cell[1][2].Value

单元格赋值: sheet.Cells[3][6].value = "test"

保存 Excel 文件: wb.Save 或 wb.SaveAs "文件名"

退出 Excel: excel.quit

watir学习系列--文件操作(创建文件)
class CreateFile #定义类,类名首字母需大写
def rows_to_file(rows) #定义类方法
@@data_rows = rows #定义类变量,无需申明变量类型
@@content = ''
@@filename = "c:\\filename.txt" #定义文件路径
@@data_rows.each do |x| #遍历数组
@@content = @@content + x.to_s + ‘-‘ #to_s:转换为字符串
end
#写文件,参数说明:"a+" 在原有内容后追加数据 "w" :先将文件清空,再写入
File.open( @@filename, "a+" ) do |file|
file.puts @@content
end
end
end

《每日 E 测》第三期 14 2009 年 10 月


www.5etesting.com
rows = ['a','b','c']
CreateFile = CreateFile.new

watir学习系列--eclipse环境搭建

一、JDK 安装及配置:

(1)默认安装 JDK,路径如:C:"jdk1.5.0_11

JDK 下载地址 http://java.sun.com/javase/downloads/index.jsp

(2)配置环境变量:

打开"我的电脑"右键属性--"高级"--"环境变量"页面,

在系统变量里,添加变量 JAVA_HOME,变量值:C:"jdk1.5.0_11

在系统变量里,添加变量 CLASSPATH,变量值:.;%JAVA_HOME%"lib

在系统变量里,在变量 Path 变量值前增加:%JAVA_HOME%"bin;

二、Eclipse 下载安装:

下载地址: http://www.eclipse.org/downloads/

安装方法:将下载的 Eclipse 解压到 c:"eclipse

三、RDT 安装配置 :

下载地址:http://sourceforge.net/project/showfiles.php?group_id=50233

安装方法:将 RDT 解压到 eclipse 目录:c:"eclipse

《每日 E 测》第三期 15 2009 年 10 月


www.5etesting.com
安装说明: http://rubyeclipse.sourceforge.net/download.rdt.html

相关配置方法: http://os.51cto.com/art/200605/26177.htm

Watir学习系列--环境配置

一、安装 ruby:

ruby 下载地址:http://www.ruby-lang.org/zh_CN/downloads/

下载 Windows 一步安装版,默认安装,安装成功后可以运行命令查看版本:ruby –v

二、安装 watir:

1.运行命令先更新 gem:gem update --system

2.运行命令安装 watir: gem install watir

三、安装 oci

ruby ruby-oci8-0.1.16-mswin32.rb

下载地址: http://rubyforge.org/frs/download.php/41043/ruby-oci8-1.0.3-mswin32.rb

《每日 E 测》第三期 16 2009 年 10 月


www.5etesting.com
四、安装 DBI

下载地址: http://rubyforge.org/frs/download.php/33960/dbi-0.2.0.zip

安装步骤:

1.将下载的 DBI 解压到 C:"dbi

2.分别在命令行中运行下面命令安装:

cd c:"dbi
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

五、安装IE Developer Toolbar(IE插件,可选)

下载地址:

http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb

3e-2d5e1db91038&displaylang=en

六、WatirRecorder++(watir 脚本录制工具)

下载:http://www.hanselman.com/blog/content/binary/WatirRecorder_Setup_lite.msi

《每日 E 测》第三期 17 2009 年 10 月


www.5etesting.com

CLI 自动化测试初体验

作者:哈日格

首先解释一下 CLI,CLI 就是命令行的意思。目前各大路由器、交换机的厂

商都会提供 CLI 的配置界面,用户可以通过 CLI 对于网络交换的设备进行配置。

那在硬件设备上面所配置的软件环境,就需要对 CLI 进行测试,往往从单元测试

到系统测试,最终的验收测试,需要经过 N 多版本的验证和测试,这对于一个测

试人员来说,重复的执行这些命令行显得枯燥乏味,所以今天我们就来探讨一下

CLI 自动化测试的话题,如下内容仅仅针对 CLI 的提示语、帮助等信息进行的有

效性测试,如果有喜欢继续研究的,可以在我的基础上深入研究,使得 CLI 的自

动化测试更加成熟、更加稳健。

一、配置环境如下:

软件:SecureCRT v6.2.3

硬件:思科交换机

二、文档设计:

Level1:一级模块。

Level2:二级模块。

CLI_Command:要执行的命令行。

《每日 E 测》第三期 18 2009 年 10 月


www.5etesting.com
Expected Result:预期结果,这个 CLI 提示是提前准备好的,一般来源于 SRS

(需求规格说明书)。

CLI Prompt:实际运行完毕的提示结果,会通过执行 CLI_Command,将 CLI 中显

示的最终结果写入到该列。

特别说明:该列的 ID 为:5,在每轮系统测试之前需要变更文件 Para.ini 的 ID

的值,以方便正确写入到 Execl 相应列的结果值。

Yes/No:执行是否通过,比较 CLI Prompt 与 Expected Result 是否一致,如果

一致就显示 Pass、否则显示 Fail。

ST1 Result:下面包含的是系统测试第一轮测试结果。

三、脚本设计:

1.文件 Para.ini:ID 记录 CLI Prompt 该列数,在只有新的一轮系统测试开

始的时候才改

变该值。ExcelPath 记录 Excel 模板所在的路径,方便文件夹变更。

[参数配置]

ID=7

ExcelPath=C:\Auto_Result

2、AUTO_CLI.vbs

该脚本也就是要运行的脚本文件,可以直接在SecureCRT v6.2.3 中选择

Run…,

打开该脚本进行运行。脚本中代码如下:
#$language = "VBScript"
#$interface = "1.0"
'**********************************************************
'作者:E 测工作室

《每日 E 测》第三期 19 2009 年 10 月


www.5etesting.com
'功能描述:主函数,驱动运行命令
'输入参数:无
'输出参数:ActCol
'**********************************************************
Dim j,Row1
Sub Main
Dim c()
Row1 = GetIni("参数配置","ID","..\Auto_Result\Para.ini")
Excel_Path = GetIni("参数配置","ExcelPath","..\Auto_Result\Para.ini")
Call GetActCol(b,Excel_Path &"\Crt_CLI_CheckList.xls")
'Msgbox Cstr(j)
for i = 1 to j-3
crt.Screen.Send b(i) & chr(13)
crt.screen.WaitForString "-system]"
screenrow = crt.Screen.CurrentRow
cpustr = crt.Screen.Get(screenrow-2, 1, screenrow-2, 110)
ReDim Preserve c(i)
c(i) = cpustr
'Msgbox cpustr
Next
Call WriteReport(c,Excel_Path &"\Crt_CLI_CheckList.xls")

End Sub

'**********************************************************
'作者:E 测工作室
'功能描述:从 Excel 中查找 Actual Result 的列
'输入参数:无
'输出参数:ActCol
'**********************************************************
Function GetActCol(b,ExcelPath)
Dim Obj,Look,Sheet,a()
'创建 Excel 应用程序对象
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = false

'打开 Excel 文件
Set Look = oExcel.Workbooks.Open(ExcelPath)
Set Sheet = Look.Worksheets("CLI")

j=4
'判断 CLI_Command 中标志位<#>
Do while CLI_Command<>"<#>"
CLI_Command = Sheet.cells(j,3)

《每日 E 测》第三期 20 2009 年 10 月


www.5etesting.com
if CLI_Command<> "<#>" then
ReDim Preserve a(j)
a(j-1) = CLI_Command
End if
j = j+1
Loop
oExcel.DisplayAlerts = False
Look.Close(True)
oExcel.Quit
Set oExcel = nothing
b=a
End Function

'**********************************************************
'作者:E 测工作室
'功能描述:将结果的数组存放到 Excel 中
'输入参数:C:数组
' ExcelPath:Excel 存放路径
'输出参数:Excel
'**********************************************************
Function WriteReport(c,ExcelPath)
Dim Obj,Look,Sheet
'创建 Excel 应用程序对象
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = false

'打开 Excel 文件
Set Look = oExcel.Workbooks.Open(ExcelPath)
Set Sheet = Look.Worksheets("CLI")
For k = 4 to j-2
Sheet.cells(k,Cint(Row1)) = c(k-1)
Next
oExcel.DisplayAlerts = False
Look.Close(True)
oExcel.Quit
Set oExcel = nothing
End Function
'**********************************************************
'作者:E 测工作室
'功能描述:从 INI 文件读取配置参数
'输入参数:strPrimary:根参数组名称
' strSubKey:参数名称
' strIniFilePath:INI 文件路径
'输出参数:Excel

《每日 E 测》第三期 21 2009 年 10 月


www.5etesting.com
'**********************************************************
Function GetIni(strPrimary, strSubKey, strIniFilePath)
Dim fso, Myfile, intCount, strState
Set fso = CreateObject("Scripting.FileSystemObject")
Set Myfile = fso.OpenTextFile(strIniFilePath, 1, False, False)
'set SourceFolder = fso.GetFolder(".\Auto_Result")
'Msgbox SourceFolder
With Myfile
Do Until .AtEndOfStream
If intCount = 0 Then
If .ReadLine = "[" & strPrimary & "]" Then
intCount = 1
End If
Else
strState = .ReadLine
If UCase(Left(strState, Len(strSubKey & "="))) = UCase(strSubKey &
"=") Then
GetIni = Right(strState, Len(strState) - Len(strSubKey & "="))
Exit Do
End If
End If
Loop
.Close
End With
Set Myfile = Nothing
Set fso = Nothing
End Function

四、运行脚本:

直接在SecureCRT v6.2.3 中选择Run…

运行结果如下:

五、总结:

《每日 E 测》第三期 22 2009 年 10 月


www.5etesting.com
该方法有效的解决了 CLI 中提示语的测试工作,而且每次只需要运行脚本即

可,方便快捷,能够有效保证提示语的正确性。如果有特别感兴趣的,还可以演

讲一下功能性的方便测试,比如配置一个 Vlan,看是否已经配置成功。希望大

家看了能有启发,进一步拓展。

《每日 E 测》第三期 23 2009 年 10 月


www.5etesting.com
软件测试管理 ------

报表数据的智能统计

作者:韩柳

目前,很多公司使用 Excel 来对测试计划、用例、报告等文档进行管理,其强大的表格

功能和多角度的图表带给我们数据展示的全面性。

在项目比较庞大的情况,如进入到每日构建的迭代测试中,每天需要出具一个测试报告

用于对当前开发进度、BUG 情况、测试进度、风险管理等数据的统计。

虽然这些数据在团队推进项目的过程已经由每位执行人员分别记录,但这些数据仅仅是

原始数据,用于 BUG 管理的、代码管理的、风险管理的数据还需要二次收集、计算、统计,

以达到形成测试报告、图表状态的目的。即便不是这样紧迫的报告周期,对于我们的测试及

开发管理工作也提出了效率及准确性的挑战。

例如:使用 QC、TD 等管理工具,其 BUG 管理功能可以对具体的信息、权限等进行管理,

如果想实时的得到一张这样关于 BUG 的统计报表进行工作报告,就不太容易了。

模块一
待 待分 已 非 不 待 修 撤 重 延 顺 分 遗
日期 bug 总数 改 配 改 错 改 置 正 销 复 迟 延 歧 留
2009-10-1 783 221 22 498 0 0 4 1 0 0 2 0 0 35
A 16 8 2 6 0 0 0 0 0 0 0 0 0 0
B 96 30 2 60 0 0 1 0 0 0 0 0 0 3
C 630 170 15 416 0 0 3 1 0 0 2 0 0 23
D 41 13 3 16 0 0 0 0 0 0 0 0 0 9
模块二
待 待分 已 非 不 待 修 撤 重 延 顺 分 遗
日期 bug 总数 改 配 改 错 改 置 正 销 复 迟 延 歧 留
2009-10-1 783 221 22 498 0 0 4 1 0 0 2 0 0 35
A 16 8 2 6 0 0 0 0 0 0 0 0 0 0

《每日 E 测》第三期 24 2009 年 10 月


www.5etesting.com
B 96 30 2 60 0 0 1 0 0 0 0 0 0 3
C 630 170 15 416 0 0 3 1 0 0 2 0 0 23
D 41 13 3 16 0 0 0 0 0 0 0 0 0 9

……

通常我们会进行手工填写,每个表格都需要填写一次,聪明些的管理者会使用 Excel

的公式进行总数计算。但这避免不了填写的麻烦及耗时。同时手工填写又有准确性风险的问

题。

使用 Excel 可扩展开发的宏,可以轻松的应对这些问题。真正达到一键完成。

实现步骤如下:

1. 使用 BUTTON 控件做为报表生成的触发事件。

2. 连接存储 BUG 的数据库。

3. 设计 SQL 语句,从数据库中计算获取报表中所需数据。

4. 通过 VBA 程序及 EXCEL 公式对报表单元格的逻辑运算,在报表中对应的单

元格坐标写入数据。

5. 自动形成报告。

对 Excel 的菜单/工具栏鼠标右键,选择控件工具箱。如下图。

《每日 E 测》第三期 25 2009 年 10 月


www.5etesting.com

弹出如下图的控件工具箱。

选择红色框中的按钮,再点击 Excel 文档中的任意区域,则生成 button 控件。

可以使用此按钮作为报表生成的触发事件。

通过对此控件 Caption 属性的修改,可以改变此按钮的显示名称。

《每日 E 测》第三期 26 2009 年 10 月


www.5etesting.com

如图,改变 Caption 属性,按钮从默认的名称变成了“生成”。

对此按钮鼠标右键,选择查看代码。

《每日 E 测》第三期 27 2009 年 10 月


www.5etesting.com

弹出 VBAProject 程序开发环境。

可在这个按钮的单击事件中进行 VBA 程序的开发:

Private Sub CommandButton_Click()

End Sub

由于每个公司所应用的报告及 BUG 管理数据库不尽相同,因此,笔者总结了一些 VBA

应用于测试工作文档常用的函数及方法。读者可以在真实使用中灵活应用。

应用说明 实现方法

连接 Oracle Dim cn As ADODB.Connection


数据库 Set cn = New ADODB.Connection
cn.Open "Provider=MSDAORA.1;server=10.254.1.189; Data
Source=BUGBASE;User ID=bugbase;Password=bugbase;Persist
Security Info=True"

' 通过表或者查询创建数据集
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient

'SQL 语句

《每日 E 测》第三期 28 2009 年 10 月


www.5etesting.com
rs.Open "select *** from *** where ***", cn, adOpenKeyset,
adLockOptimistic
data = rs.GetString

Worksheets("Sheet1").Range("A1").Cells = data
' 关闭数据集和数据连接
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

连接 sql Dim i As Integer, j As Integer, sht As Worksheet 'i,j 为整数变量;sht 为


server 数据 excel 工作表对象变量,指向某一工作表
库 Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据
库信息;请先添加 ADO 引用
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strCn As String, strSQL As String '字符串变量

strCn =
"Provider=sqloledb;Server=10.1.1.186;Database=a;Uid=sa;Pwd=sa;"
'定义数据库链接字符串

'下面的语句将读取数据表数据,并将它保存到 excel 工作表中:画两张表想


像一下,工作表为一张两维表,记录集也是一张两维表
strSQL = "select BUGID from b where BUGID = 002" '定义 SQL 查询命
令字符串
cn.Open strCn '与数据库建立连接,如果成功,返回连接对象 cn
rs.Open strSQL, cn '执行 strSQL 所含的 SQL 命令,结果保存在 rs 记录集对
象中
i=1
Set sht = ThisWorkbook.Worksheets("sheet1") '把 sht 指向当前工作簿
的 sheet1 工作表
Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列操作
sht.Cells(i, 1) = rs("BUGID") '把当前记录的字段 1 的值保存到
sheet1 工作表的第 i 行第 1 列
'sht.Cells(i + 1, 2) = rs("name") '把当前字段 2 的值保存到 sheet1 工
作表的第 i 行第 2 列
MsgBox rs("BUGID")
'MsgBox (rs("name"))
rs.MoveNext '把指针移向下一条记录
i=i+1 'i 加 1,准备把下一记录相关字段的
值保存到工作表的下一行
Loop '循环

《每日 E 测》第三期 29 2009 年 10 月


www.5etesting.com
rs.Close '关闭记录集,至此,程序将把某数据表的字段 1 和字段 2 保存
在 excel 工作表 sheet1 的第 1、2 列,行数等于数据表的记录数

cn.Close '关闭数据库链接,释放资源
删除文件 Kill ("c:\temp.txt")
复选框的选 If CheckBox1.Value = True Then
择判断 MsgBox "选中"
Else
MsgBox "未选"
End If
获得当前页 MsgBox ActiveSheet.UsedRange.Rows.Count
最大行、最大 MsgBox ActiveSheet.UsedRange.Columns.Count

获得各种返 返回应用程序完整路径
回路径 Application.Path

返回当前工作薄的路径
ThisWorkbook.Path

返回当前默认文件路径:
Application.DefaultFilePath

Application.ActiveWorkbook.Path 只返回路径
Application.ActiveWorkbook.FullName 返回路径及工作簿文件名
Application.ActiveWorkbook.Name 返回工作簿文件名
将表的某范 Private Sub CommandButton1_Click()
围数据导入 syspath = "C:\Documents and Settings\Administrator\桌面\111.xls"
到另一个表
中 Set excelApp = CreateObject("excel.application")
Set excelBook = excelApp.Workbooks.Open(syspath)
Set excelSheet = excelBook.Worksheets("sheet1")
Worksheets(1).Range("B2:D5").Select
Selection.Copy
Sheets("Sheet2").Select
Worksheets(2).Range("A1").Select
ActiveSheet.Paste

excelBook.Close
Set excelApp = Nothing
Set excelBook = Nothing
Set excelSheet = Nothing
End Sub
判断某表 Private Sub workbook_open()

《每日 E 测》第三期 30 2009 年 10 月


www.5etesting.com
(temp)是否 Dim ss As Worksheet
存在,存在则 Dim i As Integer
删除 i=0
For Each ss In Worksheets
If ss.Name = "temp" Then
Application.DisplayAlerts = False
Sheets("temp").Select
ActiveWindow.SelectedSheets.Delete
End If
i=i+1
Next
End Sub
插入多行 Sub InsertMultipleRows()
' 在当前选择的单元格或行之上插入多行
Dim NewRows As Long
Dim CurrentRow As Long

' 检查当前选择的是否为行或单元格
If UCase(TypeName(Selection)) <> "RANGE" Then
MsgBox "请选择行或单元格,以便在其上方插入行。", _
vbInformation
Exit Sub
End If

' 让用户输入要插入的行数
NewRows = Application.InputBox("请输入要插入的行数", _
"插入多行", 1, , , , , 1)

' 如果行数为 0 或取消


If NewRows <= 0 Then Exit Sub

' 插入相应数量的行
Rows(Selection.Cells(1).Row & ":" & _
Selection.Cells(1).Row + NewRows - 1).Insert
Shift:=xlShiftDown
End Sub
插入多列 Sub InsertMultipleColumns()
' 在当前选择的单元格或列的左方插入多列
Dim NewColumns As Long
Dim CurrentRow As Long

' 检查当前选择的是否为列或单元格
If UCase(TypeName(Selection)) <> "RANGE" Then

《每日 E 测》第三期 31 2009 年 10 月


www.5etesting.com
MsgBox "请选择行或单元格,以便在其上方插入行。", _
vbInformation
Exit Sub
End If

' 让用户输入要插入的列数
NewColumns = Application.InputBox("请输入要插入的列数", _
"插入多列", 1, , , , , 1)

' 如果列数为 0 或取消


If NewColumns <= 0 Then Exit Sub

' 插入相应数量的列
For i = 1 To NewColumns
Columns(Selection.Cells(1).Column).Insert
Shift:=xlShiftToRight
Next
End Sub
打开就触发 在 ThisWorkbook 模块中写 workbook_open 这个事件,在此事件中写代
宏,运行代码 码。
Private Sub workbook_open()
MsgBox "4556"
End Sub
显示活动工 MsgBox "当前活动工作簿是" & ActiveWorkbook.Name
作簿名称
保存活动工 Activeworkbook.Save
作簿
保存所有 For Each W in Application.Workbooks
打开的工作 W.Save
簿关闭 EXCEL Next W
Application.Quit
将网格线设 ActiveWindow.GridlineColorIndex = 5
置为蓝色
将工作表 Sheet1.Visible = xlSheetVeryHidden
sheet1 隐藏
将工作表 Sheet1.Visible = xlSheetVisible
Shtte1 显示
单击某单元 Private Sub Worksheet_SelectionChange(ByVal Target As
格,该单元格 Excel.Range)
所在的行以 If Target.Row >= 2 Then’第二行以下的区域
蓝色背景填 On Error Resume Next
充,字体颜色 [ChangColor_With1].FormatConditions.Delete
为白色 Target.EntireRow.Name = "ChangColor_With1"

《每日 E 测》第三期 32 2009 年 10 月


www.5etesting.com
With [ChangColor_With1].FormatConditions
.Delete
.Add xlExpression, , "TRUE"
.Item(1).Interior.ColorIndex = 5
.Item(1).Font.ColorIndex = 2
End With
End If
End Sub
使窗体在启 Private Sub UserForm_Initialize()
动的时候自 Application.WindowState = xlMaximized
动最大化 With Application
Me.Top = .Top
Me.Left = .Left
Me.Height = .Height
Me.Width = .Width
End With
End Sub
不保存工作 Application.DisplayAlerts = False
簿退出 EXCEL Application.Quit
使窗体的关 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As
闭按纽不好 Integer)
用 If CloseMode = vbformcontrdmenu Then
MsgBox "请用关闭按钮关闭窗口!!", 64, "提示"
Cancel = True
End If
End Sub
使窗体在 3 Private Sub UserForm_Activate()
秒后自动关 Application.Wait Now + TimeValue("00:00:03")
闭 UserForm1.Hide
End Sub
启动窗体的 Private Sub UserForm_Activate()
时候自动使 Label1.Caption = Sheets("sheet1").Cells(3, 8)
Label1 显示 End Sub
Sheet1 工作
表 3 列,8 行
的内容
让按纽 CommandButton1.Enabled = False
CommandButt
on1 在窗体上
以不可用状
态显示
让按纽 CommandButton10.Visible = False
Commandbutt

《每日 E 测》第三期 33 2009 年 10 月


www.5etesting.com
on1 在窗体上
以隐藏方式
存在
点击 Sheets("工资").Select
Commandbutt
on1 按纽进
入”工资”
工作表
在 Textbox1 Private Sub TextBox1_Change()
中输入数据, For X = 1 To Application.CountA(Sheets("工资").Range("a:a"))
窗体可显示 If Sheets("工资").Cells(X, 1) = TextBox1.Text Then’在工资表第一列查找与
出”工资” Textbox1 输入相符的项
工作表中与 Label2.Caption = Sheets("工资").Cells(X, 2)’在 Label2 中显示
输入内容关 Textbox1 数据所在的第二列的数据
联的项 Label7.Caption = Sheets("工资").Cells(X, 3) ’在 Label2 中显示
Textbox1 数据所在的第三列的数据 End If
Next
End Sub
使 EXCEL 启 Private Sub Workbook_Open()
动的时候自 Application.WindowState = xlMinimized’最小化
动最小化/最 Application.WindowState = xlMaximized’最大化
大化 End Sub
在 Label25 Label25.Caption = Val(TextBox12.Text) * Val(Label14.Caption)
以数字的形
式显示
TextBox12×
Label14 的结

单选按纽名 OptionButton6.Caption = Sheet6.Name
与 Sheet6 工
作表名相同
”登陆”窗 登陆.Show’显示
体的显示,隐 登陆.Hide’隐藏

使窗体的标 (1)插入类模块” CFormChanger” 代码如下:
题栏不显示 Private Declare Function FindWindow Lib "user32" Alias
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName
As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As
Long
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long,

《每日 E 测》第三期 34 2009 年 10 月


www.5etesting.com
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As
Long) As Long
Private Const GWL_STYLE As Long = (-16)
Private Const WS_CAPTION As Long = &HC00000
Dim hWndForm As Long
……………………………………………………………………………………
………………………..
Public Property Set Form(oForm As Object) '29
If Val(Application.Version) < 9 Then
hWndForm = FindWindow("ThunderXFrame", oForm.Caption)
Else
hWndForm = FindWindow("ThunderDFrame", oForm.Caption)
End If
SetFormStyle
End Property
……………………………………………………………………………………
………………………….
Private Sub SetFormStyle()
Dim iStyle As Long, hMenu As Long, hID As Long, iItems As Integer
iStyle = GetWindowLong(hWndForm, GWL_STYLE)
iStyle = iStyle And Not WS_CAPTION
iStyle = iStyle Or WS_THICKFRAME
SetWindowLong hWndForm, GWL_STYLE, iStyle
DrawMenuBar hWndForm
End Sub
(2)在所在窗体代码里声明
Dim oFormChanger As New CFormChanger
(3).在窗体的 Activate 事件中插入代码
Set oFormChanger.Form = Me
Me.SpecialEffect = fmspecia1EffectRaised

单击某单元 Private Sub Worksheet_SelectionChange(ByVal Target As


格,该单元格 Excel.Range)
所在的行与 If Target.Row >= 2 Then’第二行以下的所有列
列都以蓝色 On Error Resume Next
背景填充 [ChangColor_With2].FormatConditions.Delete
[ChangColor_With3].FormatConditions.Delete
Target.EntireRow.Name = "ChangColor_With2"
Target.EntireColumn.Name = "ChangColor_With3"
With [ChangColor_With2].FormatConditions
.Delete
.Add xlExpression, , "TRUE"

《每日 E 测》第三期 35 2009 年 10 月


www.5etesting.com
.Item(1).Interior.ColorIndex = 5
End With
With [ChangColor_With3].FormatConditions
.Delete
.Add xlExpression, , "TRUE"
.Item(1).Interior.ColorIndex = 5
End With
End If
End Sub
显示动
态时间 (1)插入窗体 Userform1 及 Label1 并在窗体声明中插入
Option Explicit
Public nextRun As Date
(2)在窗体 Activate 事件中插入
Showtime
(3)在窗体 QueryClose 事件中插入
Application.OnTime nextRun, "showtime", schedule:=False
(4)插入模块 Module1 并输入
Option Explicit
Sub showtime()
UserForm1.Label1 = Now
UserForm1.Repaint
DoEvents
UserForm1.nextRun = Now + 1 / 86400
Application.OnTime UserForm1.nextRun, "showtime"
End Sub
加载 ComboBox1.AddItem "收入型"
Combobox1 选 ComboBox1.Additem “支出型”

使 Textbox1 TextBox1.SetFocus
自动程输入
状态显示(有
光标闪动)
打开 C 盘目 Shell "explorer.exe C:\", 1

《每日 E 测》第三期 36 2009 年 10 月


www.5etesting.com
循序渐进学测试

作者: testbaby(小强)

摘要:测试貌似是现在非常火的话题,也有 N 多帅哥美女投身到这个行业,但好多菜鸟进
入后都觉得迷茫了,虽然小弟不是什么高手高人,可有点自己的学习心得体会,再次和大家
分享我的学习历程。
关键词:测试 学习历程

依小弟看来任何复杂的东西都需要一步一步来学习,从简单到复杂,其实对于测试的东
西,我觉得可以分为四大部分(当然还有安全测试什么的,我这里就简化了):
z 测试技术知识
z 功能测试
z 性能测试
z 测试管理

好,那就让我们从这四部分入手,来看看我们应该如何学习测试。Let’s Go!!

一、 测试技术知识——坚固的基石

对于测试技术知识来说,包含了测试的基本概念,测试用例等知识,这些东西任何一本
测试书籍都会讲到。我刚开始接触测试的时候抱着一身热情扎到书堆里看了 N 个书,结果只
是记住了一些基本概念,其他一个没懂。后来才发现一本书,这里推荐给大家《软件测试的
艺术》。我想大家肯定都看过,个人感觉不错,简单明了,但知识点比较全,很适合入手的
人看。

当你具备了测试的基础知识后,就需要动手了。这里我觉得需要锻炼的是测试需求的提
取、测试点的提取和测试用例的书写这三个方面。

我们常常会遇到无需求或是混乱的需求,这就要求我们 tester 必须有一种能在混乱状


态下提取测试需求的能力。就小弟而言,我会从需求,产品 UE,类似产品中去思考提取,
再与产品人员沟通确认。当你把测试需求提取出来后可能是一些混乱的文字,毫无章法,不
要紧,我们把他转化为测试点。说白了,测试点其实就是我们测试用例中的测试项。之后的
工作不用我说你也应该明白了,就是转化为实际的用例了。

每个公司都有不一样的用例书写模式,小弟比较推荐一种书写模式,如下图

《每日 E 测》第三期 37 2009 年 10 月


www.5etesting.com

其中操作步骤都会对应一个预期输出。
ok,到这里你应该有了一个学习测试技术知识的基本框架了吧,剩下的就是你永不停息
的练习了。^_^

二、 功能测试——形影不离的朋友
我这里把功能测试分为手工和自动化。对于我们新手来说,先从手工功能测试入手是必
经之路。你可不要看不起手工测试,根据 80-20 原则,80%的缺陷是手工测试出来了只有 20%
才能通过工具测出来。

对于手工功能测试,小弟觉得无非就是熟悉需求,熟悉产品,实际去操作,多多动手。
随着时间的积累,你考虑的测试点会越来越多,测试的深度会越来越深。(一定要有耐心,
我开始的时候就很浮躁,\(^o^)/~)

当你转为自动化测试时,基本上会写一些测试脚本来辅助测试,脚本的学习需要结合公
司的具体业务来,如何学习脚本不在本篇的范围内,不好意思了。当然,你肯定会结合一些
工具了,咱们就以现在非常 hot 的功能测试工具 QTP 来说说吧。

小弟学习 QTP 的时候大致是通过下面的流程来学习的:

了解 QTP 及其原理

QTP 的基本操作,录制回放,检
查点,DataTable 等等
简单的测试框架

QTP 的各项设置,尤其是对象库 与外部数据的交互

通过实际的程序来练习 描述性编程

VBS 基础知识 调试程序

由于小弟水平有限,比起 E 测的创始人们小弟这技术微不足道,所以就不在这显摆了。

《每日 E 测》第三期 38 2009 年 10 月


www.5etesting.com
QTP 的学习路线就说到这里吧。O(∩_∩)O~

三、 性能测试——貌似是越来越火了啊

首先来个图,这个图是我在网上看到的,就截下来了,实在是没记住作者是谁。

小弟建议学习路线为 Vugen 开发脚本(函数使用)->controller 场景设置->monitor


增加计数器->analysis 结果分析

VuGen 的学习基本是按钮功能的熟悉、脚本的编写、常用函数的掌握、调试的技巧等。
主要的学习点大概是如下几个:
z 增加事务
z 检查点
z 关联
z runtime setting

如果你有 C 的基础上手就比较快了,如果你没有,建议你先去学习下 C 的知识在来吧,


这样能让你少走不少弯路哦!

Controller 的学习是设计方案的学习,以及如何监控服务。这个需要根据具体的需求
来设计运行场景。这里有个难点可能就是监控服务的配置,尽管 LoadRunner 提供了监控 N
多服务的功能,但比如 mysql 什么的都需要我们自己写脚本进行监控,再比如对 Linux 的监
控也需要我们事先在 Linux 中安装 rstatd。这个我们在遇到的时候 google 一下就可以解决
的。

《每日 E 测》第三期 39 2009 年 10 月


www.5etesting.com
Analysis 的学习需要我们有牢固的性能基础知识做后盾,比如你连吞吐量都不知道什
么意思,那神仙也帮不了你了,还是回头是岸吧!对于结果的分析不是一下就能会的,需要
长期的积累和总结。大致可以分为 windows 的性能分析和 Linux 的性能分析。无非就是从失
败数较多的事物入手,一层一层分析下去,多多练习就能掌握了。

四、 测试管理——提高测试质量的根本

我们知道,就算你有在高的技术水平,如果没有通过有效的管理怎么能使他发挥最大力
量呢!对于我们这些新手而言,我们也要学习一定的管理知识,这个就没什么路线了,大家
可以去买几本管理方面的书看看,最好是那种结合项目的,不要光是理论的。我个人比较喜
欢蔡为东写的书,不厚,还结合项目,反正比较通俗易懂啦。

结束语:
任何东西的学习都需要一个过程,也需要一个合适的方法,本篇只是简单说了下小弟的
学习路线,仅供大家参考,欢迎鲜花和鸡蛋。O(∩_∩)O

测试行业在国内起步比较晚,近几年来该行业有了突飞猛进的发展,目前中国的大部分高校

还没有单独设立软件测试这个专业,主要的人才还是来源于培训机构,因此随之而来的就是

大量培训机构的涌入,整个测试培训行业内层次不均衡,因此培训出来的人才也就相对高低

不等。

由于中国软件行业的快速发展,对于测试人员的要求也越来越高,越来越趋于专业化,

整个人才需求类型包括业务测试人才(金融、网络安全、通信、电子等等)、数据库测试人

才、功能自动化测试人才、性能自动化测试人才、白盒测试人才等等,但是目前国内的测试

培训机构还尚处于初级阶段,由于机构的师资水平不高、软硬件环境的不足等各方面原因,

培训出来的人才远远达不到企业的用人标准,所以这就造成了市场上测试人才的大量缺口,

也是高薪难求专业测试人员的原因所在。

自动化测试的诞生为手工测试做了一个很大的补充,目前很多企业都是希望通过自动化

测试来降低整个测试周期和人员成本,并且保证产品的质量,但是由于很多企业对于自动化

测试了解的不足,所以花费了很大的投入结果收效不明显。个人认为首先在进行自动化测试

之前要进行项目分析、成本分析,项目分析主要是考核该项目或产品是否适合自动化,自动

化中的风险预期估算等等,成本分析就是要计算一下投入自动化的成本和收益,这也就决定

了我们整个项目是否适合进行自动化,所以个人建议任何企业不要盲目的去做自动化,不然

《每日 E 测》第三期 40 2009 年 10 月


www.5etesting.com
就如马云说过的一个经典的语录:你把波音 747 的引擎安装到拖拉机上,当拖拉机一启动,

整个拖拉机会四分五裂。

自动化测试对于整个测试行业的发展是具有推动作用的,当然对于测试人员的能力提

升、测试心理都是有好处的,软件开发和软件测试最大的区别就是,软件开发人员不停的在

创新,软件开发人员会有一种优越感和胜利感,但测试人员却总在进行着重复的工作,尤其

我们在进行一轮又一轮的系统测试、集成测试等等,我们都是在不停的测试自己负责的模块,

当轮次达到 5-7 轮次以上后,从测试心理学上来讲,这个人就会感到疲倦和厌烦,而且工作

效率和工作质量也会随之下降,所以对于项目轮次比较多的产品或项目,笔者建议引入自动

化测试,根据项目的大小、项目的要求、进度的安排、人员的配置等等来决定是否进行全部

自动化和部分自动化,如果由于人员不是很充足,我建议进行手工测试+自动化测试结合的

模式来做,这样的话,首先对于测试人员也是一种能力的提升,并且对于他们来说从心理上

面也会起到一个积极的作用,对于项目的后期质量也会得到更好的保证。

未来自动化测试行业的发展将是专业化的,并且市场格局也会进行细分,目前第三方测

试机构大部分还是没有达到这个水准,测试类型做的比较庞杂,笔者认为由于中国软件行业

的迅速发展,会对整个测试行业提出一个更高的标准要求,所以亟待我们测试同仁在整个测

试行业内进行细分,并且要从整个的自动化测试工具的研发、自动化测试的技术的研究和进

取,自动化测试流程的规范来着手,为中国的软件测试行业的发展,创新出高标准、高科技

技术的自动化解决方案而努力,我也希望通过我们 E 测中国的力量将中国的自动化测试行业

整合、团结起来,创造出更多自动化测试技术,同时也期待会有更多的专业的自动化测试技

术的公司的诞生。

《每日 E 测》第三期 41 2009 年 10 月


www.5etesting.com

《QTP 项目应用和进阶》样章选读

书籍官方购买地址:http://book.5etesting.com

4.8 测试实施阶段

经过前期自动化测试的分析及设计,现在进入具体的设计阶段和正式的实施阶段。实施
阶段由自动化测试工程师遵循之前的设计进行开展。

4.8.1 自动化测试流程设计

流程设计的原则:流程独立性。也就是每个流程都是独立的一个流程,这边就需要注意产
生一些前置的准备数据,并且在后置条件以后恢复原始数据.
举例,如图 4.8.1:

图 4.8.1 修改密码脚本流程

《每日 E 测》第三期 42 2009 年 10 月


www.5etesting.com
上面这个例子很简单表现了当我们每次修改完新的密码成功以后回有一个重置密码的
过程,这样的好处就是每次我们运行脚本都可以成功,当然这样的流程数据完整性还可以体
现在整个脚本上,每次运行脚本都会打开 IE,运行完毕都会关闭 IE.

4.8.2 测试用例的维护

随着测试进行,我们需要对测试用例进行维护,一般测试用例的维护分以下几种情况.
‹ 需求变更
对于我们实施的系统需求变更了,所以需要对测试用例进行维护,一般由手工测试
人员负责修改。
‹ 测试用例设计缺陷
由于需求理解不正确,或者测试工程师设计测试用例时的疏忽,导致测试用例设计
难以理解。
‹ 测试用例状态维护
随着自动化测试进展, 我们会更新我们测试用例的状态是否已经完成自动化。对于
新的功能模块的产生取代了旧的功能模块,那么旧模块的自动化测试用例及时宣告
退休。

通常的我们会有自己的测试用例管理的工具,这样我们可以很直观便捷的维护我们的测
试用例了。

4.8.3 对象库管理

对象库的管理需要专人来管理,并且维护对象列表。

《每日 E 测》第三期 43 2009 年 10 月


www.5etesting.com

图 3.7.2 对象库的维护

。。
。。。。
。。。。
。。。
。。。。

《每日 E 测》第三期 44 2009 年 10 月


www.5etesting.com

征稿启事
《每日 E 测》是一本涵盖软件测试各方面实践经验知识,国内首刊以自动化测试为特色的 E
测中国旗下的非营利的综合性电子杂志。本刊以“知识分享,共同成长,提高国内软件质量”
为办刊宗旨,服务于所有软件测试行业尤其是自动化测试行业的工程师。为了汇集更多广大
软件测试从业人员的研究成果、促进学术交流互补、丰富软件测试理论创新宝库,我们特向
全球征集优秀中文稿件。

【征稿对象】
所有软件行业从业人员,对测试有热情的愿意分享工作中软件测试的心得体会的所有海内外
人士

【来稿须知】
1.文字精练、语句通顺、层次清楚。文章内容应具有先进性和实用性。引用资料要注明文献
依据,参考文献需为作者亲自查阅的近 5 年的主要文献
2.投稿方式:电子邮件形式,请发送至AskWebMaster@5etesting.com。来稿请使用word排版,
并请注明作者姓名、单位、通讯地址、邮编、电子信箱、联系电话等,本刊暂只接受邮件投
稿
3.论文的基本要素齐全,文章标题、作者单位、作者姓名、关键词、摘要、结语、参考文献
等。
4..文责自负,文稿一律不退,请作者自留底稿,请勿一稿多投!
5.本刊有权对采用的稿件作必要的修改
6.来稿必复,如在 15 日内不见回复,请再次发送邮件,以免影响正常发表
7.其他未尽事宜及本刊相关情况,将在文稿采用通知中详告作者

【其他事项】
1.网站收录:我们会将《每日 E 测》发表在 E 测中国首页及“E 测下载”的显著位置,供软
件测试界的同行下载学习与探讨
2.优秀作者将成为我们的特约撰稿人,并赠送《QTP 项目应用与进阶》
3.本征稿启事长期有效
4.E 测中国保留对《每日 E 测》的所有解释权

E测中国 - www.5etesting.com

《每日 E 测》第三期 45 2009 年 10 月

You might also like