内容发布更新时间 : 2024/12/23 17:15:06星期一 下面是文章的全部内容请认真阅读。
第6章 WinRunner测试工具
1.列举几种WR学习软件GUI的不同方式。 解:(1)使用 RapidTest Script wizard 学习软件每个窗体中所有GUI对象的属性。 (2)通过录制脚本的方法学习被录制的那部分软件中所有的GUI对象的属性。
(3)使用GUI Map Editor 学习单个GUI对象、窗体或某个窗体中所有GUI对象的属性。
2.分别简述WR中同步点和检查点的作用。
解:当测试人员执行测试时,所测试的应用程序每次操作的响应时间并不一定,有时快,有时慢,导致执行输入动作的时间也需要等待。在测试脚本中插入同步点,当WinRunner执行到同步点时,会暂停执行以等待应用程序某些状态的改变后,再继续执行,以避免应用程序响应的时间超过 WinRunner 等待的时间而导致测试执行失败。
设定检查点可以检查所设定区域的显示是否和预期结果相符。通过检查点的设置以及对各点处输出信息的编程定义,可以在脚本运行结果单中查看各项测试内容是否都已通过。在功能测试中,检查点可以用在以下两个方面:检查应用程序经过修改后对象状态是否发生变化;检查对象数据是否和预期数据一致。 3.比较WinRunner中GUIde Map File per Test和Global GUI Map File两种模式的区别。 解: 两种模GUI Map File per Test 式 方法 Global GUI Map File 在测试的过程中将自动保GUI信在测试的过程中需要保存GUI,息,打开测试时可以自动加载当应用程序改变时必须更新GUIGUI文件 文件 1. 每个测试都有自己的GUI文1. 当对象或窗体的描述改变,只件 需把GUI 文件里对应的属性作2.不必保存或加载GUI 相应的修改 3. 维护和修改简单(重录一次即2. 容易维护和更新(无须重录) 可) 优点 缺点 只要应用程序的 GUI 改变,每当新建GUI或运行测试脚本时个测试的GUI 文件都要重录或必须保存或装载GUI文件 修改 适用于初学者或被测软件的GUI适用于经验丰富的WinRunner 不会产生变化 使用者,或被测软件的GUI可能20 建议
会经常产生变化 4.简述利用WinRunner进行测试的过程可分为哪几个阶段,即操作步骤是什么?
解:WR的测试过程分为以下六个阶段:(1) 创建GUI map;(2)创建测试;(3)调试测试;(4)执行测试;(5)查看测试结果;(6)报告发现的错误。 5.给出WinRunner中将测试脚本转换为数据驱动测试脚本的一种实现步骤。 解:可以通过下列步骤将测试脚本转换成数据驱动测试脚本:(1)加上开启及关闭数据表的指令;(2)加上循环并读取数据表的每一笔数据;(3)将录制的固定值与检查点的值参数化为数据表的字段值。
6.仿照实例4,在Flight Reservation样本软件的Flight 4B版本中建立 GUI 对象检查点。 解:略。
7.仿照实例5,在Flight Reservation样本软件的Flight 4B版本中建立图像检查点。 解:略。
8.仿照实例8,在Flight Reservation样本软件的Flight 4B版本中练习文字检查点的应用。 解:略。
9.仿照实例8,在Flight Reservation样本软件的Flight 4B版本中执行批次测试。 解:略。
10.仿照计算器加法功能的测试,完成对Windows的计算器减法、乘法和除法的测试。 解:略。
11.思考利用WR测试网易邮箱的登录模块。 解:略。
21
第7章 LoadRunner测试工具
1. 试用 LoadRunner 所给的示例,根据自己的理解设计测试,制定负载测试计划、开发负载测试脚本、创建运行场景、运行测试以及依据结果利用 Analysis 分析结果。 解:略
2. 如何利用LoadRunner判断HTTP服务器的返回状态。
解:可以利用LR的内置函数web_get_int_property判断HTTP服务器的返回状态。
例如:
#include \Action() {
int HttpRetCode;
web_url(\LAST);
HttpRetCode = web_get_int_property(HTTP_INFO_RETURN_CODE); if (HttpRetCode == 200)
lr_log_message(\
page\else
lr_log_message(\ return 0; }
3. 一个公司的系统上线以后,用户分布在各个不同的地区,而且接入系统的方式和带宽也不同,这种情况下进行性能测试,如何保证更加真实的模拟用户行为?用LoadRunner可以做到吗?
解:可以。在Visual User Generator里面可以通过RTS(runTimeSetting)来模拟一个单个用户更加真实的行为,比如思考时间、网络带宽、是否清除cache等,同样的也可在场景中进行设置。而且LoadRunner提供设置不同用户组不同
RunTimeSetting的功能。以达到模拟不同用户行为的更加真实组合。例如:假设有三种不同带宽的用户,而且上传和下载的带宽也有所不同,那么可以录制两个脚本,分别模拟上传和下载的用户行为,再在Controller里面,建立六个不同的脚本组,脚本组的用户数可以按照绝对或者百比分的方法分布。比如100,50,200用户或者20%,40%,40%等。然后设置不同的带宽和分布情况。这样不同用户组的虚拟用户模拟出来的就是不同带宽的用户实际接入情况。
22
4. 在web应用下,模拟十个用户并发进行数据的添加,结果每次执行全部成功,但是数据却不是十条,每次数据不一样,但是都比十小。这种情况产生的原因是什么?
解:是数据库的问题。大多数的数据库都有记录锁的问题,第一次的数据操作没有commit之前,第二次对同样表进行的操作可能就没有办法成功,所以每次数据的条数都达不到十条。又因为每次的操作服务器的响应时间是不同的,所以不同虚拟用户的提交时间也是不同的,这样就导致每次提交成功的数据量不一致,导致每次结果的条数可能是不同的。
5. 在LoadRunner下如何让多个场景轮流执行?
解:为每个场景设置一个Group。点击Edit Schedule->选择Schedule by Group->设置Start when group XXX finishes,就可以实现多个场景轮流执行。
6. 请解释LoadRunner下最大并发用户数、业务操作响应时间、服务器资源监控指标的含义与用途。 解:最大并发用户数是指应用系统在当前环境下能承受的最大并发的用户数。用来考察某系统的最大负载;在LoadRunner“事务性能摘要”图中可以获得业务操作的响应时间最大值、最小值和平均值,重点用于确定在方案执行期间响应时间过长的事务;
服务器资源监控指标包括内存和处理器。
内存:Linux资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。实际测试中,当并发点击数出现突然剧增前后,内存的PR 值则居高25不下。说明目前测试的系统中内存存在瓶颈!
处理器:Linux资源监控中指标CPU占用率持续超过80%(对该值的要求,根据具体应用和机器配置而要求不同,有资料表明95%),表明瓶颈是CPU。实际测试中,当并发点击数出现突然增加前后,CPU的占用率持续保持在86%以上!
23
第8章 JUnit
1.简述JUnit单元测试步骤。
解:1)判断组件的功能:通过定义应用的整体需求,然后将系统划分成几个对象;
2)设计组件行为:依据所处理的过程,可以通过一个正规或者非正规的过
程实现组件行为的设计,可以使用UML或者其他文档视图来设计组件行为,从而为组件的测试打下基础;
3)编写单元测试程序(或测试用例)确认组件行为:这个阶段应假定组件的编码已经结束而组件工作正常,需要编写单元测试程序来确定其功能是否和预定义的功能相同,测试程序需要考虑所有正常和意外的输入,以及特定的方法能产生的溢出;
4)编写组件并执行测试:首先创建类及其所对应的方法标识,然后遍历每
个测试实例,为其编写相应代码使其顺利通过,然后返回测试。继续这个过程直至所有实例通过;
5)测试替代品:对组件行为的其他方式进行考虑,设计更周全的输入或者
其他错误条件,编写测试用例来捕获这些条件,然后修改代码使得测试通过;
6)重整代码:如果有必要,在编码结束时对代码进行重整和优化,改动后返回单元测试并确认测试通过;
7)当组件有新的行为时,编写新的测试用例:每次在组件中发现故障,编
写一个测试实例重复这个故障,然后修改组件以保证测试实例通过。同样,当发现新的需求或已有的需求改变时,编写或修改测试实例以响应此改变,然后修改代码;
8)代码修改,重复测试:每次代码修改时,重复所有的测试以确保没有打乱代码。
2.对下列代码进行单元测试。 Triangle.java
public class Triangle {
// 定义三角形的三边
protected long lborderA = 0; protected long lborderB = 0; protected long lborderC = 0; // 构造函数
public Triangle(long lborderA, long lborderB, long lborderC)
24