《Web项目测试实战》(附光盘) 7折优惠

新科海 发表于 2010-03-15 09:04 浏览次数:267 views 来源:

     本书贯穿了一个实际的项目案例,从需求调研开始,直至性能测试结束,详细地剖析了软件测试工作的实施流程及过程中所使用的技术。全文共分5章,分别是:软件测试与项目分析,团队组织及任务分配,测试用例编写与管理,功能测试实施,性能测试实施。
    本书是对《软件测试工程师培训教程》一书的必要补充。在《软件测试工程师培训教程》中介绍了基本的软件测试概念及技能方面的知识,本书利用其中的知识,进行实际项目的测试,将理论知识运用于实际工作中,从而掌握一般软件的测试流程、测试方法及自动化工具方面的技能。读者可根据自己的需要进行选择,有针对性地学习相关教程。
     本书特别适合对软件项目测试缺乏了解的大学生和从业人员,对于想进身为软件测试项目经理的专业人员也是一本很好的参考书。  


   

中科院软件测试视频教程—-乐视清晰版全集

yanzhiguo 发表于 2010-03-08 10:28 浏览次数:974 views 来源:

中科院软件测试视频教程—-乐视清晰版全集

记一次有内存泄漏的性能测试

lvyue 发表于 2010-02-21 10:58 浏览次数:64 views 来源:

虽然Windows Mobile 6.5才刚刚推向市场,但是据一些摩托罗拉雇员意外泄露的资料显示,Windows Mobile 7已经开发了一年之久,并已经进入到Beta测试阶段。   Windows Mobile 7的最主要特色在于手写识别功能,而且将加入NVIDIA Tegra平台(APX 2500)的支持,该操作系统平台还将原生支持MEMS传感器,例如加速度传感器和方向传感器。   另外,Windows Mobile 7还将具备一种匿名缓存功能,但是运作机制现在还是未知。其他功能包括Windows Live ID可以被用于Exchange Mobile客户端,这意味着用户能够通过手机访问他们的Windows服务。而且所有的Windows Mobile 7手机都将具备WiFi功能,或至少操作系统具备原生WiFi硬件驱动。   其他功能包括,Windows Mobile 7还有视频共享用户界面、Live视频搜索功能、以及丰富的视频电话和会话控制功能。ActiveSync将会在新操作系统中集成。不过,纵使我们知道 Windows Mobile 7的众多新功能,这款系统也要等到2010年底才会公布。

什么是UAT测试?

lvyue 发表于 2010-02-21 10:50 浏览次数:66 views 来源:

  UAT(user acceptance Test) 户接受度测试

 

以下是它的一些一般步骤;仅供参考

一步:用户培训手册准备(就是针对要进行UAT测试的对象,及要进行培训的用户,准备一些培训资料:一般是测试对象使用/功能手册及要培训的用户的个人资料等等:就跟教师上课进行备课差不多)

二步:测试脚本发放(如果你公司采用自动化测试,那么每一个功能或一个模块等都有对应的测试脚本,可以把这些测试脚本分发给特点的人员;如果采用手工测试,就要把详细描述一个功能或模块的文档分给相关人员(当然自动化测试也要分发))

三步:用户补充业务测试场景和测试数据(就是:请有代表性的一些最终用户根据实际应用环境及一些常用处理的数据,来给一些补充与建议,越贴近实际应用越好)

四步:顾问补充测试步骤(你可以请项目专家,测试经理,或专门的测试,开发等顾问对测试步骤进行补充)

五步:培训资料及测试脚本文档的确定与最终输出(一般到此,各种资料都基本确定,这时可以将它们进行打印,或形成特别的电子文档)

六步:测试策略的制定(如嵌入测试策略等,http://bbs.51testing.com/thread-3000-1-1.html)

七步:测试用户的确定(大体上从培训人员中选取,因为不能每个接受培训的人员都是资格去测试的,这里你可以通过一些考核来实现人员的筛选等等)

八步:由专门的测试组织机构确定测试地点,并发出通知

九步:测试网络环境的搭建和保障(包括网络,系统,硬软件,包括一些case工具等

十步:组织进行测试

十一步:评审分析提交的问题(这就进入了一般bug处理过程,形成了一个循环)

UAT测试的重点,我想主要体现在以下几个方面

一是:培训的资料表述要准确全面,易懂等(这是理论基础)

二是:人员选择,要典型有代表性(用户基础)

三是:测试流程步骤(要周密)

四是:测试策略制定(确定一个适合测试对象及测试人员的测试策略)

五是:问题的表达与处理(因为测试者不是专业开发测试人员,对于问题的表达可能不能到位,或根本就不是那种问题,这就存在如何复现与转化问题等)

怎样提高性能测试的效率和质量

lvyue 发表于 2010-02-21 10:44 浏览次数:46 views 来源:

  在信息技术日新月异的今天,顺应世界经济一体化的潮流,中国软件行业加强了与世界同行的沟通与交流,基于本身提高软件质量的迫切需要,在国外优秀的软件企业中被证明为提高软件质量行之有效的途径,软件测试开始越来

越受国内软件行业重视。各种各样的测试工具和测试理论,也都逐渐被我们所熟知。软件测试也开始成为人们平时谈论和网上探讨的热点话题。

在软件测试倍受注目的情况下,身为一名软件测试人员,如何高质量的完成公司交给的测试任务,无疑是我们应该考虑首要问题。从事软件测试已近两年,从刚开始的一脸茫然,到如今的手到擒来,期间也经历了很多曲折,总结这两年来的经念教训,我认为有必要就软件性能测试这个话题和大家展开探讨,与大家共同分享软件测试的得失,为提高我们的测试水平尽一分薄力。

引言

作为评价产品性能的重要手段,性能测试在软件测试工作中占的比重一直很大,要最终提供一份准确,权威的测试报告,测试人员的努力工作自然不可或缺,但更重要的是测试人员清晰的工作思路,简洁的测试流程和良好的测 试方法。

目前性能测试存在的问题

总结以往进行的性能测试,虽然测试人员自始至终对测试工作都做到了认真负责,但测试报告出炉后,大家总觉得美中不足,对测试结果都心存疑虑,尤其在那些时间跨度较长、针对不同的测试对象的性能对比测试中,或多或少

都存在以下几个方面的问题:

1. 测试准备不充分,测试目标不明确,测试计划不详细;

2. 缺乏测试以及针对测试对象的技术储备;

3. 测试环境的稳定性及前后一致性不足;

4. 测试数据精确性和代表性不足;

5. 测试描述不精练;

下面,我们就剖析以上问题的同时,探讨一下如何解决这些问题。

性能测试准备

这是一个经常被测试人员忽略的环节,在接到测压任务后,基于种种其它因素的考虑,测试人员往往急于进度,立即投入到具体的测试工作去了,测试、记录、分析,忙的不亦乐乎,工作进行了一半才发现,或是硬件配置不符 合要求,或是网络环境不理想,甚至软件版本不对,一时弄得骑虎难下,这都是没有做好测试准备惹的祸。

那么我们应该如何做好性能测试的准备工作呢?

做软件项目有需求调查、需要分析,我们做测试也一样。在拿到测试任务后,我们首要的任务就是分析测试任务,在开始测试前,我们至少要弄清以下几个问题:

a) 要测试什么或测试的对象是谁?

b) 要测试什么问题或我们想要弄清楚或是论证的问题?

c) 哪些因素会影响测试结果?

d) 需要怎样的测试环境?

e) 应该怎样测试?

只有在认真调查测试需求和仔细分析测试任务后,才有可能弄清以上一系例的问题,只有对测试任务非常清楚,测试目标极其明确的前提下,我们才可能制定出切实可行的测试计划。

明确测试目标,详尽测试计划

在对测试需求充分了解的基础上,制定尽可能详细的测试计划,对测试的实施是大有裨益的。测试计划的制定,大多专业的测试书籍多有详述,故本文不再鏊述。

测试技术准备

在目前的大环境下,要求测试人员在短时间撑握所有的软、硬件知识是不太现实的,但平时测试人员应抓紧对测试工具和测试理论的研究,在测试计划中,应给研究测试对象和测试工具分配充足的学习时间,只有在充分撑握测试工具,完全了解测试对象的前提下,我们才能够实施测试。建力在错误的认识上的测试,既使你再努力,结果也是背道而驰,也很难证明问题,更不用说用这样的测试报告去说服用户。

配置测试环境

只有在充分认识测试测试对象的基础上,我们才知道每一种测试对象,需要什么样的配置,才有可能配置一种相对公平、合理的测试环境(这在性能对比测压中尤其重要)。

考虑到其它因素,如网络锁、网速、显示分辩率,数据库权限、容量等对测试结果的影响。如条件允许,我们最好能配置几组不同的测试环境。

测试数据的获取和处理

在所有的测试中,测试数据的收集工作都是较为困难的,Gis软件更是如此,每一种软件都有它的文件格式,有的软件还有几种格式。在这种情况下,我们只能把第三方格式的数据转换成每一种被测试软件自已的格式。同时,还应对数据作一定的处理,如处理数据冗余,处理显示风格等。如在测试时会更新数据,操作前一定要备份数据。

其外,还应评估数据格式和数据量对测试的影响,如有必要,应准备多组数据。

最后,一定要检查测试数据的有效性,避免损坏数据对测试结果的影响。

如何开展性能测试

测试前期的准备工作纷繁复杂,做好测试准备工作,已是完成了测试工作的一大半,但要产生一份具有说服力的测试报告,还应正确把握测试的强度,保持测试的一致性,提高测试的精度。

判断软件的好坏,要看软件解决实际应用的能力,只有在一定的测试强度下,才能测试出各种软件资源的消耗率,软件运行的速度,软件的稳定性。通过对比在不同的测试强度下,不同软件每一个功能模块解决实际问题的能力和软件运行的效率,我们才可能判断出不同软件的每一个模块的强弱,甚至于整个软件的优劣。

性能测试开始后,所有参数的输入都应遵循统一的标准,无论是哪一个环节,哪怕是一点点偏差,都应立即纠正,觉不能心存侥幸。要特别注意外部环境对测试结果的影响,如果在整个测试过程中,外部境不一致,如网速、机器内存使用率不一样,就有可能导制测试结果与实际情况有出入。

如何总结性能测试

对测试的终结,实际就是对测试数据的分析和处理。我们测试工作做的再好,如最终到用户手中的是一堆杂乱无章的数据,那也是美中不足。

首先,我们最好从所有的测试数据中,筛选出具有代表意义的数据,做出统计图,然后和开发人员一起,认真分析数据,找出软件存在的问题,得出测试结论。大多数用户,真正需要的就是科学、客观的测试结论。

结论

各种软件性能测试,范围大小不同,强度高底有别,但只要本着认真、客观,科学的工作态度,遵循本文论述的方法,做好测试工作是不难的。

本篇文章主要谈的是软件性能测试方面的问题,相信对其它方面的软件测试也有一定的借鉴作用。

窥探云测试

lvyue 发表于 2010-01-04 14:42 浏览次数:1,412 views 来源:

  云计算是当今的一个热点,也是一个潮流,那么软件测试能否借助云计算的威力而更上一层楼呢?最近看了几个号称云测试的网站,有感,记录一下。

第一个网站是Cloud Testing。这个公司能提供多种平台,多种浏览器的平台,一般的用户在本地用Selenium把自动化测试脚本编写好,然后上传到他们网站,然后就可以在他们的平台上运行Selenium脚本了。他们的优点是:平台和浏览器覆盖得广,按需付费。不过我自己对这样的服务有以下的疑问:

1. 基于UI的自动化测试通常都会遇到一些不稳定的问题,本地编辑好的自动化脚本是否也能够在他们的平台上正常运行

2. 如果出现错误,有没有办法进行调试。究竟这个错误是SUT的错误,还是测试脚本的错误,如何区分

3. 用户自己开发的插件能否在这个云测试平台上使用(我觉得是不行的)

总得来说Cloud Testing是一个基于UI自动化测试的云测试平台,但是我认为这样的平台并没有太多的优势,一般做互联网的公司产品发布都是比较快的,根本是不可能有时间和资源去覆盖所有的浏览器和平台,根据80/20原则,在中国搞互联网,只要搞定Windows下的IE6和IE7基本上就万事大吉了,一般好一点的前端TEAM都是在Firefox下进行开发的,所以Firefox的兼容应该是不成问题,最后在 Chrome和Safari上过一下关键流程,差不多了。再说,现在虚拟化技术日渐流行,自己搭建多个平台也不是非常耗费资源。

第二个是keynote公司的kite,这个感觉比Cloud Testing更加弱一点,kite有自己的浏览器,然后用户在这个浏览器上录制脚本,然后上传,然后可以在keynote公司不同的可用地点中运行测试,查看结果。这个平台给我的感觉更多的是关注终端用户性能,里面有一个页面元素下载的timeline,用户可以查看那些页面资源下载花费多少时间,DNS查询时间等等……

这个平台的问题有:

1. 可用的节点不多,现在为止只有北美地区的几个节点可用

2. 专门的工具,可能对测试的结果有影响

估计是keynote公司的一个实验性产品。

第三个是SOASTA。这个公司不单只提供了功能测试,而且还有性能测试。感觉上性能测试应该是利用云计算的一个非常重要而且有意义的点。貌似这个公司不是那么开放,没有太多公开的资料,所以不知道他们是怎么运作的。看他们的网站的一些成功案例,说的挺好,不过这样相对于在公网做性能测试,不知道会不会有问题:

1. 带宽问题,例如云那段设定的带宽是1Mb,那么云和端之间的带宽是否能真正达到1Mb呢

2. 安全问题,这些性能测试的脚本不会日后成为攻击的工具吧

突然觉得,现在做CDN的公司,其实他们可以兼营性能测试,因为他们的服务器分布的跟真实情况最接近的,而且也有足够多的服务器资源和带宽。

QTP中一些基础代码结构累积

lvyue 发表于 2010-01-04 14:40 浏览次数:1,351 views 来源:

1 生产随机数列
第一种方法———————————–
randomize’更新反回的数据
funcation rand(k,n)
n=int((k-1)*rnd+1)
rand=n
end funcation
第二种方法
n=randomnumber.value(1,255)
2 当运行到表中的某一行,自动导出表中的所有数据
row=datatable.getcurrentrow
if row="5" then
datatable.export("d:data.xml")
end if
3 webedit("txtpass").setsecure"sdsdf…."
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
if browser("web_name".dialog("dialog_name").exist(1) then’如果不出现=false
error_message=browser("web_name".dialog("diaglog_name".static("用户密码错误!").getRoproperty("text")
if error_message<>(datatable.value("error_info"))then
msgbox(error_message)
end if
browser("web_name").dialog("diaglog_name").close
end if
这里我总结了两点技巧:
一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍 时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理
5 在运行时,向某一个单元格赋值: datatable.value("kai",dtlocalsheet)="nanjing"
datatable.value("num")只在global形式下的一种省略形式;完整形式
是datatable.value("num",dtlocalsheet)
—–取得某一具体行的值:
datatable.setcurrentrow(n);
msgbox(datatable.getsheet("global").getparameter("kai").Rawvalue)
或者kk=datatable.Rawvalue("kai","action1")
—–在run-time期间,添加一个action和参数
kk=datatable.addsheet("name").addparameter("kai","ddd").name’/value
6 with dialog("name")’可以省好多代码,看着也简洁
content=.wintreeview
end with
7 wintreeview.select(item)(根是0,列表第一个也是0)
wintreeview.getcontent
wintreeview.getitem(整行)+";"+
winlistview.getitem(行中的第一个字符段)
wincheckbox("").set"off"’/on
8 数据库检查点:
sub getdata
set con=createobject("adodb.connection")
con.open("descrīption=mod;driver=sqlserver;server=hpsqlserver;uid=sa;"&_
"pwd=11111;APP=qtp;WSID=hp;database=MOD31" ‘用sqlserver方式
Con.open "DRIVER = {Microsoft Access Driver (*.mdb)};DBQ=D:Testdb.mdb" ‘用access方式
set record=createobject("adodb.recordset")
sql="select * from m3_program" ‘选择具体满足一条件的:sql="select* from m3_program where "
record.open sql,con
if(not record.eof) then
record.movenext
msgbox("p_name")
end if
record.close
set record=nothing
con.close
set con=nothing
end sub
‘如果没有查到内容,在结果中不会报错,也不会弹出窗口
9 vbcr—-chr(13)回车符
vblf—-chr(10)换行符
vbcrlf—-chr(13)+chr(10)结合
10 从step run has two ways(一是在key-driven页面,另一个是在代码页面,前者走完项目,后者只是本acton第一行
11 对于时间,日期等的格式检查(一种是正则表达式,另一种是输出对比,如果
不好对比,用mid截取一部分对比)
12对于一些列表框或树结构,如果发生结点名称发生变化,此时如果报没有彼配的对象,此时可以把更改后面的名称如_2"
13;对于动态变化的对象,要分清是对像还是属性;对于属性可以用gettoproperty("ddd");得到;而对于由于动态无法识别对
像可以用描述性脚本:
如:Set ōbject= Descrīption.Create()
Object("regexpwndclass").Value="HtmlButton"
Object("regexpwndtitle").Value="登陆"
browser("ss").page("a").button(Object).click
14:对于属性是变化的,有时可以把该属性从识别对象里删除
15:从系统的文件中获取信息及删除文件
get_file_infor("c:she.mpg")
function get_file_infor(url)
dim fso,f
set fso=createobject("scrīpting.filesystemobject")
set f=fso.getfile(url)
msgbox(f.datecreated)
f.name:f.size:f.type
fso.deletefile(url)’/////删除文件
end function
——–获取文件夹里所有文件信息
get_folder_infor("c:kai")
function get_folder_infor(folder)
dim fso,f,f1,n
set fso=createobject("scrīpting,filesystemobject")
set f=fso.getfolder(folder)
set fc=f.files
for each f1 in fc
select case f1.name
case"kai.mpg","she.mpg","dd.mp3"
end select
next
end function

16,四舍五入可以在后面+0.5,进行自动解决
17,y=——-waitproperty("visible",true,10000)
18,on error resume next
on error goto o
19 window("").wintreeview("systreeview32").TYpe micctrldown+"p"+micctrlup
20,定义数组 name=array(1,2,"aa","bb");name(0)=1
21进行日期YYYY-MM-DD的格式检查 :
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ‘ Create variable.
Set regEx = New RegExp ‘ Create a regular expression.
regEx.Pattern = patrn ‘ Set pattern.
regEx.IgnoreCase = True ‘ Set case insensitivity.
regEx.Global = True ‘ Set global applicability.
Set Matches = regEx.Execute(strng) ‘ Execute search.
For Each Match in Matches ‘ Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is ‘"
RetStr = RetStr & Match.Value & "’." & vbCRLF
Next
RegExpTest = RetStr
End Function
date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))
Select case result_message
Case ""
msgbox("你输入的日期格式与标准不匹配")
case else MsgBox(result_message)

 

功能测试用例的书写方式(适于新手学习)

lvyue 发表于 2010-01-04 14:22 浏览次数:77 views 来源:

 

功能性测试用例

1. 测试的来源,即测试的需求

测试用例的主要来源有:
1) 需求说明”及相关文档
2)相关的设计说明(概要设计,详细设计等)
3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)
4)已经基本成型的UI(可以有针对性地补充一些用例)
       简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

2. 用例的组织方式

不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。
用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组织在一起。
     在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。
    即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。
至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

3. 用例与其他材料的关联方式,即如何解决用例跟踪的问题

测试用例面临的比较大的风险有:需求的变更、设计的修改、需求的错误和遗漏等等。
由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。
如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。
这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增加了新的功能点。
4. 一个好的用例的表述要点,即用例中应当包含的信息

一个优秀的测试用例,应该包含以下信息:
1) 软件或项目的名称
2) 软件或项目的版本(内部版本号)
3) 功能模块名
4) 测试用例的简单描述,即该用例执行的目的或方法
5) 测试用例的参考信息(便于跟踪和参考)
6) 本测试用例与其他测试用例间的依赖关系
7) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限
8) 用例的编号(ID),如可以是 软件名称简写-功能块简写-NO.。
9) 步骤号、操作步骤描述、测试数据描述
10)预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)
11)开发人员(必须有)和测试人员(可有可无)
12)测试执行日期

5. 给出一个测试用例的例子该范例已经包含一个测试用例的模板。

 

备注:本用例未考虑“企业代码”的输入情况;测试用例并未涵盖所有的非法输入,如非法输入中可能会有 “user=*,pw=*”的组合,对回车的默认操作,空格输入,对输入上溢的处理的处理(可能会跳过身份验证) 等等。
如果你有兴趣,至少可以再补充5-10条左右的输入组合(当然,如果步骤超过15步,用例的易操作 性就降低,你可以再创建一个测试用例如TC-TEP_Login_2)

 




返回首页 | 关于我们 | 联系我们 | 诚聘英才 | 网站地图 | 友情链接 | 版权声明 | 乘车路线| 地铁路线