发布时间:2023-03-20 16:15:19
序言:写作是分享个人见解和探索未知领域的桥梁,我们为您精选了8篇的软件测试论文样本,期待这些样本能够为您提供丰富的参考和启发,请尽情阅读。
1Web应用程序性能测试实验
这部分实验目的是使学生熟练掌握使用Jmeter测试Web应用程序的一般流程和方法。实验任务测试绩效考核子系统中的评分模块。评分人登录系统后进入评分环节,选择其未完成的评分项目(若有多个未评分项,则需要全部对其评分)。每个评分项中包含对多个部门的评分,部门数大于等于3个时需符合正态分布,如可评出优秀3个、良好6个、合格4个、基本合格2个,否则可任意评分。按照循序渐进的原则,设计了3个步骤:一是Jmeter的基本应用,包括脚本录制、添加http请求、添加断言以及查看测试结果等;二是Jmeter的逻辑控制结构,如分支和循环等;三是Jmeter的高级应用,如参数值可变以及参数个数可变等。
1.1Jmeter的基本应用
Jmeter可以手工添加脚本,但更方便的是使用脚本录制软件Badboy[9]。Badboy录制的脚本可以保存为Jmeter格式,然后在Jmeter中直接打开和修改。脚本主要是一系列的http请求,其中可以设置请求的URL,请求方法(get/post)及请求参数等,如图1所示。通过添加断言(如是否含有特定字符串)检查请求是否返回正确结果。添加查看结果树并运行测试脚本查看程序的测试结果。
1.2Jmeter的控制结构
Jmeter具有丰富的逻辑控制结构,包括控制器,switch控制器,while控制器以及forEach控制器等。实验重点练习控制器和forEach控制器。控制器判断Jmeter变量是否满足给定条件,若满足则执行其包含的测试元素,否则不执行。ForEach控制器对Jmeter变量的每一个取值都执行一遍其包含的测试元素。图2是一个控制器,其条件为变量COUNT小于10且变量VAR等于字符串“abcd”。图2Jmeter的控制器图Jmeter的变量引用使用${变量名}的方式,变量一般提取自返回页面中的某些信息,如满足特定条件记录的行数或某个特定位置的字符串取值等。变量提取可采用正则表达式或Xpath进行匹配,讲解其匹配原则并现场演示。图3利用正则表达式提取需评选优秀的单位个数,其中引用名称youxiu就是变量名。匹配失败则取设置的缺省值0。如对于页面中返回的html代码“…您当前可以评出优秀<spanid="ltYSMsg">3</span>个…”可提取出优秀个数为3。
1.3Jmeter的高级应用
本部分着重解决实际测试过程中的一些常见问题,如参数内容可变及参数个数可变等。测试登录环节时需模拟不同的用户登录行为,即图1的http请求中txtUserName一项的值应是变化的。Jmeter提供的CSVDataSetConfig可解决这一问题,如图4所示。将所有评分人的信息存储在一个CSV文件中,把其中的列名填入VariableNames项,之后将图1中的txtUserName值改为userAccount(即CSV文件的第1列)实现参数值的动态变化。进入评分项后需根据情况选择优秀和良好等的个数,且要反映在http请求的参数中。由于参评单位的个数因评分人和评分项各异,因此无法在GUI界面中一一添加。需动态添加的参数包括评分列表中的name及其value,value的取值从优秀到基本合格依次为1234。为简单起见,我们按顺序对单位进行评分。如系统要求评出3个优秀,则测试中前3个部门打优秀,其余依次类推。由于同一部门的优秀良好等单选按钮的name值相同(如图5所示),我们选择提取该组唯一的ID号,然后将其转换为name,其对应关系是用$代替下划线(如ID号为gbBSCExamList_ctl02_rbExamerLevel,name为gbBSCExamList$ctl02$rbExamerLevel)。Jmeter的Beanshellpreprocessor可在提交http请求前动态调整参数个数及参数值。下面给出了Beanshellpreprocessor的代码。其中ExamerLevel_matchNr为Jmeter的系统变量,提供了正则表达式匹配项ExamerLevel匹配成功的个数(即参评单位的个数)。如前所述匹配数量小于3时可任意评分,为简单起见我们均将其评为优秀。N=Integer.parseInt(vars.get("ExamerLevel_match-Nr"));(N>=3){YX=Integer.parseInt(vars.get("youxiu"));LH=Integer.parseInt(vars.get("lianghao"))+YX;HG=Integer.parseInt(vars.get("hege"))+LH;BHG=Integer.parseInt(vars.get("jibenhege"))+HG;for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");(i<=YX){sampler.addArgument(item,"1");}else(i<=LH){sampler.addArgument(item,"2");}else(i<=HG){sampler.addArgument(item,"3");}else(i<=BHG){sampler.addArgument(item,"4");}}}else{for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");sampler.addArgument(item,"1");}}设计了含35个并发线程的线程组,模拟实际35个评分人的评分过程。全部线程在1秒钟之内启动,比实际情况更严格。得到聚合报告如图6所示,其中点击考核评分页面响应时间最长,为335毫秒。且测试过程中无错误发生,说明系统评分模块可靠。
2数据库性能优化实验
除应用程序外,数据库设计的优劣亦影响系统性能。这部分实验目的是使学生熟练掌握使用SQLServer测试数据库性能的一般流程和方法,并进行简单的数据库调优。为减少复杂性,设计一个简单的由三张表组成的人员组织结构数据库:user、or-gan及userorgan表。其中user表含4586条记录,or-gan表含1722条记录,userorgan表含6804条记录(一人可在多部门任职)。实验任务根据账号查询其姓名及所在单位信息。
2.1SQL语句执行计划对应用程序中频繁执行的SQL语句检查执行计划非常重要。初始时,三张表均未建立任何索引,下面SQL语句的执行计划如图7所示。由图7知,三张表均采用全表扫描的方式。对大表全表扫描可能涉及多次磁盘I/O,非常费时,应尽力避免此种情况。SQLServer报告由于缺少索引影响了查询性能,并给出了相关建议。selectA.vcAccount,A.vcName,C.vcNamefromtest.dbo.[user]Ainnerjointest.dbo.[useror-gan]BonA.vcAccount=B.cnvcempidinnerjointest.dbo.organConB.cnvcorgid=C.nNodeIDwhereA.vcAccount='testuser'为表格建立以下索引:indexIND_USERACCOUNTontest.dbo.[user](vcAccount)clusteredindexPK_ORGANontest.dbo.[organ](nNodeID)indexIND_USERORGANontest.dbo.[userorgan](cnvcempid,cnvcorgid)再次运行后显示执行计划如图8所示。可见所有表扫描均已替换为相应的索引查找,且SQLServ-er未报告缺少索引影响查询性能。两次执行查询的磁盘I/O和CPU时间见表1,可见为表添加正确的索引可提高查询性能。
2.2索引建立原则总结
建立索引的一般满足原则如下[10](篇幅所限,未给出实例):(1)为主键所在的列创建索引。为经常进行连接但未指定为外键的字段建立索引。(2)在频繁进行排序或分组的字段上建立索引。(3)在条件表达式中经常用到的不同值较多的字段上建立索引,在不同值较少的字段上不建立索引,如性别字段。不在查询很少引用的列上创建索引。(4)若经常同时使用多个字段排序,可在这些字段上建立复合索引。要尽量使关键查询形成索引覆盖,其前导字段一定是使用最频繁的字段。(5)查看索引并删除不使用的索引。需频繁进行数据查入操作的数据库应有较少的索引,需频繁进行读取操作的数据库应有更多的索引。(6)在聚集索引中,避免包括不必要的列,尽可能使用较小的数据类型。(7)在支持排序和范围查询的字段上考虑使用聚集索引。(8)具有高选择性的列是索引的好候选列,具有高密度的列是索引最糟糕的候选列。
3结语
1 关于计算机软件测试的介绍
1.1 软件测试的概念
软件测试是指在软件运行之前,对软件的产品介绍和代码进行审核,从而保障软件的正常运行。软件测试不仅代表软件系统出现问题的可能性,同时还表示软件能够完成预定功能的程度,这两部分对于软件测试都有重要的意义。
1.2 软件测试的特点
1.2.1软件测试的动态性
软件测试是在规定输入值的情况下运行的,是一种动态的检测软件的运行状态的过程。
1.2.2软件测试的有限性
在对软件进行测试的过程中,测试的次数是有限的,不可能无限制的测试下去,同时,整个测试过程还要具有可管理性,即在测试时需要平衡测试需求与测试资源之间的关系。
1.2.3软件测试的预测性
进行软件测试之前,应该判断测试的结果是否妥当,常常采用预示程序来预测运行的可能结果,但预测程序也是软件测试技术的一大难点。
2 软件测试技术的过程分析
2.1软件测试的方案
在进行软件测试之前,都需要制定一个合适有效的软件测试方案,以确定软件测试的目的和过程,为软件测试的完成提供一个清晰有效的目标。
2.2 软件测试的开发设计
软件测试设计就是在软件开发的过程中进行的软件质量测试工作,在测试时需要提供规范的应用说明、程序设计情况,同时,软件测试设计在软件测试过程中有着重要的作用。测试设计的基本步骤为:首先利用先进的技术手段设计分析样式,然后讨论测试结果,并做成有效的测试方案,最后确定每一项测试任务都完成了,从而保障测试结果的有效性。
2.3 软件测试的准备
在测试方案开始前,需要先进行测试准备,列举测试方案中所需要的重点问题,这些问题常常有测试数据集、驱动程序和实际执行测试所需的软件等,同时需要为整个测试过程寻找合适的测试环境和测试工具。
2.4 软件测试的实施
参照之前设计的软件测试方案,利用测试用例对软件测试的项目进行全面有效的测试,并将测试情况与实际运行情况对比起来研究,从而判断测试是否成功,并进行下一步测试工序。在测试的过程中对软件的质量问题进行记录,并进行有效的修改,修改之后再按照之前的测试步骤重新进行测试,观察问题是否会再次出现,从而确保软件的质量。同时,应制定合适的测试计划,定期将软件运行测试,以保障之前测试的问题不会在出现。每完成一个测试部分,比较整个运行结果与测试方案的不同之处,并针对不同之处进行有效的调整。
2.5 软件测试的报告
将软件测试阶段得到的运行结果拿来观察和处理,观察测试观点是否完整,确认方法是否有效,并依次评定软件测试过程中的测试用例和软件质量等级,并进行测试报告总结。
3 软件工程中存在的测试问题
软件工程出现后,软件的运行质量越来越受到人们的关注,软件测试技术也开始慢慢发展,但在软件工程中常常出现一些测试问题,导致软件的质量受到影响。下面笔者就软件工程中常见的测试问题进行阐述。
(1)目前很多软件开发公司没有比较正规的软件开发手段,没有产品说明书,因此,在进行软件测试时需要先利用试探性测试技术。而利用试探性测试技术需要先了解软件的特性,并对软件的运行情况进行有效的记录,全面描述软件的功能特点,然后应用常用的几种软件测试技术来找出软件的质量问题。但在这样的情况下,一些错误、非法的没有利用价值的数据容易被作为输入数据,这样测试软件的输出结果存在较大问题,对于软件测试的进行有较大的影响。
(2)在进行软件测试时,首先要对软件的逻辑流程进行了解,描述软件的详细状态,但在一些规模很大、结构复杂的软件测试中,了解软件的运行情况是很困难的,这时,就需要降低软件测试的状态以及数量。但是在测试中,必须对每种状态都进行测试,但在实际测试中往往忽略这一问题,这将会大大影响到软件测试的效果,并产生一定的后果。
4 计算机软件测试的常用技术
软件测试技术对于计算机软件行业的发展有重要的促进意义,关系到计算机软件的运行质量,同时,还能方便人们的日常生活。计算机软件测试主要有两种手段,即白盒测试和黑盒测试,下文笔者将对此进行阐述。
4.1 白盒测试
白盒测试即逻辑驱动测试或结构测试,该方法是对系统的内部构造进行测试,检测整个应用软件内部是否正常运行的手段,在测试中,把待测系统当作一开放的盒子,通过对系统的内部程序结构进行测试来检测它的逻辑路径,从而根据在不同区域的检测信息来测试软件的实际运行情况是否与预期结果相同。目前,采用白盒测试技术常用的方法有:基本路径测试法、逻辑覆盖法、静态结构分析法和代码检查法等。与其他的软件测试技术相比,白盒测试技术需要充分了解到系统的内部构造,以便对系统的全部逻辑路径进行检测。在应用这种测试技术时,首先要检查系统的内部构造,并从整个应用的逻辑来
统计检测数据。另外,白盒测试技术对于软件测试人员快速发现软件运行异常情况,提高软件的运行效率有重要的现实意义。 4.2 黑盒测试
黑盒测试即功能测试,该方法是对软件产品的功能进行测试,从而观察软件能否正常运行的手段,在测试中,把测试系统看成封闭的黑盒子,不需要考虑整个软件系统的内部特征,只需要依靠传输数据来得出检测结果。黑盒测试主要对软件的界面和功能进行测试,仅仅只需要考虑系统的外部结构,从而达到有效进行软件测试的目的。同时,黑盒测试主要测试软件的功能,常常用于检测这样几种错误:运行界面、程序初始化和终止、数据库的访问情况、软件性能和功能等错误。在黑盒测试之前,需要采取合适有效的测试方案,以保障软件测试有计划的进行。相比其他的软件测试技术,黑盒测试操作方便,设计代码也很简单,能够从用户的角度出发去解决问题,并实现软件的功能。