软件测试技术
第一章
1.什么是软件?
是计算机系统中与硬件相互依存的另一部分。包括程序、数据、文档、服务
软件=程序+数据(库)+文档+服务
文档:(需求规格、概要设计、详细设计)说明书
用户帮助手册
2.项目流程:需求分析(需求文档)–产品设计(原型图,概要设计文档,详细设计文档)–开发编码、
单元测试—集成测试—系统测试—验收测试(用户的使用)
3.测试流程:测试计划—(需求分析、任务的分解)设计测试用例–执行测试,提交BUG—提交测试报告
4.什么是软件测试:软件测试是为了尽早尽快的发现在软件产品中所存在的各种软件缺陷而展开的贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程。
5.软件缺陷定义:从产品内部看:软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题
从外部看:软件缺陷是系统所需要实现的某种功能的失效或违背。因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。
6.软件缺陷的主要类型:
(1)软件未达到产品说明书中已经标明的功能;
(2)软件出现了产品说明书中指明不会出现的错;
(3)软件未达到产品说明书中虽未指出但应当达到的目标;
(4)软件功能超过了产品说明书中指出的范围;
(5)软件测试人员认为软件难以理解、不易使用,或者最终未实现用户所需的功能。
7.缺陷的主要来源:需求(56%)、设计(25%)、编码(13%)、其他(6%)
8.软件分类:
1.基本分类
(1)系统软件
操作系统、操作系统补丁程序,驱动程序
(2)应用软件
2.按照软件结构分类
软件的运行是否基于网络
(1)不需要网络:单机软件
(2)需要:分布式软件
C/S (Client/server客户端/服务器端结构软件):客户端需要使用专门的软件:QQ MSN
B/S(Browser/server 浏览器/服务器结构);
客户端只要使用浏览器即可访问服务:网站、论坛、搜索引擎
区分:C/S客户端上使用(手机);B/S浏览器/服务器上使用(电脑)
9.软件缺陷报告:
一.软件缺陷报告组成
1.缺陷编号(Defect ID):BUG的唯一编码,识别标志。
2.缺陷标题(Summart):简要的概述缺陷
3.缺陷的发现者(Detected By):一般就是自己
4.发现缺陷的日期(Detected on dete):一般就是当天,精确时间
5.缺陷所属模块(Subject):在测试哪个模块的时候发现的BUG,开发经理会据此找到Bug的修改负责人
6.发现缺陷的版本(Detectedin release):在测试哪个版本的时候发现的BUG
7.指派给谁处理(Assigned to):测试人员指派给开发经理。开发经理根据BUG所在的模块指派给相应的开发人员进行缺陷修改。
8.缺陷的状态(status):表明缺陷此时所处的情况处理状态
(1)测试人员发现BUG,把缺陷的状态写成:NEW(新递交的BUG)
(2)开发经理看到此BUG,进行验证,如果是BUG就把状态改为open(打开的BUG开发组承认的);如果不是BUG,把缺陷的状态改为:rejected(拒绝的BUG)
(3)开发人员看到指派给自己的BUG,进行BUG修改,修改完后,把状态改为fixed(已经修复的BUG,待返测得BUG)
(4)测试人员已经修复的BUG进行返测,如果返测成功,把状态改为closed(关闭的bug,归档的bug);如果返测失败,把bug状态改为:reopen(重新打开的BUG返测为不通过的BUG)
整个过程称为缺陷的处理流程(缺陷的跟踪过程)
NEW----OPEN—FIXED—CLOSED
Medium:发布之前修改
缺陷的严重程度(severity):
BUG对软件造成的影响有多大
Urgent:对软件和用户造成巨大影响BUG,如蓝屏,死机,重启等
Very High:非常严重的BUG
High:大的问题
Medium:中等程度的问题
Low:小的问题
每个等级包含的具体情况,需要在正式文档或测试计划中定义好标准
9.缺陷的优先级(priority)
测试人员希望程序在什么时候内或那个版本中解决该BUG
Urgent:立即修改(死机、蓝屏、爆炸)
Very high:本版本修改(影响用户的体验感)
High:下一个版本修改
Medium:发布之前修改
Low:允许发布中存在的BUG(细微的BUG,通过后期的软件升级或者补丁包得以修复)
需要考虑因素:
A:BUG的严重程度
一般BUG越严重,越优先(但不是绝对的)
B.BUG的影响范围
一般影响范围越大,越优先
C.开发组当前的工作进度
D.解决的难易程度
10.缺陷描述(Description )
把发现BUG的过程,使用工具以及如何复现BUG,操作过程记录下来。
面试题
1.缺陷的严重程度和优先级是不是成正比关系?
答:不一定
◆例如:1.界面问题的严重程度一般比较低,但先级可能最高—立即修复(影响用户)
2.某些重大的功能问题可能暂时解决不了,但不影响软件其他功能的使用,这时优先级可能定义的比较低—在发布之前修复
2…缺陷严重程度和优先级确定好以后,还会改吗?
答:可能会修改
◆例如:
测试人员确定一个缺陷为“立即修复”,但开发组认为这个缺陷不太好解决,而这个缺陷又不影响其他功能,这时可能要求在“下一个版本修改”或“发布之前修改”
3.是不是所有已发现的缺陷都会被修复?
答:不一定
有些缺陷修复的成本太高或者由于进度压力可能在发布之前得不到修复,这样的缺陷一定要经过项目组的讨论,权衡成本和风险,要确保不会对客户造成重大的影响及法律纠纷,后面通过升级软件或补丁的方式修复缺陷或弥补缺陷。
缺陷报告用途
1.记录BUG
2.对BUG进行分类(提交者,模块,版本,严重程度,优先级,状态)
3.对BUG进行跟踪管理(NEW----CLOSED)
4.对BUG进行分下,统计,总结
如何识别BUG
1.测试用例的预期结果(实际结果与预期结果不一致,就是BUG)
2.看需求(从BUG的5种情形类型的=定义判断)
3.与开发,需求人员,用户讨论
技巧:可以截屏
第二章 软件测试策略
软件技测试技术分类:静态测试和动态测试
静态测试:不运行程序,仅通过分析和检查等其他手段达到检测的目的
动态测试:通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等
软件测试阶段:单元测试—集成测试-----确认测试----系统测试----验收测试
一、动态黑盒测试:动态黑盒测试也称功能性测试(Functional Testing)或基于规格说明的测试(Specification Testing)这种测试形式忽略系统或构建的内部实现机制,仅关注与选定的输入及执行条件所对应的输出。
二、测试用例的基本概念:
1.测试用例主要记录了测试的过程,步骤,输入的数据,预期结果等内容。它是执行测试之前由测试人员编写的指导测试的重要文档
2.包括:编号、测试目的、用例描述(步骤,数据)预期结果
3.测试用例参考书目文档(编号、测试条件、测试步骤、预期结果、实际结果、测试人员、测试备注、)
(1)需求文档,用户手册,开发文档(不一定都有)
(2)对照已经开发出来的软件或软件的早期版本
(3)讨论沟通,最终确定这个是否定义为BUG
三、编写用例的方法(黑盒)
(1)等价类划分法(常用)
(2)边界值法(常用)
(3)因果图法
(4)判定表法
(5)正交排列法
(6)场景法
(7)测试大纲法(穷举法)
(8)状态转换图(不常用,被淘汰)
四、等价类划分
1、应用场合
只要有数据输入的地方,一般就可以使用。把无限的数据划分范围,从每个范围中只选取少数代表性数据进行测试,进而把穷举测试变为有限测试
说明:穷举测试从理论上讲是最完备的测试,但不现实,测试用例的方法就是使用最少的数据(成本)要求达到最大的测试覆盖效果。
2.核心概念
(1)有效等价类
对程序的规格说明有效的,合理的,有意义的输入集合。
程序接收到有效等价类数据,应该正确计算、执行—合法数据的集合
(2)无效等价类
对程序的规格说明无效的弥补合理的,无意义的输入集合
程序接收到无效等价类数据,应该给出错误的提示,或者根本不允许输入—非法数据的集合
说明:一个好的软件基于标准
(1)正确的数据正确执行
(2)异常处理能力:对于所(有)有意义无意义的非法数据能够处理,保证程序不受破坏(健壮性)。
3、使用的步骤
首先:明确测试对象
对于初学者,每次测试一个控件,在测试该控件的时候,保证其他要素没问题。
要测试:第一个文本框
1.根本需求,划分等价类(两位数加法)
(1)有效等价类
●-99-99之间的整数(例子)
(2)无效等价类
●<-99的整数
●>99的整数
●非整数(小数,中文,字母,符号)
2.细化等价类
一般不是根据显示的需求,而是基于对数据储存方式的深入理解,数据格式的详细划分。
(1)数据在计算机中按照补码存储,在正数负数计算补码的方法不一样,有必要把正数负数单独测试
(2)对于非整数可以进一步细化:小数,字母,汉字,符号
3.建立等价类表
有效等价类
编号 取值
1 -99—0之间的整数
2 0-99之间的整数
无效等价表
1 <-99的整数
2 >99的整数
3 小数
4 字母
5 符号
6 中文
7 为空
等级类的划分步骤
❶划分等级类
❷细划等级类划分
❸建立等价类表
❹编写测试用例
4.编写用例
从每个等价类中选取1个数据进行测试即可
1.如果一个控件一个控件测试,不可避免冗余
2.对于需求明确提出的特殊字符,最好先一个一个测试,最后在考虑组合情况,甚至有多个无效数据范围的组合。
方法二:边界值法
1.应用场合
只要有数据输入的地方,一般就可以使用边界值,—可以认为能够用到等价类的地方,往往就可以使用边界值。两种方法共同形成一套完整的测试方案。
2.如何使用
找到有效数据和无效数据点(最大值和最小值)及其两边的点单独进行测试
3.说明:边界值数据本质上属于等价类的划分范围,但是按照软件工程的思想需要单独拿出来测试,所以在测试等价类时尽量避免使用边界值的数据。
用例优化:
1.对于不同控件的有效等价类或有效边界值,可以尽可能的在一条用例中测试不同的控件的有效等价类可以组合。
2.对于不同空间的无效等价类在开始的时候只能一条用例测试一个—不能组合(避免屏蔽现象发生,前面控件的错误提示出现后,后面的错误提示就不出现了)
3.最后可以适当考虑无效等价类的组合情况(可以验证是否会有崩溃现象等)
考虑时间的成本
从简单到复杂
如果知道哪些组合使用更频繁,可以重点测试
最后可以考虑最糟糕的情况
小结:无效等价类重点考虑
1.必填项–测试为空
2.不允许重复–测试重复
3.数据要求一定范围—测试超出范围
比如:要求18-60,小于18,大于60
4.数据有个数的要求–测试超出范围
5.数据要求的格式:整数,小数,字符(字母,汉字,符号,0-9)
6.小数要求:小数点精度
无效等价类处理方式
1.允许输入无效等价类,后面给出错误提示
2.允许输入无效等价类数据,但可以自己纠正错误的数据
3.不允许输入无效等价类数据
因果图
包含I:表示abc这三个原因中至少有一个必须成立,abc至少有一个1,即abc中不能同时为0
互斥E:表示abc三个原因不同时存成立,最多只能有一个可能成立abc不同时为1,即abc中至多只有一个1
唯一O:表示abc中必须有一个成立,且仅有一个成立
要求R:表示当出现时,b必须也出现,若a=1,则b必须为1。即不可能a=1且b=0 (一个数是什么,另外一个数也必须是这个数,二者相等。)
屏蔽M:若a=1,则b必须为0;而当a=0时,b的值不定
一、应用场合
在一个界面中,有多个控件,控件之间存在组合关系,而且不同输入组合会产生不同的输出结果的组合,为了弄清楚输入输出的对应关系,使用因果图法(核心:考虑不同控件的组合)
二、核心概念
1.因------原因,输入动作
2.果------结果,输出结果
使用图形的方式表达出输入和输出的关系
互斥和唯一的区别:程序启动后,如果没有默认选项-----互斥,如果有默认选项,就是唯一。
分析步骤:
1.找出“因”(输入动作)
编号
(1)投币50元
(2)投币100元
(3)充值50元
(4)充值100元
2.找出“果”(输出结果)
编号
A、充值成功,退卡
B、提示充值成功
C、找零
D、错误提示,退卡
这两步初步需求的过程
3.在步骤1的基础上,找到输入的限制关系和组合关系
一、限制关系(哪些输入不能组合在一起)
(1)和(2)互斥,(3)和(4)互斥
二、可以组合的(决定用例数量)
(1)和(3)组合
(1)和(4)组合
(2)和(3)组合
(2)和(4)组合
(1)单独
(2)单独
(3)单独
(4)单独
4.在步骤二基础上,找到输出的限制关系和组合关系
(1)限制关系
A和D互斥
B和D互斥关系
(2)组合关系
A和B必须组合(要求R关系)
A.B.C组合
C和D组合
D单独
步骤3,4是深入分析需求的过程
5.根据3(二)和4(2)找出什么样的输入组合会产生什么样的的输出结果,使用因果图表达
情况1:
①(1)和(3)的组合
会产生:A和B的组合
情况2:
②(1)和(4)的组合
会产生:C和D 的组合
情况3:
③(2)和(3)的组合
会产生:A.B.C 的组合
情况4:
④(2)和(4)的组合
会产生:A和B的组合
情况5:
⑤(1)单独
会产生:C和D的组合
情况6:
⑥C.D组合
总结:
因果图考虑空间组合,要求把所有的组合情况找到,并且使用因果图的控件一般包括:按钮,单选按钮,复选框,列表框(只有2-3项取值时)
判定表:判定表由“条件和活动”两部分组成,即列出一个测试活动执行所需的组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑一个选择。
判定表法步骤
1.列出条件桩
2.列出动作桩
3.填入条件项及其组合
4.填入动作项,制定初始判定表
5.简化、合并相似规则或者相同动作
判定表的组成
条件桩:问题的所有条件
动作桩:问题的所有输出
条件项:针对条件桩的取值
动作项:条件项的各种取值情况下的输出结果
规则:任何一个条件组合的特定取值及其相应要执行的操作
正交排列法:
一、场景运用法:有很多控件,每个控件有多个取值,要考虑不同控件不同取值之间的组合,组合数量较大,而且没有必要为每一组合编写用例-----挑选哪些用例更优化
说明:因果图要求控件较少,并且要求把所有的组合测试全面。正交排列法适用于组合数量巨大,但没必要测试全部。
二、正交表
正交表记为:Ln(m^k)
n是表的行数,也就是需要测试的组合次数
K是表的列数,表示控件的个数(因素的个数,或因子数)
M是每个控件的取值个数(各因素的水平数,即各因数的状态数)
如:L9(3^4):4个控件,每个控件取3个值
三、使用正交表来分析程序
1.分析需求—找出有多少个控件组合
每个控件的取值—列出表格
2.选择一个适合的正交表
(1)根据控件的个数选择正交的“次幂”(列数)k
列如:4个控件—4次幂
(2)根据每个控件取值个数----选择正交表的“底”(每列中有多少个值)
列如:每个控件有3个取值—底为3
3.把控件名称和控件的取值映射到正交表
(1)把正交表的列名(ABCD)分别用控件名代替
(2)把正交 表中每列取值(1.2.3.4……)用相应控件取值代替。
4、编写用例—正交表
场景法
一、应用场合
1.适合使用场景的软件界面的特点:没有太多填写项,所有的操作都是通过鼠标点击、双击、拖拽等,(五子棋、CS)游戏,画图软件。
2.把自己当成最终的用户,使用软件,设计出在使用软件过程中重要的操作,一般包括两类:
(1)模拟用户完成正常功能,核心业务逻辑的动作—验证功能的正确性。
(2)模拟用户操作中出现的错误—验证程序异常处理能力。
3.场景法主要基于:
(1)业务(需求)层面:
要求多种测试的软件的业务逻辑,主要功能精通
(2)技术层面:基于等价类划分技术,模拟正确的操作—有效等价类:模拟错误的操作----无效等价类
4.核心概念
(1)基本流(有效流、正确流),模拟用户正确的操作流程
(2)备选流(无效流、错误流)模拟用户错误的操作流程
二、使用场景法分析程序
案例1:ATM机取款的功能
1.分析需求,找出基本流(正确的操作)和备选流(可能出现的错误)(如:插一张公交卡,密码错误等)
(1)基本流----正确取款
(2)备选流----在取款过程中会遇到哪些错误
就是列出主要测试的功能点(或者看成整理出自己测试的思路)
2.根据基本流,备选流列出场景
3.根据场景,编写用例
说明:场景和用例并不一定是一对一关系。
测试大纲法:
一、运用场景
程序涉及多个窗口,每个窗口有多个操作:窗口和窗口之间有密切的联系(操作和操作之间存在联系),为了弄清窗口和窗口之间动作的联系,可以使用测试大刚法
二、弄清程序
1.列出提纲----分析需求:列出所有窗口及每个窗口做的动作(注意窗口之间的先后顺序)
(1)主窗口
1)选择某个专卖店类型(3个)
2)点击地图
3)帮助
(2)“专卖店”窗口
1)选择某个专卖店
2)主菜单
3)帮助
(3)“地图”窗口
1)打印
2)上一页
3)主菜单
4)帮助
(4)“帮助”窗口
1)上一页
2)主菜单
说明:对于有很多选项的列表框控件,一般也要使用等价类(中间某个项属于有效等价类和边界值(第一项看成最小值,最后一项看成最大值)方法
各种用例方法的综合策略(七种方法总结)
1.最重要
(1)场景法
为了测试软件的主要业务流程,核心功能以及处理能力(界面中填写项较少),使用场景法
核心概念:基本流(正确的),被选流(错误的)
(2)等价类划分
界面中含有用户输入的内容(也包括让用户选择),把无限多的数据进行分类,进而减少用例数量。
核心概念:有效等价类,无效等价类
2.重要
(1)边界值
有效无效数据的分界点,可以对分界点及其两边的点进行测试
一般有数据范围要求(年龄:18-60整数)
说明:
a)在实际工作中,经常遇到需求不太明确,没有给出数据范围,必需等需求明确后测试。
b)最大值最小值重要性高于边界值,可以优先测试,如果实际不允许的情况下,次要的边界值可以不测试。
(2)判定表/因果图
考虑按钮,复选框,单选按钮,选项个数较少(2-3)的下拉之间的组合(一般组合数量较少,20种以下)
记住图形符号
3.次重要
(1)正交排列法
考虑控件的取值组合(组合数量巨大,没有必要全部测试)
(2)测试大纲法
多界面测试
需求分析
根据客户的需求,清楚了解客户需求中的产品功能,性能,界面和具体规格等,然后进行分析,确定软件产品所要达到的目标
概要设计
系统分析员审查软件计划、日案件需求分析提供的文档,提出候选的最佳推荐方案,确定模块结构,划分功能模块,将软件功能需求分配给所有的最小单元模块。确定模块间的联系,确定数据结构、文档结构、数据库模式等
详细设计
为每一个模块确定使用算法,并用适当的工具(如流程图)表达算法的过程。写出模块的详细过程性描述;确定每个模块使用的数据结构;确定模块接口的细节,包括用户界面、数据输入输出等全部细节。
什么是单元测试
◆单元测试是对软件基本组成单元进行测试,主要是为了发现单元内部可能存在的各种错误和不足
◆主要工作分为两步骤:人工静态检查和动态执行跟踪
◆一般有开发组在开发组长监督进行
什么是单元
◆一个函数
◆类或类成员函数
◆几个函数的集合
(1)依据是详细设计文档
(2)以黑盒(功能)测试为主,核心模块或风险较高模块可以辅助使用白盒测试(检查代码)
(3)多个模块可以同时进行
(4)可能需要测试人员编写驱动模块和桩模块
驱动模块:模拟被测模块上一级模块的那个模块(调用被测模块的那个模块)
桩模块:模拟被测模块下一级模块的那个模块(被测模块所调用的模块)
(5)在现在的很多公司中,由于成本问题,可能会省略单元测试过程,一般由开发人员进行自我检测。
什么是集成测试
集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统所进行的测试
(1)集成测试会形成很多的临时版本,在拿到一个新版本后,一般用较少的时间(0.5-2)天和较少的人(1-3)个人,由经验丰富的人对软件的主要功能进行检查验证,如果该版本值得一测,再由全部测试人员投入其中,如果软件不值得测试,没有测试的意义的话,打回开发组—冒烟测试。
集成测试关注的重点
◆模块接口的数据交换
◆各子功能组合起来能否达到预期要求的父类功能
◆模块是否有不利影响
(2)基本测试思路
1)冒烟测试(是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。冒烟测试又称版本验证测试。冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件的基本功能正常,可以进行后续的正式测试工作。)
2)返测(复测)上一个模块针对解决的BUG进行测试,检查是否修复
3)回归测试:对于上一个版本中的用例执行一遍(把上一个版本中的所有功能再测试一遍)
4)对该模块新添加的功能进行测试
(3)集成测试以功能测试为主,一般对于发现的BUG的地方,可以适当采取白盒测试
集成方法
◆大爆炸集成
◆自顶向下集成
◆自底向上集成
◆三明治集成
大爆炸集成
大爆炸集成也称为一次性组装或整体拼装,这种集成测试策略的做法就是把所有通过单元测试的模块一次性集成到一起进行测试,不考虑组件之间的相互依赖性及可能存在的风险
自顶向下集成
自顶向下的集成测试就是按照系统层次结构图,一主程序模块为中心,从顶层控制(主模块)开始,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试
采用设计顺序一样的思路对被测系统进行测试,来验证系统的稳定性
自底向上集成
自底向上集成是从系统层次结构图的最底层模块开始按照层次结构图,逐层向上进行组装和集成测试的方法
三明治集成
三明治集成是一种混合增殖式测策略,综合了自顶向下和自底向上两种集成方法,把系统划分成三层,中间一层为目标层,目标层上采用自顶向下集成,目标层下采用自底向上集成。
什么是系统测试
系统测试是将集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据等其他系统元素结合在一起,在实际运行环境下所进行的一系列测试活动。
系统测试的目的
通过与系统图的需求定义比较,检查软件是否存在与系统定义不符或与之矛盾的地方,以验证软件系统的功能和性能等满足其规约所指定的要求。
黑盒测试的非功能测试包含以下:
◆强度测试 容量测试
◆性能测试 文档测试
◆安全测试 恢复测试
◆安装与卸载测试 安全测试
◆配置测试 可靠性测试
◆兼容性测试
◆故障恢复测试
◆使用性能测试
◆帮助菜单及用户说明测试
系统测试:
(1)在系统测试之前,一般都有确认测试,需要确认
a)整个系统是否值得测试-----冒烟测试
b)确认相关文档(尤其是给用户的是否齐全–文档的确认
确认测试是用较少的人和时间对程序和文档进行确认,如果程序较为稳定,可以进入全年的系统测试阶段,如果文档不全,需要让相关的人员尽快解决。
验收测试:(UAT user acceptance test)用户体验测试
(1)alpha测试:在开发的环境中,最终用户参与的测试,在实际工作中,经常由开发、测试人员,或公司其他人员充当用户完成此阶段。
(2)Beta测试:在用户的实际环境中,由最终用户参与,一般就使用实际数据。
三软件测试的模型
1.体现开发和测试活动的对应关系
2.V模型
(1)优点:指明了测试划分不同的阶段,每个阶段与开发阶段的对应关系明确。
(2)缺点:给人感觉测试只是开发完成之后才参与的活动,不符合早点测试和不断测试原则。
(3)深入理解:在每个开发阶段完成之后,测试人员应该参与相关的文档测试,并根据文档对后期的测试工作进行设计和用例的编写。
3.W模型:
由双V组成,第一个V为开发活动,第二个V未测试活动,即包括文档测试,也包括了程序的测试。
优点:
●符合尽早测试和不断测试目的
●符合实际工作中的测试活动
黑盒测试 白盒测试
规划方面 针对功能的测试 针对结构的测试
优势方面 能确保从用户使用角度出发进行测试 能够对程序内部的特定部位进行覆盖测试
应用举例 等价类划分法、边界值分析法、因果图法 语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、基本路径覆盖、环境覆盖、模块覆盖、接口覆盖
四、软件测试分类
按照软件测试技术划分:黑盒测试,白盒测试,灰盒测试。
说明:
(1)任何阶段任何模块都要做黑盒测试,只对风险较高,核心模块进行白盒测试(通过检查代码查找BUG)
(2)白盒测试重点检查代码的逻辑,功能,结构的正确性,白盒测试需要编写用例,成本较高,白盒而是在单元测试,集成测试可能会有一些应用,但是在后期基本不用(除非出错的情况比较多)
经常测试是结合白盒测试和静态测试的要素,形成“静态白盒测试”(不仅关注规范,还需测试代码逻辑)
回归测试:
●回归测试是对软件的新版本测试时,重复执行上一个版本。
●在发生修复之后重新测试新版本的软件以保证修改的正确性,以及修复后没引起新的错误。
随机测试:随机测试也称为猴子测试,一般用例执行完成之后,如果还有时间,可以采用随机测试(盲目性比较大)或者错误测试(具体针对性,根据经验判读那个地方容易出错,对这个地方有意识地测一些)(不需要写用例根据时间,相当于抽样检查。)
白盒测试
一、白盒测试的概述
1.为什么要做白盒测试:往往一个缺陷不是由一个原因引起的,而此时看代码更容易看出缺陷产生的原因,更省时。
2.什么是白盒测试
A.白盒测试透明盒测试逻辑驱动测试→基于代码测试
补充:黑盒测试==数据驱动测试→基于功能测试
B.测试被测单元内部的逻辑结构(一般情况下,白盒测试发生在单元测试阶段)
C.测试用例可以覆盖代码中执行语句,分支(判定)条件,基本路径。
3.白盒测试的目的
A.保证关键路径被执行
B.便于衡量测试完整性
C.可以覆盖代码中判定的真、假分支
D.检查内存泄漏
例:C:malloc()—在内存中开辟一个空间执行一个free()才能释放
VBS:set myreg=new RegExp—
Set myreg=mothing
E.检查程序的异常处理能力
F.解决实验条件下,很难搭建真实环境下的问题
G. 检查代码是否遵守规范
代码规范的好处
1.可靠性
2.可读性
3.可维护性
4.可移植性(平台,硬件,编译器)
二、静态白盒测试
1.什么是静态测试
测试计算机的非运行部分:文档,代码是否符合标准,设计结构,质量度量等,它可以是人工进行,也可以借助软件工具自动进行
2.静态白盒测试
A.不执行软件的条件下,检查和审查代码的设计,结构等,也叫结构分析。
好处:尽早的发现30%—70%左右的缺陷,可以为黑盒测试人员提供思路
3.静态白盒测试策略
A.桌前检查
B.代码检查(不需要测试用例)
C.代码走查(不需要测试用例,与会者充当计算机,根据用例模拟代码走向)
(与会者:程序员,开发语言专家,行业专家,测试人员等)
D.代码审查(四要素:确定问题、遵守规则、准备、生成报告)
4.审查单
A.数据引用错误
B.数据声明错误
C.计算错误
D.比较错误(浮点数比较:两数相减加绝对值是否小于精度。如果小于----相等,如果大于—不相等)
E.控制语句错误
F.子程序调用
G.输入/输出错误
H.其他检查(兼容性/移植性)
三、动态白盒测试
由于是动态的,就一定是测试运行中的程序,由于是白盒,就一定要洞察盒子里面,检查代码并观察运行状况。
动态白盒测试方法:
1.逻辑覆盖
程序流程图
A.判断使用菱形
B.可执行语句使用长方形
C.开始和结束使用四个角为圆的长方形
D.路径使用箭头连接
判定:M:a>0 and b>0 Q:a>1 or c>1
1.语句覆盖
基本思想:设计若干条测试用例,保证程序中所有语句执行语句至少被执行一次。
优点:通过程序流程图,可以很直观的看出,很便利设计测试用例
缺点:没有考虑判定所有取值的情况,判定条件没有考虑周全。
例子:MY and QY
a>0 and b>0,a>1 or c>1
用例:a=2,b=5,c=9
A=1,b=3,c=0
2.判定覆盖
基本思路:设计若干条测试用例,保证程序中每一个判定的真分支,假分支(如果多分支结构,判定的所有取值都要考虑到)至少被执行一次
优点:考虑到判定的所有取值情况,实现了语句覆盖
缺点:没有考虑取值情况
例子:MY and QY
MN and QN
判定:M:a>0 and b>0 Q:a>1 amd c>1
a=1,b=7,c=-7
a=-9,b=10,c=5
--------如果满足判定覆盖,一定满足语句覆盖---------
3.条件覆盖
基本思想:设计若干个条件测试用例,保证每个判定中每个条件的取值情况,至少被执行一次。
优点:考虑了每个条件的取值范围。
缺点:满足条件覆盖,不一定满足判定覆盖。
判定:M:a>0,b>0, Q:a>1,c>1
M:T1:a>0 F1:a<=0
T2:b>0 F2:B<=0
T3:a>1 F3:a<=1
T4:c>1 F4:c<=1
例子:T1T2T3T4
用例:a=2 b=1 c=3
a=-2 b=-3 c=0
4.判定条件覆盖
基本思想:设计若干条测试用例,保证程序中每个判定中的每个条件的取值情况至少被执行一次,并且要保证每个判定的所有的取值。
优点:既考虑了判定取值情况,又考虑了判定中每个条件的取值情况
缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况
例子:T1T2T3T4 F1F2F3F4
用例: a=2,b=1,c=6 覆盖T1,T2,T3,T4:M的Y分支和Q的Y分支
a=-1,b=-2,c=-3 覆盖F1,F2,F3,F4 M我N分支和Q的N分支
=====满足判定条件覆盖,一定满足判定覆盖,一定满足条件覆盖,一定满足语句覆盖
=====满足条件覆盖,不一定满足判定覆盖
=====满足判定覆盖,一定满足语句覆盖
X=4,z=7,y=6
X=3,z=11,y=4
5.条件组合覆盖
基本思路:将一个判定的所有条件的取值情况,进行条件组合,设计若干条测试用例,保证每个条件组合至少被执行一次。
优点:条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。
缺点:线性地增加了测试用例的数量。
6.路径覆盖
7.设计所有的测试用例,来覆盖程序中的所有可能的执行路径
优点:这种测试方法可以对程序进行彻底的路径测试
缺点:需要设计大量、复杂的测试用例,使得工作量呈指数级增长,而且不见得把所有的条件组合都覆盖。
(扩展点)基本路径设计测试用例方法
1.会画控制流图—简化的程序流程图
一个圈:代表一个节点(只出去一个箭头)
箭头:边or连接
一个圈:判定节点(出去至少两个箭头或者说至少出去两条边)
区域:有节点和边连接起来的范围叫区域
2.会,计算圈复杂度(环路复杂度)
V(G)=区域数
V(G)=边个数-节点数+2
注意:以上两种计算方法适用于计算多分支结构的控制流程图
V(G)=判定节点个数+1
注意:不还适用于计算多分支结构的控制流程图
3.根据圈复杂度导出独立路径的数目
eg:V(G)=4
V(G)=10-8+2=4
V(G)=3+1=4
4.根据基本路径,编写测试用例
自动化测试
1.为什么功能测试使用自动化测试工具?
(1)存在大量回归测试
(2)存在大数据的测试
(3)自动化测试工具可以严格高效的完成测试
(4)节省人力成本
2.使用自动化测试工具条件?
(1)需求稳定
(2)冒烟测试通过
3.常用的自动化测试工具
(1)HP MI QTP
(2)HP WinRunner
(3)QARun
(4)IBM Rational Robot
(5)开源selenium
二、QTP简介
1.QTP全称:Quick Test prfessional
2.关键字驱动:把被测试系统中的控件识别成对象,测试用例是对对象做各种操作
3.QTP,使用VBS语言
三、QTP界面介绍
1.插件管理界面
根据被测系统使用的技术决定选择插件的类型
主界面中Tools\Options\General\Diispla y Add-in Manager 选项勾选,显示插件管理界面
2.如何新建一个test
方式有三种:
(1)点击“StartPage”后的“Test”标签
(2)工具栏中的“New”快捷键
(3)菜单栏中的File\New\Test
3.两个视图
4.Keyword View(关键字视图):表格形式展现步骤
Expert View(专家视图):VBS 代码的形式展示步骤
注意:两个视图中的代码是一一对应的,是一个代码的两种展现方式。
4.QTP一次只能打开一个Test,也可以在电脑上安装一个虚拟机后,就可以同时打开两个了。
5.关键字视图中的列:
(1)Item(项目):页面操作的控件
(2)Operation(操作):对页面控件做什么操作
(3)Value(值):操作时使用的数据
(4)Documention(步骤说明):
(5)Comment(注释):默认不显示,右键点击列头,选中comment,就可以显示该列,自定义添加注释。
6.ActiveScreen(界面截图)
7.录制的三种方式
(1)工具栏”Record”快捷按钮
(2)F3
(3)菜单栏Automation\Record
8.停止录制的三种方式
(1)工具栏”Stop”快捷按钮
(2)F4
(3)菜单栏Automation\Stop
9.回放的三种方式
(1)工具栏”Run”快捷按钮
(2)F5
(3)菜单栏Automation\Run
10.系统设置
(1)设置关键字视图的字体大小,显示关键字视图界面,Tools\Options\Fonts and colors,设置size
(2)设置专家视图的字体大小,显示关键字视图界面,Tools\Options\Fonts and colors,设置size
(3)回放时间间隔的时间设置
Tools’\Options\Run\Run mode 运行模式
Fast:快速,无间隔
Nomal:正常,设置步骤和步骤之间时间,单位是毫秒。
(4)恢复到默认页面布局
Tools\Optiobs\General\Restore layout按钮(让QTP恢复成默认布局)
11.测试结果的查看
(1)查看Test Results Summary(测试结果总结)
(2)展开测试结果,查看具体执行步骤的结果 view\expand All,查看具体步骤的运行结果。
四、自动化测试流程
1.需求分析
2.制定测试计划
3.录制测试脚本
4.增强测试脚本
5.使用QTP的回放机制,执行测试
6.分析测试结果,提交结果报告
五、Flight系统介绍
1登录. 飞机登入系统入口
(飞机登入账号:)AgentName:4-10个字符
(飞机登入密码:)Password:Mercury
2.订票
3.订票日期:格式为:月日年 mm\dd\yy,大于当前系统的日期
当我们选择了Flyfrom(起始地)和Flyto(目的地)后,Flights 的按钮才可以用Tickets:1-10的整数
3.打开订单,更新订单,删除订单
4.退出
六、使用自动启动方式录制回放WinApp程序(重点)
步骤
(1)点击“Record”
(2)在Record and Run Settings(录制和运行设置)对话框中,选择Windows Application窗口,然后选择Record and run only on:勾选Appliicayions open by Quicktest和Application specifed below,通过+好添加被测系统
(3)点击record录制操作程序
(4)点击stop停止录制
(5)点击run回放代码
注意:在录制,回放代码前,都要关闭被测系统
练习:Flight系统,使用自动启动方式,录制登录-创建新订单-退出,回放
练习2:Notepad,使用自动启动方式,录制启动-输入abc-关闭记事本-提示保存-点击否-回放(c:\WINDOWS\system32\Notepad.exe)
七、手动启动录制WinApp程序
步骤:(1)点击“Record”
(2)在Record and run settings里,选择Windows Application窗口,然后选择Record and run any open winiows-basedapplication(在任何已打开的应用程序里录制和运行)
(3)手动打开被测系统
(4)点击“record”录制操作程序
(5)点击“stop”停止按钮
(6)点击“run”回放代码
注意:
a.回放前,检查录制好的程序,切换到专家视图,删除WinListView(“SysListView32”).Activate之前所有的步骤代码
b.回放前,关闭被测系统
练习3:Flight,手动启动的方式,录制登录系统-打开编号为10的订单-退出,回放
练习4:calc,手动启动的方式,录制3+6=关闭计算器,回放(c:WINDOWS\system32\calc.exe)
八、使用QTP自动启动录制WEB系统
1.IE设置:取消自动完成
2.如果出现录制不到脚本的情况,可以设置:IE\Internet选项\程序\管理加载项\选择BHOManager Class状态改为“已启用”。
3.重启IE
4.录制回放步骤
(1)启用QTP时,要加载WEB插件
(2)点击“Record”开始录制
注意:录制前把浏览器关闭
(3)在Record and run settings(录制和运行设置)里,选择 open the following addres when recored or run sessions begins,在下面下拉框中输入被测系统网址,选择IE浏览器,点击确定,开始录制
(4)点击“Stop”停止录制
(5)点击“Run”回放(回放前,关闭浏览器)
说明:录制前,只能使用IE浏览器录制,回放前可以通过代码制定其他浏览器
九、QTP实现原理(非常重要)
1.对象仓库:Resources\Object repository (Ctrl+R)
2.录制原理
(1)获得被操作对象的所有属性
(2)用唯一的对象名称在对象库里记录该对象
(3)在对象库中存储该对象的全部属性
(4)标识对象的关键属性(Description Properties)
(5)在测试脚本中记录对象所做的操作和数据
3.回放原理
(1)从测试脚本中获取对象名称(Item 列)
(2)使用对象名称在对象窗仓库中获取到关键属性(Description Properties)
(3)使用关键属性在被测系统中识别唯一操作对象
(4)使用脚本中的操作(Optration 列)和数据(Value列)驱动被测系统的实际运行对象
4.如何把对象添加到对象仓库
(1)对象仓库页面,工具栏里的“Add Object Local”(添加对象到对象仓库)按钮,鼠标变成手型,点击 添加对象,确定添加
(2)ActiveScreen 里页面元素上右键点击,然后选择“View/Add Object”,确认添加,只适用于ActiveScreen里显示的控件
5.概念
(1)TO:Test Object 对象仓库中存储的对象
(2)RO:Run-time Object 运行时对象,被测系统实际运行时的对象
6.Object Spy(对象探测器)
作用:查看当前系统中的实际运行对象(RO)的所有属性
位置;
(1)QTP主页面的工具栏中的小人头图标
(2)QTP主页面的Tools\Object Spy
(3)对象仓库中的工具栏中的小人头图标
(4)对象仓库 Tools\Object Spy
步骤:
(1)打开Object Spy
(2)打开被测系统,展示出要探测的目标页面元素控件
(3)点击Object Spy上的手型按钮,点击要查看属性的页面元素
注意:如果Object Spy遮挡被测系统的控件,按住左Ctrl键,显示出控件,再捕获。
补充:系统设置
(1)对象同步时间:默认是20秒,可以修改
(2)位置:File-Settings\Run\Object Synchronization tiomeout: xx seconds
意义:回放时到被测系统中识别对象(步骤(3)使用关键属性在被测系统中识别唯一操作对象)的最长时间
十、检查点
(1)添加步骤
A.添加要操作的步骤的对象到对象库
B.确定要添加位置,选中该位置上一个步骤
C.右键,选择insert New s t e p
D.在item列中选择对象,Operation中确认操作步骤,在value列中填入数据
(2)删除步骤
右键\delete step
(3)修改步骤
修改intem、operation,value均可修改
(1)为什么要插入检查点
需要检查预期结果是否正确,来验证被测系统功能是否正确
(2)什么是检查点
在自动化脚本中插入预期结果,运行回放时,QTP取得被测系统运行时实际结果数据,和预期结果对比,如果一致,在被测结果报告中,添加一个pass的结果步骤,否则,添加一个Failed的结果步骤。
(3)检查点的类型
●标准检查点
●位图检查点
●文本\文本或检查点
●表检查点
●图像检查点
●数据库检查点,页面检查点,XML检查点,课访问性检查点
(4)标准检查点
1.作用:检查对象的属性
2.步骤:
(1)确定检查的对象
(2)确定检查对象的属性名称
(3)确定插入检查点的位置(哪个步骤之后)
(4)开始录制,录制过程中插入检查点,具体步骤如下:
a.到(3)的步骤之后,点击insert(插入)\checkpoint(检查点)\standard checkpoint(标准检查点)
B.点击要操作的对象
C.确定对象
D.在checkpoint property(检查点属性)对话框勾选确定要检查的属性,点击属性,设置属性值,点击确定。
3.录制结束后插入检查点
(1)关键字视图中插入检查点
限制:检查对象必须属于当前的某个操作步骤
步骤:选中检查对象的操作步骤,insert\checkpoint\standard checkpoint
注意:检查对象必须在ActiveScreen中存在
步骤:在相应的对象上右键 insert standard checkpoint
注意:检查点插入位置,当前步骤之前\之后
(5)位图检查点
1.位图检查点:主要作用于检查页面UI是否和原来一致
2.步骤:
(1)确定检查的对象
(2)确定检查点插入的位置
(3)录制过程中:
a.insert\checkpoint\bitmap checkpoint
B.点击要检查的对象
C.在(checkpoint property)检查点属性对话框中,确定检查的范围:整张图,区域检查
注意:如果检查对象非方形区域,需要勾选部分区域进行检查,不能检查整张图
补充知识点:
系统设置:Tools\Options\run-ScreenCaptuer,Save still image capture results:
Always(总是截图),For errors(失败才截图),For errors and warning(失败和警告时截图)
(6)文本检查点
作用:检查制定文本是否出现
步骤:
(1)确定插入检查点的位置
(2)确定检查的文本内容
(3)录制过程中,insert\checkpoint\Text Checkpoint
(4)回放,查看结果报告
(7)文本域检查点
作用:检查在指定区域内是否显示指定文本
(1)检查的范围不同:文本及检查点检查对象是文本内容,文本区域检查点检查指定区域诶是文本域的对象,一般为static的父对象
(8)检查点失败的原因有可能
测试的代码有问题
(1)检查点插入的位置不对(一定要在步骤之后)
(2)TimeOut时间设置的问题(File-settings-run-object synchroonization timeout-seconds)在设置这个时间内,没有找到这个对象就会报错
被测系统问题:
(3)需求变动
(4)系统BUG
(9)为什么需要做DataTable参数化
相同的业务流程,不同的只是测试数据不同
实现业务和数据的分离,方便维护代码和数据
(10)什么是DataTable参数化
1.分析要反复执行的代码,进行录制
2.做参数化,两种方式
(1)先定位参数化的数据,再创建DataTble参数,具体如下
A.点击要参数化的数据Value列的<#>按钮
B.在Value configuration options(值配置选项)对话框,选择“Parameter(参数)”单选按钮
C.在Name中输入参数名称,点击ok
(2)线创建Datatable参数,在参数化数据,具体如下:
A.在datatable的Global表中,点击某一列的标题,输入参数名称,ok
B.点击要参数化的数据的value<#>按钮
C.在Vale configuration options(值配置选项)对话框中,选择“Parameter(参数)”
D.在name中选择a步骤中创建的参数名称
3.在datatable中输入要测试的数据
4.设置循环次数:File\Settings\Run\Datatble Iterations
(1)Run one Iteration only(只运一行)
(2)Run on all only(运行全部行)
(3)Run from row[x] to [y](从第x行运行到y行)
(12)Datatable参数注意点(重点)
1.在diamante的开始和结束,被测系统都要处于相同的状态
2.对一个数据做参数化,受影响的其他数据也要做参数化
知识补充
Wait 3 ----等待3秒
在需要等待的步骤后,添加语句wait
比如:flight登陆之后,Insert order点击之后
(13)检查点的参数化
步骤:
1.点击检查点value列,编辑按钮(对号)
2.把constant修改为parameter,点击编辑按钮修改为参名称,ok,确定
3.在Datable中添加预期结果数据
(14)建立输出值
1.为什么药建立输出值
关心运行时系统实际运行数据,这些数据用于后续的业务流程
2.什么是输出值/输出值类型
输出值类型:标准输出值,文本输出值,数据库输出值,XML输出值
3.建立标准输出值
(1)作用:输出运行时被测系统中的对象的时间属性值
(2)步骤:
A.确定要操作的对象
B.确定输出对象的属性名称
C.确定建立输出值的位置
D.录制代码过程中,insert\output(输出值)\standard outup value(标准输出值)
E.在弹出的output value properties(输出值属性)界面,选择相应属性
F.选择输出值的位置datatable
G.运行代码,到结果报告后nun-time datable(运行时数据表)中查看值
代码补录:
1.确认补录的位置和内容
2.把被测系统改为手动启动
3.光标停留在补录代码的位置
4.被测系统打不开,保留在补录的状态
5.点击record 开始补录步骤
6.点击stop制止补录
7.修改启动方式为自动启动
注意:补录步骤开始和结束和现有的步骤衔接正常。
Action
1.什么是Action
Action(动作)是逻辑单元,是一些列测试步骤的集合。
Test执行时,按顺序调用Action
2.为什么要使用多个Action
(1)便于代码维护和阅读
(2)实现某些步骤的复用
(3)每个Action有独立的Datatable,便于测试数据的管理和维护
(4)可以实现代码的局部复用
(5)每个Action有独立的对象仓库,便于维护和管理
3.Action的分类
(1)不可复用Action-Non-Reusable Action只能在本test里调用,不能被其他test调用
(2)可复用Action-Reusable Action,可以被其他test调用,但是只能读取,不能编辑,只有本test才有权限编辑
4.如何使用多个Action
(1)创建新的Action的方式—Call to new Action(创建新的Action)
A.insert\call to new Action
B.在Name中输入Action名称,Reusable Action 复选框中选择是否可复用,Description中添加Action描述,选择Location(位置)
At the end of test(并列,兄弟Action)
After the current setp(父子,子Action)
(2)生成多个Action的方式有两种
A.先创建多个Action再录制代码,录制代码过程中切换Action
B.录制diam过程中,创建Action
(3)修改Action属性
在Action上点击右键\Action properties(Action 属性),修改Name,是否可复用
(4)创建新Action的方式–call to copy of Action(复制Action)
A.insert\call to copy of Action
B.在Action selection(选择Action)对话框中,选择test,选择是否编辑Action,选择是否编辑Action属性,选择location(位置):At end of test(兄弟关系)
注意:a.可复用和不可复用Action都可以被复制
B.复制的Action可以修改
(5)创建新Action的方式----call to existing Action(调用Action)
A.insert\call to existing Action
B.在Action selection(选择Action)对话框中,选择test,选择Action,选择Location(位置):At the end of test
注意:
A.可复用的Action可以被调用,不可复用Action不能被调用
B.调用的Action不能被编辑
(6)切割Action
A.选择第二个Action的第一个步骤
B.在End\Action\Split Action(切割Action)
C.在Split Action对话框中,左侧选择第一个单选按钮 independent of each other(兄弟关系)
D.右侧 lst Action 和2end Action 中输入相应的Action,点击OK
注意:
A.切割Action,对象库不能切割,复制
B.一次只能把一个Action切割成两个
三、Action参数化
1.为什么Action参数化
实现局部反复
2.什么是Action参数化
在Action自有表单中准备参数数据,设置action的反复次数,实现单独Action代码的反复执行,每反复执行一次,成为一个“Action反复”
3.Action参数化的步骤
(1)选定要做Action参数化的数据,点击“<#>”
(2)选择parameter,输入参数名称name,在location in datatable(在datatable位置),选择current action sheet(local)(当前action的本地表单)
(3)在Action的本地表单中准备数据
(4)右键Action,在Action Call Paroperties 窗口设置反复次数
注意
A.某个数据做Action参数化,手影响的其他数据也要做Action参数化
B.如果Action反复次数大于1次,Action代码的开始和结束,被测系统处于同一个状态
VBS基础知识
1.Dialog(“Login”).WinEdit(“Agent Name:”).Set “zhangsan”
(1)操作对象的名称:Agent Name
(2)操作对象的类型:WinEdit
(3)操作对象的父对象名称:Login
(4)操作对象的父对象类型:Login
(5)操作方法:Set
(6)操作数据:zhangsan
2.专家视图每行代码的种类
(1)录制的一个操作步骤:
(2)VBS的语句——IF
(3)系统函数——wait
(4)注释
3.操作步骤的格式
(1)对象的描述,对象类型(“对象名称”)
(2)顶级对象,父对象,父对象……操作对象
(3)父对象与子对象之间用(,)分隔
(4)对象和操作方法之间也是用(。)分隔
(5)操作方法和操作数之间用半角空格分隔
(6)对操作数据之间用半角逗号(,)分隔
4.WindowsApplication里常用的空间和常用的操作方式
(1)WinEdit(文本框)——set“数据” setSecure “加密数据”加密设置
(2)WinEdit(按钮)——Click(点击)
(3)WinEdit(组合框)——Select“选择内容”(选择),比如:Fly ,Fly to
(4)WinRadioButton(单选按钮)——(表示选中)
(5)WinCheckBox(复选框) Sex “ON”(选中),Set “OFF”(取消选中)
(6)WinList(列表框)——Select“选择内容” 选择
(7)Windows(窗体)——Close(关闭) Active(激活)
(8)Dialog(对话框)——Close(关闭) ACtye(激活)
(9)AtiveX-Type“键的内容”(订票日期控件为ActiveX)
(10)WinWenu——Select“父菜单;子菜单”……(选项菜单项),菜单里面控件只能通过录制添加到对象库
WebApplication里常用控件和常用方法
(1)WebEdit(文本框)——set “数据”(设置)
(2)WebButton(按钮)——Click事件
(3)Webist(下拉框)——Select“选择内容”
(4)WebRadirGroup(单选按钮)——Select“选择内容”
(5)Browser(页面)——Sync(同步)
(6)Page(页面)——Sync(同步)
(7)Link(链接)——Click(点击)
(8)WebTable(表格)
6.常用的增强脚本代码
(1)参数化数据
Datatable(“参数名”,daGlobaSheet)
Datable(“参数名”,dtLoalSheet)
(2)检查点
VaWindow(‘Form1).vbEdit(‘Text3’).CheckPoint(‘Text’)
操作方法:Check
操作数据:checkpoing 对象
注:添加检查点只能通过录制
(3)输出值
Vbwindow(‘Form1’).VbEdit(‘Text3’).Output CheckPoing(‘text3_2)
操作方法:OutPut
操作数据:CheckPoint对象
注意:在专家视图书写代码的方式不能完全检查点和输出值实现,但是可以完成参数化的实现,前提是必须在Datatable准备数据
二、VBS基础知识
1.VBS(VB Script):是脚本语言,不需要编译就可以执行
2.VBS三要素:属性、方法、事件
3.VBS变量
(1)VBS定义一个变量语法:
Dim a ‘定义一个变量
Dim x , y ‘定义多个变量
(2)变量默认可以不经过定义直接使用
如果在代码的第一行添加语句OPtion Explicit 变量必须经过定义才能使用
(3)变量名约束
A.必须以字母开头
B.不能超过225个字符
C.特殊字符只能包含下划线
D.不能和VBS或者QTP的关键字重复
E.在一个作用域内必须唯一(一个作用域,一个函数)
(4)变量的类型只有一种:Variant,但是数值信息,可以很多子类型
a.Integer
b.String
c.Boolen
d.Date
e.Double
f.Ob ject
g.………
(5)变量的数值信息具体是什么子类型,由使用的上下文决定
4.运算符和表达式
(1)运算符包括:括号(),算术运算符,字符串连接符(&),关系运算符,逻辑运算符
(2)字符串可以使用&,+,但是建议使用&,字符串和数字之间的连接不能使用 +,只能使用&连接
(3)表达式包括:数字表达式,条件表达式
二、VBS基本知识
5.VBS语法不区分大小写,字符串的内容区分大小写
6.Msgbox和Inputbox
Msgbox:第一个参数:提示内容 msgbox “hello word “
第二个参数:对话框的样式,包括按钮和提示类型等,可以参考帮助文档
第三个参数:对话框的标题
Inputbox:第一个参数:提示框显示的内容
第二个参数:提示框的标题
返回值:如果点击确定,返回输入的内容,如果点击取消,返回空字符串
注意:如果使用返回值,必须把所有参数用括号括起来,如果不使用返回值,就不用用括号括起来。
补充系统设置:
1.取消测试结果报告的自动弹出
Tools/Options/Run/Views Results when test sessions ends 复选框
2.手动打开测试结果报告
(1)工具栏中的报告图标
(2)Automation/Test result
Cint和Cstr
Cint转换成整形,五舍六入
Cstr转换成字符串类型
7.数组定义
第一种方式:dim数组名称(数组的最大下标),下标从0开始:
Dim myarr(3) ‘ 数组的长度为4
Dim myarr
myarr=array(12,“abc”,“2017-04-20”,true)
msgbox myarr(2)
第二种方式:dim 数组变量
数组变量=array(第一个值,第二个值,第三个值……)
Dim myarr
myarr=array(12,“abc”,“2017-04-20”,true)
msgbox myarr(1)
运算符及名称 优先级 运算符及名称 优先级 运算符及名称 优先级
()括号 1 =等于 9 Or逻辑或 17
^乘方 2 <>不等于
-单目减 3 >大于
*和/除 4 <小于
\整除 5 >=大于等于
Mod取余 6 <=小于等于
+和-加和减 7 Is对象等于
&字符串连接 8
Advanced
VBScript提供了两种类型的控制语句:流程控制语句和循环控制语句。
一、VBS的IF语句(重点)
1.if……Then……end if
语法:if条件表达式 then
语句体
Emd if
作用:当条件表达式
关于计算器练习的相关代码
Option explicit’强制定义变量
Dim myarry(1)
Dim result
myarry(0)=inputbox(“请输入第一个数”,“第一个数”)'在inputbox输入第一位数
myarry(1)=inputbox(“请输入第二个数”,“第二个数”)'在inputbox输入第二个数
VbWindow(“Form1”).VbEdit(“Text1”).Set myarry(0)
VbWindow(“Form1”).VbEdit(“Text2”).Set myarry(1)
VbWindow(“Form1”).VbButton(“计算(J)”).Click
VbWindow(“Form1”).VbEdit(“Text3”).SetCaretPos 1
result=VbWindow(“Form1”).VbEdit(“Text3”).GetROProperty(“text”)'获取计算结果文本属性
If result=30 Then
msgbox “计算正确”
End If
VbWindow(“Form1”).VbButton(“退出(E)”).Click
VbWindow(“Form1”).Dialog(“退出提示”).WinButton(“确定”).Click
2.if……then……else……Endif
语句:if 条件表达式 then
语句体1
Else
语句体2
End if
作用:当条件表达式成立时,执行语句体1,不成立时,执行语句体2
3.if……then……elseif……then……endif
语法:if 条件表达式1 then
语句体1
Elseif 条件表达式2 then
语句体2
End if
作用:当条件表达式1成立时,执行语句体1,当条件表达式2成立时,执行语句体2
补充:1.InNumeric:系统函数
语法:IsNumeric(校验数据)
例如:result=IsNumeric(x)
作用:校验是否为数字,如果是数字,返回true,否则返回false
2.instr系统函数
Y=”10.7”
例如:instr(1,Y,“,”)
第一个参数:开始查找的位置,全字符串查找,设置为1
第二个参数:要在哪个目标字符串查找
第三个参数:带查找的目标字符串
3.len:系统函数
语法:len(表达式)
返回值:参数字符的长度
Select Case语句
1.语法:select case 表达式
Case 表达式1
语句体1
Case 表达式2
语句体2
……
Case else
语句体n
End select
注意:Case else 可以没有
(2)select case 是if语句格式,只有当if里的所有条件表达式都是某个表达式等于某个值时才会使用select case替换
For Next循环
1.语法:
For 循环变量=初值 to 终值 【Step 步长】
循环体
【Exit for 】
Next
2.作用:完成指定次数的循环
每次循环时,循环变量自动加步长
当循环变量的值到达终值时,跳出循环,执行NEXT后的语句
3.注意
(1)步长可有可无,可是正数,也可以是负数,当步长为正数时,初始值要小于终值,当步长为负数时,初值就要大于终值,步长默认值为1
(2)Exit for :当执行此语句时,退出循环,执行NEXT后的语句
DoLoop循环
Do……loop
Do……while……loop
Do……loop while
Do until ……loop
Do……loop Until ……
作用:不指定数的循环
(1)while:当条件表达式为true时,执行循环体,取false,跳出循环
(2)Until:当条件表达式为false时,执行循环体,取true时,跳出循环体
(3)While/Until放在Do后面,先判断循环条件,再执行循环体
(4)While/Until放在Do后面,先执行循环体,再判断循环条件
(5)Exit Do:当执行此语句,退出循环
补充:
1.随机参数化
(1)通过关键字视图完成,也可以通过专家视图中书写代码完成。
RandomNumber(范围的初值,范围终值)
作用:系统函数(RandomNumber),产生初值到终值得随机数
4.Reporter系统对象
(1)语法:Reporter. ReportEvent
micPass/minFail/micDone/micWarning.“步骤名称”,“详细描述”
(2)作用:向测试结果报告中书写测试步骤
6.检查点的返回值
(1)作用:在代码中获得检查点是否通过的结果
用这个结果值判断,做不同业务处理
检查点如果通过,返回值为True
(2)方法:把check方法的参数checkpoint(“xxx”)用括号括起来,返回值可以使用
示例:
Result=对象.Check(CheckPoint(“xx”))
七.对象的常用方法
1.checkProperty方法
(1)语法:对象。checkProperty “属性名称”,属性值,【超时时间】
(2)作用:等同于标准检查点,在超时时间范围内检查对象的属性值是否等于预期属性值
(3)注意:超时时间,单位为毫秒
超时时间不设置,默认为File/Settings/Run/Ob ject synchronization Timeout时间
(4)返回值:检查结果
True……检查通过,False……检查不通过
2.WaitProperty方法
(1)语法:对象。WaitProperty”属性名称”,属性值[超时时间]
(2)作用:插入同步点,等待对象的属性变为预期属性值,最多等待时间等于超时时间和wait系统函数作用相同,不通点是wait等待固定时间,wait的时间单位为妙
(3)注意:WaitProperty超市时间单位是毫秒
如果超市时间内,没有等待到预期属性值,测试结果报告中出现警告
练习8、Flight系统,打开订单编号为10的订单,点击File/Fax Order,使用waitProperty方法等待出现Fax Sent Successfully……后,Msgbox输出该订单的订单日期。
Data Table
一、DataTable中取值和赋值
1.取值格式:DataTable(“参数名称”/参数编号,dtGlobalSheet/daLocalSheet”表单名称”,表单编号)
2.参数编号和表单编号从1开始
3.赋值的格式:DataTable(“参数名”/参数编号,daGlobalSheet/dtLocalSheet/”表单名称,表单编号)=“值”
4.如果第二个参数不写,默认Global表单
三、行操作
1.SetCurrentRow方法(重点)
(1)语法:表单对象。SetCurrentRow 行号
(2)作用:设置表单的当前行
(3)注意:操作对象为表单对象,不是DataTable对象
四、表单操作
1.GetSheet方法(重点)
(1)语法:DataTable .GetSheet”表单名称”/表单编号
表单编号从1开始
(2)返回值:表单对象
2.AddSheet方法
(1)语法:DataTable.AddSheet”表单名称”
3.DeleteSheet方法
(1)语法:DataTable.DeleteSheet”表单名称”/表单编号
表单编号从1开始
五、DataTable的参数(列)操作
1.AddParamter方法
(1)语法:表单对象,AddParameter”参数名称”,”初始值”
(2)作用:在指定的表单对象中添加新参数,第一行的默认数据设定的初始值
2.DeleteParameter方法
(1)语法:表单对象.DeleteParameter “参数名称”/参数编号
(2)作用:在指定的表单中删除一个参数
3.GetParameter方法
(1)语法:表单对象。GetParmeter”表单名称”/参数编号
(2)返回值:取得参数对象
(3)表单对象:GetParmeter(“参数名称”/测试编号)。Name,取得的测试对象
(4)表单对象:GetParmeter(“参数名称”/测试编号)。Value,取得的测试对象
六、DataTable的统计
1.GetSheetCount方法
(1)语法:DataTable.GetSheetCount
(2)返回值:数值,运算时数据表单个数
2.GetParameterCount方法
(1)语法:表单对象.GetParameterCount
(2)返回值:指定表单在运行时的参数个数
3.GetParameterCount方法
(1)语法:表单对象GetParameterCount
(2)返回值:指定表单在运行时的行数
DataTable导入和导出
1.导入:Import导入全部表单
(1)语法:DaTable.Import “源文件.xls”
(2)作用:按顺序导入表单,源文件中第一张表单导入到DaTable的第一张表单(Global),源文件中第二张表单导入到Datatable的第二张表单,依次类推
注意:
A.源文件可以是绝对路径(例:D:\data.xls),也可以是相对路径(默认Test保存的目录,
B.例:datal.xls)
B.导入表单数量以源文件中的表单数目和DaTable中表单数目较少的为准
C.导入代码运行前,必须把源文件关闭
D.源文件中的第一行数据作为DaTable中的参数名
2.导入ImportSheet导入单张表单(重点)
(1)语法:DaTable.ImportSeet “源文件.xls”,”源文件中表单名称”/表单编号,“DaTable中表单名称”/表单编号
(2)作用:把源文件中指定表单的内容导入到DaTable中指定表单内
(3)注意
A双引号中的内容区分大小写
B.表单编号从1开始
D.不能通过dtGlobalSheet和dtLocalSheet来指定DaTable表单
3.导出:Export导出去全部表单
(1)语法:DaTable。Export ”目标文件名.xls”
(2)注意:如果文件不存在,创建新文件,如果文件存在,但文件中不包含要导出的表单名称,在末尾新建表单,如果存在表单,覆盖表单内容
4.导出:ExportSheet导出单张表单(重点)
(1)语法:DaTable。ExportSheet
随机数的参数化
1.Rnd函数
(1)作用:生成0-1的小数,包括0,不包括1
(2)限制:每次运行生成相同的随机数
解决限制方法:在前面调用Randomize函数
(3)生成随机数的公式
m-n范围内的随机整数
Int((n-m+1)Rnd+m)
例:Int函数
(1)作用:向下取整
(2)返回值:比参数小的最大整数如果参数为正数,舍弃小数;如果参数为负数,舍弃小数后减一
3.带参数的RandomNumber随机参数化
(1)步骤:
A.关键字视图中,点击Value列的<#>
B.选择Parameter,在参数化类型的下拉框中,选择RandomNumber
C.输入From(范围的下限),TO(范围上线)
D.选择Name复选框,输入随机数名称
E.选择随机数的生成频率
E-1,for each action interation(每次Action反复生成新的随机数)
E-2,for each test iteration(每次test反复生成新的随机数)
E-3,Once per entire test run(每次运行Test生成新的随机数)
常用的元字符
.匹配除换行以外的任意的一个字符
\w匹配字母或数字或下划线或文字
\d匹配任意的空白符
\b匹配单词的开始或结束
^匹配字符串的开始
&匹配字符串的结束
常用的限定符(限定重复次数)
重复零次或更多次
+重复一次或更多次
?重复一次或零次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
字符转义
如果想查找字符本身,就必须使用\来取消这些字符的特殊意义。
09/30/17 (0[19]/[02]/
四、Dim myre,result
Set myre=New RegExp
Myre.pattern=”正则表达式”
Result=myre.Text(“待校验字符串”)
返回值为True,表示字符串可以匹配正则表达式,为False,表示不匹配
一.字符串的加密与解密
1.加密
(1)Password Encoder 工具
开始\所有程序\QTP\Tools\Password Encoder
(2)DataTable的加密
待加密字符串输入到DataTable的单元格中,点击右键\Data\Encrypt
(3)Crypt系统对象的Encrypt方法
加密后字符串=Crypt.Encrypt(“待加密字符串”)
(4)Flight系统的密码框
待加密的字符串在录制Flight系统登录过程中到密码框中
2.解密
(1)修改非加密文本框的方法为SetSecure,值设置为加密串
(2)再使用GetROProperty取得非加密文本框的显示内容的属性值,即为原字符
二、字符串处理常用方法
1.Inst系统函数
(1)语法:Inst[开始查找位置,]源字符串,目标字符串[,查找方式]
(2)作用:在源字符串中查找目标字符串第一次出现的位置
(3)返回值:位置的数字,如果找不到,返回0
(4)注意:
A.开始查找位置为数字
B.查找方式:0(二进制,区分大小写),1(文本查找,不区分大小写0),0为默认值
C.当开始查找位置大于源字符串总长度时,返回0,开始查找位置1为默认值
2.Mid系统函数(重点)
(1)语法:Mid源字符串,开始位置[,长度]
(2)作用:从源字符串的开始位置开始截取指定长度的子字符串
(3)返回值:截取到的子字符串
(4)注意
A.长度可以不指定,默认截取到整个源字符串的结尾
B.如果开始位置岛屿源字符串的长度,返回值为空串
C.如果长度大于可以截取的最长长度,返回值为开始位置到源字符串的结尾
3.Len系统函数
(1)语法:Len字符串
(2)作用:返回字符串的长度
(3)返回值类型是数值Integer
4.Left系统函数
(1)语法:Left源字符串,长度
(2)作用:从源字符串的左侧截取指定长度的子字符串
(3)返回值:截取的子字符串
(4)注意:长度>源字符串的总长度,返回源字符串,长度=0,返回空字符串
5.Right系统函数
(1)语法:Right源字符串,长度
(2)作用:从源字符串的右侧截取指定长度子字符串
(3)返回值:截取的子字符串
(4)注意:长度>源字符串的总长度,返回源字符串,长度=0,返回空字符串
6.FormatNumber
(1)语法:formatNumber(待处理的数值,保留小数位数,……是否用逗号分隔金额)
(2)作用:对数值型的数据格式转换
(3)返回值:转换后的数值
(4)注:在第5个参数(是否用逗号分隔金额),true:用逗号,false:不用逗号
四、截屏和启动程序
1.截屏
(1)语法:desktop.CaptureBitMap”文件名称”。[是否覆盖已有文件]
对象:CaptureBitMap “文件名称” [是否覆盖已有文件]
(2)作用:对桌面或者某个对象截屏,保存到指定目录一张图片
(3)注意:文件类型只支持png,bmp格式,其中png占用空间较小,文件名称。
Exist属性
(1)语法:对象.Exist([超时时间])
(2)返回值:对象是否在当前被测系统中出现,True—出现,False—未出现
(3)注意:超时时间的单位为秒
超时时间不给定,默认File\Settings\Run\ Object synchronization timeout(对象同步超时时间),20秒
3.自动程序
(1)语法:SystemUtil.Run “文件名称”,[参数],[文件名称],[操作],[模式]
File:必须的,是运行文件的名称
四、锁定鼠标和键盘
(1)锁定BlockInput
SystemUtil.BlockInput
(2)解锁UnBlockInput
SystemUtil.UnBlockInput
(3)作用:在程序执行过程中,避免鼠标和键盘输入对程序的影响
五、Function
1.Function作用:可读性和可维护性,复用性
2.Function语法:在Function和End Function之间的部分为自定义函数体
3.不带参数和返回值的Function
调用时,可以加Call,也可以不加Call
4.带参数的Function
调用时,需要给定相应形参里数量的参数值
5.带返回值的Function
返回值通过赋值给Function名来返回
6.Function中定义的变量,作用域为Function内,生存期为从调用Function开始,到调用Function结束
5.SystemUtil.CloseDescendEntProcesses
(1)关闭所有由QTP启动的进程
包括:自动启动打开的程序,手动启动打开的程序,测试结果报告等
6、关闭指定标题的进程
SystemUtil.CloseProcessByWndTitle “Login”
7、关闭指定进程名称的进程
SystemUtil.CloseProcessByName”flight4a.exe”
关闭进程名称为flights4a.exe的进程
二、Windows应用程序的常用控件操作
1.Window对象
(1)Activate 激活
(2)Close关闭
(3)Minimize 最小化
(4)Maximize最大化
(5)restore 还原
(6)Move 移动,参数为坐标位置
2.WinComboBox对象
(1)GetItemsCount方法
a.语法:WinComboBox(“xxx”).GetItemsCount
b.返回值:下拉组合框中的项目总数
(2)Select方法
a.语法:WinComboBox(“xxx”).Select “选项内容”/选项编号
b.注意:选项编号从0开始
(3)items count属性
记录下拉组合框中的项目总数
(4)selection属性
记录当前选择的选项内容,和text属性记录相同
(5)all items属性
记录所有选项内容
(6)GetItem方法
a.语法:WinComboBox(“xxx”).GetItem 选项编号
b.返回值:该编号的选项内容
c.编号从0开始
(7)随机选择一个下拉框的选项内容to
a.获得选项总数:GetItemsCount方法,获得items count属性值
b.生成随机数,范围0到(选项总数-1)
c.使用Select方法,选择b随机数的项目
3.WinList对象
(1)GetItemsCount方法
a.语法:WinList(“xxx”).GetItemsCount
b.返回值:列表框中的项目总数
(2)Select方法
a.语法:WinList(“xxx”).Select “选项内容”/选项编号
b.注意:选项编号从0开始
(3)items count属性
记录列表框中的项目总数
4.WinMenu对象
(1)注意:不能通过手动添加添加到对象仓库,只能通过录制代码
(2)Select方法
a.语法1:WinMenu(“xx”).Select “一级菜单完整名称;二级菜单完整名称…”
语法2:WinMenu(“xx”).Select “;;…”
b.作用:选择某个菜单
c.注意:编号从1开始
5.WinRadioButton对象
(1)每个单选按钮是一个对象
(2)Set方法
a.语法:WinRadioButton(“xx”).Set
b.作用:选中此单选按钮
:三、Web对象的常用操作方法
1.WebList对象
(1)Select方法
a.语法:WebList(“xx”).Select “选项内容”/选项编号/"#选项编号"
b.作用:从Web下拉框中选择一个项目
c.注意:编号从0开始
(2)items count属性
记录选项的总数
注意:WebList对象没有GetItemsCount方法
(3)value属性或者selection属性
记录当前选项的内容
(4)all items属性
记录所有选项内容,分号分隔各个内容
(5)GetItem方法
a.语法:WebList(“xxx”).GetItem 选项编号
b.作用:获得某选项编号的选项内容
c.注意:编号从1开始
中兴-熊老师 2017/5/11 15:41:54
2.WebRadioGroup对象
(1)Select方法
a.语法:WebRadioGroup(“xx”).Select “选项内容”/"#选项编号"
b.注意:选项内容不一定和显示的项目内容一致
选项编号从0开始
(2)items count属性
记录选项总数
(3)value属性
记录当前选项的内容
(4)all items属性
记录全部选项的内容
(5)selected item index属性
记录选项编号,编号从1开始
(6)随机选择的算法
a.获得items count属性的选项总数
b.生成随机数,范围为0到(总数-1)
c.选择随机数编号的项目,格式如下:Select “#”&randno
2017/5/11 15:42:05
中兴-熊老师 2017/5/11 15:42:05
3.Webtable对象
(1)如何添加WebTable对象到对象仓库
a.打开对象仓库,点击“Add Object to Local”(添加对象到对象仓库)
b.点击WebTable对象的某个项目
c.在Object Selection(对象选择)对话框中,点击WebTable对象,再添加
(2)RowCount方法
a.语法:WebTable(“xx”).RowCount
b.作用:返回表格的行数
(3)ColumnCount方法
a.语法:WebTable(“xx”).ColumnCount 行号
注意:行号从1开始
b.作用:返回指定行的列数
(4)GetCellData方法
a.语法:WebTable(“xx”).GetCellData 行号,列号
b.作用:返回指定行指定列的单元格文本内容
一、性能测试概念
1.什么是性能测试?
模拟真实的生产环境,以各种不同的压力(模拟大量客户)去测试被测系统,去“攻击”测试系统。同时记录下被测系统中各台服务器的各种重要资源,包括CPU,内存,磁盘和网络资源等。
注:性能测试之前要做好系统备份。
2.性能测试时首先要看性能需求,如果没有需求,这时要根据与客户交流,被测系统的相关资料,以及性能测试工程师的经验,去编写测试计划,进行性能测试。
3.负载测试与压力测试的区别
1)共同点都是在测试过程中逐步加压
2)负载测试是在正常范围内测试 (Load Testing),(见好就收)
3)压力测试可以再极端范围内测试(Stress Testing)(使劲折腾)
4.被测系统的简称
SUT(System Under Test)
AUT(Application Under Test)
EUT(Environment Under Test)
被测系统就是web Server和DataBase Server统称。
二、LoadRunner工作原理(录制——回放的工作方式)和QTP类似。
1.录制时,loadrunner记录客户端和服务端二者之间的对话
2.回放时,LoadRunner模拟真实的客户端向服务器发起请求,并按照脚本去验证服务器的应答。
LoadRunner三大组件
(1)虚拟用户生成器(Virtual User Generator) VuGen VuG
功能:录制,编辑,调试测试脚本
(2)压力调度控制台(Controller)
功能:创建场景,运行场景,监控场景,收集测试数据
(3)压力结果分析器(Analysis)
功能:把收集的测试数据以图表形式展现出来,生产测试报告。
关注左上角的独立的源文件:(脚本的文件组成)
Vuser_int:初始化脚本(类C语言)
Action:最关心的脚本
Vuser_end:结束脚本
Globals.h:头文件(包含LR函数的声明)
4.录制时
一般将登录动作录制到vuser_init中
关心测试点(如订购机票,查询路线)录制在Action中;而退出的动作录制到vuser_end代码中。
原因:Action比较强大。具备其他部分没有的功能
比如:参与迭代,设置并发
5.lr_think_time(93);表示该处有93秒时间没有对服务器提交请求 思考时间
Lr_strat_transaction(“login_tranc”);开始登录事务
Lr_end_transaction(“login_tranc”,LR_AUTO);结束登录事务
Lr_end_transaction(……);发送表单的请求
Web_url(……);发送页面请求
想看到运行结果:
Tools-General Options–>Replay回放
->After Replay 选择Visual test results 可视化测试结果
再回放,显示结果报告。
虚拟用户:Virtual User 简称 VU
在场景中,LoadRuner使用VUser代替实际用户
一个场景中,可以包含几十个,几百个甚至几千个Vuser
使用Vuser给被测系统施加压力。
原理:每一个虚拟用户对应一个进程或线程。
常用的是线程模式,消耗资源比进程少,一般PC模拟2000个VC
进程和线程的区别?
1)进程比较消耗系统资源,进程间通信比较麻烦。
2)线程比较节省系统资源,线程间通信比较容易。
8.事务:Transactiion 为了事务响应的时间
9.何时需要插入事务?
关心那段操作,就将此过程作为一个事务,比如关心订票
目的:LR后续会统计事务响应时间。
10.什么是事务?
事务分为事务的开始和结束之间的业务操作,事务用于度量服务器的性能的(事务响应时间)
我们可以对比较关心的某个或某些业务操作,设定一个事务,LR会记录不同事务的响应时间。
三、LoadRunner基本测试流程
1)制定性能测试计划(部分)
2)创建测试脚本
3)编辑,运行脚本
4)创建场景
5)运行,监控场景,收集数据
6)生成测试报告,分析测试结果。
性能测试常用术语
1.并发(concurrency):所有的用户在同一时刻做同一件事情或操作,一般针对同一类型的业务。
在线:多用户在一段时间内对系统执行操作。
2.区别:并发的压力是一个瞬间的压力,一般针对同一类型业务。在线的压力是一段时间内的压力情况。
3.20个用户并发的压力相当于200个用户在线的压力(1:10比例)
4.请求响应时间=客户端时间+网络时间+服务器时间
5.可以通过内网测试规避网络问题,客户端一般不会成为性能瓶颈了,所以大部分情况下,如果请求响应时间长,性能瓶颈出现服务器端。(TTLB,即“Time to last byte”)
6.事无响应时间:用户完成某个具体事务所需要的时间,前提是在录制脚本时,插入事务点。
7.点击率:每秒钟用户向web服务器提交的http请求数。(点击按钮,链接,查看)
不是指鼠标点击次数,如果点击一个按钮,服务器返回一个页面,页面中包括3张图片,则当前发起的点击数:3+1=4
8.吞吐率:(Throuthput)用量:累计时间从服务器端获得的全部数据量,单位是字节
9.吞吐率:在单位时间内吞吐率
吞吐率:=吞吐量/测试时间 每秒
吞吐率和点击率的区别
吞吐率:是指服务器每秒处理的数据量。
点击率:是指客户端每秒向服务提交的HTTP请求数。
10.资源利用率:一般指系统中CPU,内存,磁盘,网络等主要资源的使用情况。
例题:测试登录模块8个用户的情况下系统的性能情况
要求:用户数:8人 VU
用户加载方式:每2秒加载1个UV
运行时间:所有用户运行完脚本
复习资料
1、负载测试和压力测试的区别?
答:1)负载测试在正常范围内测试。都是逐步加压
2)压力测试可以在极端范围内测试。
3)举例:客车,最大载客数9人。内部资料:12人
最大并发用户数 1000人; 1500人
2、LR的三大组件简介,中英文名称?(重要)
答:1)Virtual User Generator 虚拟用户脚本生成器 VUG
功能:录制、编辑、调试脚本 1VU 可迭代等
2)Controller 压力调度控制台
功能:创建、运行场景、监控场景、收集测试数据
(场景:就是大型的配置文件)
3)Analysis 压力结果分析器
功能:把收集到的测试数据以图表的方式进行展示
生成测试报告。
3、LoadRunner的原理?(重要)
答案一:录制–回放的工作方式和QTP类似
1)录制时,LoadRunner记录下客户端和服务器二者之间的对话。
(主要为请求)
2)回放时,LoadRunner模拟真实的客户端向服务器发起请求,并按照脚本去验证服务器的应答。
4、什么是事务,为何要创建事务?
答:事务分为事务的开始、结束和之间的业务操作,事务用于度量服务器性能的。(事务响应时间)
我们可以对比较关心的某个或某些业务操作,设定为一个事务,LR会记录不同事务的响应时间。
事务:Transcation
5、LoadRunner脚本的基本组成部分。
三部分(vuser_init、Action、vuser_end)+头文件globals.h
.c 类C语言源代码 脚本
并行:多个任务占据各自资源,一起运行
并发:多个任务占据同一资源,一起运行,需要争抢资源
Concurrency
在线:Online
一、性能测试基本概念
1、并发和在线的区别:并发的压力是一个瞬时压力,一般针对同一类型的业务。在线的压力是一段时间内的压力情况。
2、20用户并发的压力相当于200用户在线的压力。(1:10的比例)
写测试计划时,可以参考,比如2000用户在线,一般是200个用户并发。(并发登录、并发查询、并发删除等)
3、请求响应时间=客户端时间+网络时间+服务器时间
4、可以通过内网测试规避掉网络的问题,客户端一般不会成为性能的瓶颈,所以大部分情况下,如果请求响应时间长,性能瓶颈出现在服务器端。
建议:Web服务器和数据库服务器最好分开部署,可以分别监控
事务响应时间:前提是在录制脚本时,插入事务点
点击率:每秒钟用户向Web服务器提交的Http请求数。
5、点击率:不是指鼠标点击的次数,比如:点击一个按钮,服务器返回一个页面,页面中包括了3个图片,则当前发起的点击数:
1+3 = 4个Http请求。
.html 带有 每个图片都是一个资源
都会重新发请求
吞吐量:Throuthput 是总量,是累计时间的全部数据量
吞吐率:在单位时间内的吞吐量
吞吐量/测试时间 每秒
TPS: Transaction Per Second 每秒事务数
6、请求和响应:客户端向服务器发起请求(Request),服务器向客户端返回应答(响应 Response)。
7、资源利用率:一般指系统中CPU、内存、磁盘、网络等主要资源的使用情况。(了解,有难度)
案例:测试登录模块在8个用户的情况下系统的性能情况
要求:用户数:8人 VU
用户加载方式:每2秒加载1个VU
运行时间:所有用户运行完脚本
登录用户名:jojo
密码:bean
操作:
打开Controller -> 默认手工场景模式 ->
将Use the Percentage Mode to… 去掉打钩
目的:用户数不使用百分比模式
-> Browse按钮 选择脚本 login -> OK
提示:如果脚本选错了,可以在后续主界面中修改
-> 设置8个VU: Run Mode: 选择Basic schedule
将Quantity 改为 8
-> 每2秒钟加载一个VU: 左下角窗口 Global Schedule
-> Start vusers: Start all Vusers simultaneously
默认是 同时加载8个虚拟用户,需要更改
双击Start vusers -> Edit Action
-> 选择第2个单选钮,改为 1 Vusers every 00:00:02
(HH:MM:SS)
-> OK
-> Schedule Graphics 计划预览图
横坐标:Time 测试时间 纵坐标:Vusers 虚拟用户个数
每隔2秒钟加载一个虚拟用户
虚线表示 不确定
-> 设置运行时间: -> Duration中
Run until completion 运行直到结束 (脚本结束) 选择
Run for __ days and ___ (HH:MM:SS) 固定时间多久
Run indefinitely 不限定 无限制运行,测试者点击结束才结束
-> 从Design 切换 到Run
设计场景 运行场景
正常情况,还需要设置Windows Resources 监控的系统资源
(暂时不配置)
-> 设置好场景,可以运行场景
-> Start Scenario 按钮
点击Vusers按钮,进一步查看VU运行状态:
Done. Passed 1 iteration(s) attemped: 1successed.
结束 经过 1次迭代尝试1次成功了
观察场景运行结果图:
Running Vusers 正在运行的虚拟用户
Hit per Second 点击率
Throughput 吞吐量
点击正上方,右边倒数第3个图标按钮:
查看 Hp LoadRunner Analysis 结果分析报告
Reports 报告
Graphs 图片
Running Vusers 虚拟用户运行情况
Hit per Second 点击率
Throughput 吞吐量
Transaction Summary 事务概要
Average Transaction Response Time 平均事务响应时间
二、性能测试策略
重要的:基准测试、并发测试、综合场景测试 (前3个项目必备)
极限测试、递增测试
次要的:疲劳强度测试(大型系统中)、内存泄露测试、
数据容量测试。
共同点:向被测系统发起攻击
1、基准测试:就是单用户测试 (今天的重点)
注意:还是需要使用控制台,运行场景,自动搜集数据,通过Analysis进行结果分析。
2、递增测试:每隔一定的时间(1s,5s,10s)逐步加载虚拟用户,逐步加压。
用途:登录测试时,可以递增测试
3、并发测试:多用户并发执行某一操作(同一时刻,LR精确到毫秒级别)。
注意:并发测试是一种严格的测试,主要考察系统对瞬时较大压力的承受能力。
4、综合场景测试:号称“能够最真实的模拟实际生产环境”。
5、综合场景的几个要素:多用户、多个脚本(至少3个)、在线执行一段时间(1个小时、50分钟等)
注意:一般不需要设置并发点。
多用户一起运行,一定会有并发。
6、综合场景测试过程中,所有用户循环执行相应的操作。
7、比如:100用户在线综合场景
100用户共同对被测系统执行操作,其中30用户执行浏览首页操作,50用户执行查询订单操作,20用户执行提交订单操作。
(要真实模拟人数比例)
问题:为什么不模拟大量的登录操作?
因为用户不可能一直在登录,模拟真实情况。
以上操作,用户在循环执行。
8、响应时间:业内一般有“358原则”,系统响应时间在3秒以内,则用户能够接受;响应时间在5秒以内,用户能够忍受;响应时间超过8秒,用户不能忍受。
比如:一般需求指标,不超过3秒
9、疲劳强度测试:在一定的强度(压力)下,对系统进行长时间的性能测试,一般为724小时、或24小时、12小时等。
比如:银行系统,724*365 全天候不间断运行
10、考察疲劳强度测试时,要考察其平均响应时间,以及各台服务器的各项资源情况。
比如:集群 负载均衡、降低成本
以上是比较常见的测试类型,经常出现在测试计划中。
11、内存泄露检查:通过正常的性能测试,如果被测系统的内存曲线走势不正常,则关注其相应的各项重要的内存指标,通过对应走势来确定是否发生内存泄露。
12、数据容量测试:使用大容量的数据添加到数据库中,观察被测系统是否能够正常运行。
比如:向数据库中添加200G的数据量,再进行测试。甚至几个T
大数据 Big Data 一般是T级、P级的数据量
1024Byte = 1KB
1024K = 1M
1024M = 1G
1024G = 1T
1024T = 1P
13、极限测试:使用并发测试、在线测试等方法,测试出系统能够承受的极限压力(如最大用户数),或系统能够达到的最大处理能力(如最大吞吐量)。测试方法可以采用递增测试,比如对系统进行100用户、500用户、1000用户等测试。
(也称为:摸高测试)
三、基准测试:单用户测试
1、测试脚本要加检查点。
原因:LR报告中的验证只是针对网络层面上,服务器收到客户端发送的数据包,之后将应答包发回给客户端,但是LR不会验证应答包中数据是否正确。
案例1:对下订单操作进行基准测试。先录制脚本,插入检查点。
先打开AUT,熟悉整个业务流程;
打开VuGen -> 新建 输入URL -> 先录制登录
-> vuser_init -> 输入jojo和bean -> 开始事务 login
-> 点击Login -> 欢迎页面:
添加检查点:
选中“Welcome, jojo” 点击Insert text check 插入文本检查点
-> 结束事务login
-> Action模式 -> 点击Flights
-> 选择城市:从Denver 到 London
-> Continue -> Continue
-> 开始事务buy -> Continue -> 订单结果页面
添加检查点:
选中“Denver for London” 插入文本检查点
-> 结束事务buy
-> vuser_end模式 -> Sign Off -> 关闭浏览器 -> Stop
脚本保存:day02\buy 再回放
web_reg_find(“Text=Welcome, jojo,”,
LAST);
web_reg_find(“Text=Denver for London”,
LAST);
检查点函数:web_reg_find() web_或lr_开头
reg字样的函数:注册性函数
web_submit_form() 提交表单的请求
2、对于B/S系统,LR脚本中的LR函数都是以lr_或web_开头。
(另外,还有C语言函数 strcmp)
3、web_reg_find函数,带有reg字样的函数称为:注册性函数
该类函数的特殊:必须写在相应请求之前。
4、加过检查点的脚本如果运行(回放)正确,则说明该脚本正确。
(学会调试脚本)
需求:循环订3张票
VuGen中的Run-time Settings按钮 (运行时设置)
Run Logic 运行逻辑
Iteration Count 迭代次数 默认1 改为3
注意:循环的只是Action. 登录仅一次
init和end脚本仅执行一次。
四、注意:
1、控制台中和VuGen中设置Run-time Settings当前区别和联系
1)如果从控制台直接打开脚本,则脚本中Run-time Settings设置会自动显示在控制台的Run-time Settings中。(带过来)
2)如果控制台和脚本中同时设置了Run-time Settings,并且值不同,控制台的优先级高。
2、Pacing值:每次迭代之间的时间间隔。
迭代:脚本Action从第一行到最后一行。迭代一次
Pacing值越大,对AUT的压力越小。
3、Think time: 脚本中步骤之间的时间间隔。
(请求之间的间隔)
案例:针对buy脚本,进行基准测试 (方法1:单用户循环5次)
1)调试好脚本(在VuGen中运行成功)
2)打开控制台,加载buy脚本
首先设置人数: Run Mode 单选Basic schedule模式
Quantity改为1 单用户模式
3)打开控制台Run-time Settings设置
Run Logic 迭代次数 5 (优先使用)
4)Pacing值 – Start new Iteration 建议设置随机2~3秒
As soon as the previous interation ends 只要前一次迭代结束
关注第3项:
At fixed intervals, every 60.000 sec
random every 2.000 to 3.000 sec
fixed: 固定的 intervals 间隔
random: 随机的
5)Think time:
Ignore think time 忽略思考时间选择为了简单化
Replay think time 具体设置思考时间策略
-> 点击OK
继续其它设置:
Start Vusers: Start all Vusers simulaneously
就一个VU 默认
Duration: Run until completion 运行直到结束
-> 切换到Run
开始运行场景: Start Scenario
归纳基准测试:
方法1:单用户循环5次
1)调试好脚本(加检查点,在VuGen中运行成功)
2)打开控制台,设置Run-time Settings
3)迭代次数:5
4)Pacing值:随机2~3(每次迭代之间的时间间隔)
5)Think time: 忽略(请求之间的时间间隔)
忽略的原因:单用户对系统压力较小,忽略与否对结果影响不大。
方法2:单用户持续运行1分钟
1)调试好脚本(加检查点,在VuGen中运行成功)
2)打开控制台,设置Run-time Settings
3)Pacing值:随机2~3
4)Think time: 忽略
5)Duration: 1分钟
提示:配置好后,观察图表状态,有所变动,才修改成功。
4、当Run-time Settings中迭代和VU部署设置(Duration)有冲突时,Duration的优先级较高。
比如:Duration选择第二项,就以此为准
Run for __ days and __ (HH:MM:SS)
如果选择第一项:Run until completion 还是听Duration
只是它弃权了。
Duration是一把手,让二把手看着办,此时Run-time Settings说的算。
5、测试报告中的结果,应该测试三次,取中间值。
(如:0.1秒 0.3秒 0.4秒 结果取0.3秒)
二、并发测试
1.并发测试两个条件
1)脚本中要有集合点(并发点)
2)控制台中要设置并发的策略(选择第一项)
作业
1.LR和QTP的区别?
1)QTP功能测试工具(自动化)
LD:性能测试工具,可以测试多用户
2)QTP关心的是界面(UI),关心是对象(对象库概念):LD只关心客户端和服务器之间的数据报包(请求包,应答包),不关心对象,更不需要比对象的属性值,只关心抓包(捕捉的数据包)
如果用户界面变了,但是业务逻辑不变;QTP脚本需要变化,LR脚本不需要变化。
3)LR关心的是客户端和服务器之间的对话,前提是选择正确的网络协议(相当于网络语言)
4)LR不能补录,录制失败,从头再来。
2.LoadRunner的原理
1)对于给定被测系统,VUGen(虚拟用户脚本生成器)可按照相应的http协议对客户端(IE客户端,JAVA客户端)进行捕捉和录制,生成脚本,调试脚本(检查点,事务点,并发点)
2)在VUG针对脚本,可以设置run-time-settings
比如:迭代次数,pacing,log配置,think,time
3)在控制台中设置场景,选择好脚本,对虚拟用户加载进行部署,对被测系统的各个服务器进行监控,设置相应的load Generator(负载生成器)
4)运行场景,生成Analysis(结果分析报告),生成各种图表,提供性能调优的数据依据。
3.并发测试和在线测试的区别?
4.吞吐量和点击率的概念,区别?
吞吐率原指一个业务系统在单位时间内提供的产量(或服务量)。在计算机或数据通信系统,指的是单位时间内通过某通信信道(a communication channel)或某个节点成功交付数据的平均速率,通常以每秒比特数(bps, bits per second )为单位。
吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。
5.基准测试和并发测试概念?
集合点:5个线程,代表5个VU并发执行一次购票
o------------|o------
o------------|o------
o------------|o------
o------------|o------
o------------|o-----
等所有线程到达集合点时,才一起释放,此时的压力最大(瞬间压力)
2.并发点只是在并发测试中使用
例:并发购票
Lr_start_transaction(“buy”)
2.在事务开始之前->点击insert->rendezvous
输入集合点名称 rendzvous Name;buy 一般与事务名称相同
就会生成脚本:lr_rendezvous(“buy”)->编译Complie(同时会立即保存)
注意:修改完脚本,要及时编译
2.打开控制台,加载buy脚本
注意:右击控制台加载脚本后,再在VUG中修改脚本,需要在控制台中刷新脚本。:右击脚本文件路径->Details细节->Refresh 下拉菜单 选中 script:刷新脚本
如果选中Runtimes setting;控制台中的设置路径被覆盖
提示:可以再控制台中,打开某个脚本view script按钮
1)一定要点编译compile按钮,同时会自动保存。
2)在控制台中要刷新脚本
控制台中要设置并发策略
选择Scenario菜单->lr_rendezvous(“buy”)……并发点
->打开窗口,设置策略-点击police(策略)按钮
第一项:Release when 100% of all Vusers arrive at the rendezvous
(选择此项)
当100%虚拟用户到了集合点时释放虚拟用户VU
(所有VU的n%)10个VU都算10n%
第二项:Release when 100% of all Vusers arrive at the rendezvous
当100%正在运行的VU到达集合点时释放VU
(所有正在运行的VU的n%)
如果10个VU只有5个正在运行,5n%
第三项:
Release when I Vusers arrive at teh rendezvous
指定n个虚拟用户到达集合点,在释放。
Timeout between Vusers> 30
三、LR工具组成。
三大组件:
虚拟用户脚本生成器、压力调度控制台、压力结果分析器
四大组件:虚拟用户脚本生成器、压力调度控制台、压力结果分析器,负载生成器(压力生成器 load generator)
就是一台物理机,负责运算大量的虚拟用户生产负载,相当于指挥台指挥下的作战部队。
(比如:一个部队能够支持2000个人,如果需要10000,就需要多个作战部队)
在控制台Quantity的右边:load generator
默认:localhost 本地主机,负载运行虚拟用户,就是是一台负载机
如何添加其他主机,协同作战(联机测试)
在Scenario Groups中,另外加一行:
选择脚本buy 点击Add->Name
输入对发的主机名:192.168.1.12->ok相当于借助其他机器的性能帮助进行测试。
其他打开方式:Scenario-load generator
比如:测试时,好比controller 统帅千军万马。
使用 load generator 产生不同的压力机:1,2,3……
—(Agent)load1
Controler-----------(Agent) load1
-----------(Agent)------load3
代理程序Agent部署在不同的客户端好比小的通讯兵。
在控制台启动时,会自动启动:
右下方:一个小雷达图标:LoadRunner Agent Parocess
如果不小心关闭了,如何打开?
所有程序->Mercury LoadRunner->->Load Agent Prcess
结论:如果想让其他机器参与联机测试,需要启动Agent, 就能收到总控制台的命令。
3.监控系统(Moitor)
监控主要是性能计数器,对被测试服务器进行监控。
如何查看:
打开控制台 ->Run 界面 左下角 Availabel Graphs
—System Resource Graphs 系统资源图。
—>途中右击—> Add Measurements……增加图标。
----打开一个窗口
四、参数化
1.定义:
对脚本常量进行参数化,让不同的VU在执行相同的脚本时,分别使用参数池的不同数据替代这些常量,从而模拟多用户真实使用系统的情况。
2.步骤:
1)确定需要参数化的数据
2)准备数据(参数池) name:(参数名称)
3)参数化 jojo (参数值)
先注册一个用户
Username:qq
Password:1
Confirm:
新的需求:让jojo和QQ各自订一张票
首先清空AUt中j观察JOJO和QQ的订票记录,观察新的结果
在parameter list中,first data:1 从JOJO开始
在run-time settings中:迭代次数为2(Action)
编译---------运行
------------遇到问题:jojo登录一次,订票2张。
Int和end 只会执行一次,Action可以迭代多次
解决方法:将init中的脚本剪切得到action中,参与迭代
注意:保留原有的函数的语法格式。
要点归纳:
3、要点归纳
1)参数化时,参数池中的数据写好后,要让光标停留在新的一行。
否则可能导致出错(白行或者缺少数据)。
技巧:ctrl + a 观察格式
2)init只执行一次,Action参与迭代,在参数化时需要注意。
3)LR依靠网络协议录制脚本,脚本中记录的是请求数据包信息,只要用户在线(登录成功),则可以继续发送请求到达任意界面,也可实现循环操作。
4、参数池的策略初步(Parameter List窗口中设置)
特点:功能强大,LR产品的一个卖点(出彩) BS/MS题 拔高点
1、Select next row (取值方式 How?)
Sequential 顺序的(默认) 取完第1行,取第2行…
Random 随机取
Unique 唯一取
Same line as pwd… 和xxx步调一致pwd取法一样
2、Update value on (更新方式 When?)
Each iteration 每次迭代时取值 (取值)
复习2
1.什么是性能测试?
模拟真实的生产环境,以各种不同的压力,(模拟大量用户)去测试被测系统,去“攻击”测试系统。同时记录下被测系统中各台服务器的各种重要资源,包括cpu,内存,磁盘和网络资源等。(性能测试之前应该做好备份)
2.性能测试的目的是什么?
验证软件系统是否能达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
包括以下几个方面
1)评估系统的能力,测试中得到负载和响应时间数据可以被用于验证所计划的模型能力,并帮助作出策略。
2)识别系统中的弱点;受控的负载可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
3)系统调优:重复运行测试,验证调整整个系统的活动得到了预期的结果,从而改进性能。
检测软件中的问题:长时间的测试执行可导致程序发生内存泄漏引起的失败,揭示程序中隐含的问题或冲突。
4)验证稳定性、可靠性、在一个生产负载下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
3.什么时候需要进行性能测试?
系统性能比较高的行业:通信、银行、金融、证券、医疗、保险、搜索引擎(百度、谷歌、)等多用户系统。
性能测试工具——loadrunner8组成部分?
1)虚拟用户脚本生成器(Virtual user Generator)
捕捉用户的业务流程和创建自动性能测试脚本,模拟单用户
2)压力调度控制台(controller)
根据场合设置,配置虚拟用户,运行场景,收集测试数据
3)压力结果分析器(Analysis)
分析测试结果
4)负载生成器(load Generator)压力生成器
通过运行模拟用户生产实际的负载
5)代理程序(Agent)
部署在各个客户端(负载机),协调得到步调一致的虚拟用户
6)监控程序(Monitor)
监控主要的性能计数器
一、继续参数化
案例:注册30个用户,脚本要求:
1)脚本中一定要有检查点
2)保证30个用户全部成功
3)使用单机VUGen执行:因为使用VUGen单机,压力较缓,容易成功,尽量不要使用控制台
步骤:
先准备用户数据:使用Excel 设计 qq1-qq30 1-30
开始录制脚本
New——New Virtual user 界面说明:
左侧:New Single Protocol Script新的单协议脚本
New Mutiple Protocol Script 新的多协议脚本
New Script Recent Protocal 刚打开过的协议
Create->输入URL->Action 注册需要迭代-ok
->点击 sign up now
->输入username:qq password:1 confirm:1
->开始事务 reg->continue-进入欢迎界面
->插入检查点:Thank you ,qq
->结束事务
->切换为vuser_end->点击continue->sign off
->关闭流量器->stop
保存脚本:reg
方式一:
另存reg脚本为reg1(备份reg)
做两个参数池name 和pwd
双击qq选中->右击->replace with a parameter
->命名name-name
二、参数池的策略(老师讲的)
1.select next row(选择下一行,HOW?如何选择)
1)sequential 顺序的:从第一行开始顺序向下取值
2)Random 随机取:随机取值
3)Unique 唯一的:从第一行开始,唯一的向下取值。(用过了,取新值)
例如:数据a,b,c,d,e,f,g……现在有3个用户(甲乙丙)取值:循环2次
A)顺序的方式:甲(a,b)乙(a,b)丙(a,b)
B)唯一方式:甲(a,b)乙(c,d),丙(e,f)
如果是注册,采用唯一方式,用过了就不能再用。
C)对于单用户来讲,顺序和唯一取值顺序列是相同的。
4)same line as xxx:取值策略与xxx相同(行相同)
2.update value on(更新方式,When?何时取)
1)Each iteration 每次循环:每次迭代时取值(常用)
指的是:Action中脚本,每次迭代更新值
2)Each occurence:每次遇到该参数时取值
指的是:比如每次遇到(name)时,都会更换一次值。
3)once 取值一次:脚本运行过程中只取值一次
值得是:一次选择,终生不变。
当选择unique 时才会出现 when out fo values ,表示取值越界后的处理方式。
3.数据不足的处理情况(只有选择unique时适用)
说明:顺序,随机时认为数据是充足的
规律:当选择顺序方式时,数据取到最后一行,再循环从第一行选取。
When out of valuer:有三种策略
1)Abort Vuser放弃虚拟用户
2)Continue in a cyclic manner 以循环的方式继续
3)Continue with last value 持续取最后一个值。
4.需求:注册脚本,多用户,则数?据池取值策略?
Unique+Each iteration+Abort Vuser
UEA组合。(唯一+每次迭代+放弃虚拟用户)
另外:SE组合也很常用(顺序+每次迭代)
补充知识点:
做一个设置:(目的:为了让页面标题变为自动检查点)
VuGen中,点击录制选项按钮 Edit Recording Options
——>选择Advanced 高级——>选择 Preferences 复选框:
Generate web_reg_find functions for page titles
为页面标题生成检查点函数
再选择:support charset——>UFT-8 对中文网站支持比较好 ok 以后都可生效。
二.参数池策略(自己网上百度的资料)
、参数池的策略 (BS/MS题:讲讲参数池的策略)
1.参数化:(关心的是数据)
1)、含义:同样的业务,出现不同的数据,考虑采用脚本参数化技术
2)、步骤:
确定参数化的数据–>准备数据->提供策略–>参数化
3)、准备数据 (目前:File方式)
<1> 每个参数使用独立文件 (参数池)
<2> 多个参数共享同一个文件 (常用)
Excel工具、Column(序号、列名)、First Data(从哪开始)
4)、参数池策略 (重点、难点)
Select next row: 选择下一行(How?如何取?)
a) Sequential 默认 顺序的
b) Random 随机取
c) Unique 唯一取
d) Same line as xxx 和xxx步调一致
Update value on: 更新方式(When?何时取)
a) Each iteration 默认 每次迭代
b) Each occurrence 每次遇到该参数时取值
c) Once 取值仅一次
When out of values: 数据不足时的处理情况
a)放弃虚拟用户 Abort Vuser
b)以循环的方式继续 Continue in a cyclic manner
c)持续取最后一个值 Continue with last value(原地踏步)
1、选择下一行 (How? 如何取?)Select next row
1)顺序的 Sequential :从第一行开始顺序向下取值
2)唯一的 Unique: 从第一行开始,唯一的向下取值
(用过了,就取新的值)
例如:数据a b c d e f g …,现有3个用户(甲乙丙)取值;循环2次。
A) 顺序方式:甲(a, b) 乙(a, b) 丙(a, b)
B) 唯一方式:甲(a, b) 乙(c, d) 丙(e, f)
如果是注册,采用唯一方式,用过了就不能再用
c) 对于单用户来说,顺序和唯一取值序列是相同的。
3)随机的 Random: 随机取值。(值可能重复)
4)Same line as xxx: 取值策略与xxx相同 (行相同)
2、更新方式(When? 何时取?)Update value on
1)每次循环 Each iteration: 每次迭代时取值 (常用)
指的是:Action中的脚本,每次迭代时更新值
2)每次遇到 Each occurrence: 每次遇到该参数时取值
指的是:比如每次遇到{name}时,都会换一次值
3)取值一次 Once: 脚本运行过程中只取值一次
值的是:一次选择,终身不变
另外,When out of values: 当选择Unique时才出现,表示取值越界后的处理方式
3、数据不足时的处理情况(只有选择Unique时适用)
说明:顺序、随机时认是数据时充足的
规律:当选择顺序方式时,数据取到最后一行,再循环从第一行选取。
When out of values: 有三种策略
1)放弃虚拟用户 Abort Vuser
2)以循环的方式继续 Continue in a cyclic manner
3)持续取最后一个值 Continue with last value(原地踏步)
4)、需求:注册脚本,多用户,则数据池取值策略?
注册脚本,多用户 — UEA组合(Unique+Each iteration+Abort Vuser)(唯一+每次迭代+放弃虚拟用户)
另外常见的组合:-----SE组合(Sequential+Each iteration)(顺序 + 每次迭代)
Parameter List窗口中:
三、综合场景测试——号称能够最真实模拟实际生产环境
综合场景的几个要素:多用户、多个脚本(至少3个脚本),在线执行(多种操作)一段时间(1个小时,50分钟),一般是不加并发点。
录制三个脚本(测试点):购买机票,查询路线,浏览航班;每个脚本都要加检查点(手工)。准备进行综合场景设置。
开始练习录制脚本:day05目录下/ buy search scan
(1)购买机票 buy
录制过程和之前一样,注意添加检查点、事务点
(2)查询路线 search
New脚本 -> vuser_init -> 输入jojo和bean
-> 开始事务login -> 点击Login -> 结束事务login
-> 改为Action -> 点击Flights按钮
-> 选择城市从Denver到 Paris -> 开始事务search
点击Continue -> 添加检查点 “Denver to Paris”
-> 结束事务search
-> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
(3)浏览航班 scan
New新建 -> 改为vuser_init -> 输入jojo和bean
-> 开始事务login -> 点击Login -> 结束事务login
-> 改为Action -> 开始事务scan -> 点击Itinerary按钮
-> 设置检查点 “A total of” -> 结束事务scan
-> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
注意:检查点会浪费性能,所以手工添加检查点时,只需1~2个即可
场景设置的前提:确保脚本录制、调试、回放成功。
(1)录制购买机票 buy
跟以前过程一样,注意添加检查点和事务
(2)录制查询路线,search
New脚本——>vuser_int ——>输入jojo和bean
——>开始事务login——>点击login——>结束事务login
——>改为Action——>点击Flights按钮
——>选择城市从Denver到Paris——>开始事务search
——>点击continue——>添加检查点“Denver to Paris”
——>结束事务search
——>改为vuser_end—>Sign off—>关闭浏览器—>Stop
(3)录制浏览 航班 scan
New脚本——>vuser_int——>输入jojo和bean
——>改为Action——>开始事务scan——>点击Itinerary按钮
——>设置检查点“A total of ”——>结束事务scan
——>改为vuser_end——>sign off——>关闭浏览器—>stop
打开控制塔New Scenario–>Browse 浏览
–>依次加载配置界面,保证三个脚本都打钩
–>点击 Edit schedule
Group Name(默认就是脚本名) Quantity
Buy 2
Search 4
Scan 4
–>schedule Builder:
Schedule Definition: Scheldule by Scenario:默认按照场景方式(选择)
特点:所有脚本共享一个场景
或Group 按照的方式,分组设置场景。
Ramp up:
Start 1 00:00:01[HH:MM:SS]–>OK
每隔1秒加载一个UV
Duration:选择第2项:Run for 000:30:00[HHH:MM:SS]–>点击OK
3)虚拟用户加载部署情况
A)每隔1秒加载一个UV
B)Duration:30分钟
说明:由于Duration运行的是Action部分,所以指的是VUs登录后运行30分钟,10个虚拟用户,10个线程,模拟真实的环境。
再设置Run-time Settings(细节较多)
选择三个脚本(出现黑框)—→点击按钮 Run-time Settings
—→弹出窗口,选择“多”运行模式 RTS的简写
先选择 Individual RTS, 会依次配置每隔脚本,配置完某个脚本会自动打开窗口配置后续的。
Run- logic —→Number of Iterations 1
Pacing:选择第2项:选择random 4 to 6秒
log—→Enable logging(选择)
Log options:
Send message only when an error occurs(选择) 出错时才发送日志
Always send message 总是发日志
Log message at the datail level of :
Stardard log 标准日志 (选择)
Extended log 扩展日志
Think time ;
Use random perceta ge of recored think time:
Min:200% Max:300%
Additional attributes: 附属选择/特殊参数值 目前不配置
Miscellaneous 杂项
Error Handling 中—→Continue on error出现时继续 (打钩)
原因:长时间测试过程中会执行大量的事务,不要因为某个错误停止场景运行。
说明:
Fail open transaction on lr_error_message 不常用
Generate snapshot on error 出错时,生成快照 不常用
原因:会增加工具资源消耗,影响测试结果
Multithreading 中:Thread 线程
Run Vuser as a process 以进程方式(比较耗资源)
Run Vuser as a thread 以线程的方式(比较省资源) 选择默认
Automatic Transactions 中 自定义事务(不设置)
Define each action as a transaction
每一个Action 都作为一个事务,比如:脚本中有3个
Define each step as a transaction
每一个步骤都作为一个事务
Network:speed simulation—→Network Speed 模拟网速
Use maximum bandwidth:使用最大的带宽(选择)
准备一个充足的带宽,将最大的压力呈现给服务器
Use bandwidth:使用选择的带宽
Use custom bandwidth 使用用户自定义带宽
Browser:—→Browser Emulation—→模拟浏览器
Browser properties 属性设置
User—Agent……浏览器信息
Simulate browser cache 模拟浏览器的Cache缓存(去掉打钩)
目的:提高客户端浏览速度
Download non —HTML resources 下载非HTML 资源(打钩)
Simulate a new user on each iteration 模拟新用户(打钩)
Clear cache on each iteraton 每次迭代清缓存(打钩)
Internet Protocol
目的:提高客户端浏览速度
Download non—HTML resources 下载非HTML资源(打钩)
Simulate a new user on each iteration 模拟新用户(打钩)
Clear cache on each iteration 每次迭代清缓存(打钩)
Internet Paotocol
Proxy:No proxy不要代理(默认打钩)
Use custom proxy 如果使用公司代理服务器 则选择
Preferences :都不要改
里面有个 options—→打开 将三个120改为600 指的是超时时间,保证充分时间,达到成功
包括:HTTP-request connect timeout(sec)—→600 连接超时时间
HTTPrequest receive timeout(sec)—→600 收到请求超时时间
Step download timeout(sec)—→600 步骤下载超时时间
点击OK—→开始第二个脚本设置(和buy脚本)
配置好Run-time settings后,继续配置 windows resources
(Run 视图右下角窗口)
右击窗口—→Add Measurements—→
Monitered server machines:选机器 点击 Add 按钮—→
Machine information:
Name:localhost 指定监控服务器的IP地址,主机名,目前就是本机
Platform:WINXP
—→OK
Resource Measurement on :localhost清空里面所有选项
自己完成选项添加(固定13项)
—→点击Add按钮—→选择一下内容;
Available MBytes —→Add
%Committed Bytes in Use—→Add
Page Faults/sec—→Add
Page/sec —→Add
Network intrface 中有2项(网络)
Bytes Total/sec—→MS TCP Loopback inter…回环 —→Add
本地主机才选回环
Packets/sec —→ MS TCP Loopback inter 回环 —→Add
本地主机自己和自己通信,用回环
PhysicalDisk 中有4项:(磁盘)见到total就选
Avg.Disk Queen Length—→Total —→Add
Current Disk Queue Length—→Total—→Add
Disk Read Bytes/sec—→Total—→Add
Disk Write Bytes/sec—→Total—→Add
Processor中有2项:(进程)
%Proceeor Time—→ Total—→Add 表示总和
%User time —→Total—→Add
System 中有一项:(系统)
Processor Queue Length—→Add
—→OK
2.打开控制台,配置综合场景
创建一个新的场景,Browse加入4个版本(reg,buy ,search,scan)
点击edit schedule
选择schedule definition:选择schedule by group
Script path Quantity
Reg.2 1
Bug.2 2
Search.2 3
Scan.2 4
选中reg2脚本
Start time:start at the beginning of the scenario(在场景启动后,立即开始)
Ramp up: 不变 (使用默认值)
Duration:不变 Run until completion(运行直到结束)
打开 run-time settings:
Run Logic :循环11次
Pacing:第二项,选择 random 2~3秒
Log: 默认不变
Think time :replay think time,50% 150%
Miscellaneous(杂项)Error Handling 不选择Continue on error
原因:目前是做数据,如果出错,就不能继续往下跑,以免影响后续脚本执行。
Speed simulation:模拟速度(不变)
Browser Emulation:选择 Simulation browser cache
原因:做数据测试,利用缓存cahe更容易成功
Proxy:代理(不变)
Preferences:options参数(先不动)
(3)search脚本
Start time:选择第3项 start when group reg.2 finishes
Ramp up:1 Vusers every 00:00:01(HH:MM:SS)
每1秒加载1个用户
Duration:选项
参考10用户综合场景案例的配置
一、脚本录制
1.选择协无法议,如果正常协议(Web)成功录制脚本,可以根据系统(如:C/S系统),选择winsock协议(万能协议)
说明:C/S系统越来越少,逐步被B/S取代,大部分是web项目。
测试脚本的主要部分:4 部分
Vuser_init 初始化 仅执行一次
Action: 核心脚本 可以执行多次
Vuser_end 结束脚本, 仅一次
Global.h 头文件,包含重要函数的声明
2.LR的脚本Action越少越好,便于性能分析。
3.性能测试中AUT的服务器(应用服务器,数据库服务器),要分开部署
原因:便于性能测试分析,大多数问题一般是数据库服务器性能问题
4.VUG中窗口内容
1)脚本(上部)中记录的是客户端的请求。
(请求:网页、图片、链接、表单提交)
2)replay log:记录脚本回放(执行)日志(较常见)
3)Recording log:记录LR客户端和服务器二者之间对话的数据包大小(不常用)
4)Generation log: 记录LR客户端和服务器二者之间的全部对话。
5)Correlation Results 自动关联的结果
6)ITEMDATA:属性和数据列表之间的间隔
一、检查点
设置检查点,脚本录制好后再加代码
录制登录
把光标放在相应请求之后
点击 insert→new step→checks→text check ok
出现窗口 Text check properties
Search Parameters
Search for:要检查的文本,确定即可
打开:run-time settings→Internet Protocal
→Pareferences 参数→checks
选择Enable Image and text check 表示允许使用再回放脚本
日志中出现检查点结果。
二、检查点函数区别
三、1.Web_find() (LR普通函数)
1.web_find() (LR普通函数)
特点:从htm1页面中查找指定的文本字符串,比较占资源,效率低,较少使用。
2.web_image_check()
1)alt参数:当鼠标悬浮在图片上时显示的名字,给用户看的
2)Src 参数:图片的路径及图片的名称,给程序员看的。
3.web_reg_find()(LR注册性函数)
特点:在缓存中(ht ml源代码级别)查找查找相应的内容,效率高,最常用。
4.web_reg_find要写在相应的请求之前,因为是注册性函数。
规律:LR所有注册性函数,含有reg字样,都要写在相应的请求之前。
案例:用两种方式添加web_reg_find检查点
先找到检查的文本:添加查看页面源代码,拷贝检查的文本。
Welcome, jojo 找到init脚本中,相应请求之前的位置,光标停留。
Web_submit_form():之前
方式一:点击自动生成
insert→New Step.→Services→找到web_reg_find→OK 弹出窗口中:
单选 serch for specific text查找指定文本
填入 :Welcome,jojo
其他参数忽略
生成:web_reg_find (“Text=Welcome, jojo< /”,LAST);
方式二、手写脚本(文本内容黏贴才准确)
Web_reg_find (“Text =welcome, jojo”LAST);编写-回放
5.添加每一个检查函数的第一步,都要在脚本中找到相应的请求(确定Action-确定 trnsation -找到录制形式的请求)
6.LR脚本中有两种变量,一种是C语言的变量,需要在脚本的开始出定义(int a );另外一种LR的变量,出现在LR的函数里,不需要定义,如果使用LR变量的实际值,则必须加{} (如:{name})
7.Lr_eval_string 函数起到桥梁的作用,将IR的变量介绍给C语言的函数使用。LR变量→C语言能够理解的字符串。
该函数的返回值结果,就可以给C语言函数当做参数使用。
Lr_eval_string(“{abc_count}”)
Lr_eval_string(“{name}”)
8.strcmp(a,b)表示两个字符串变量的值是否相等。如果返回0
,则表示两个字符串相等(C语言函数)
9.lr_eval_string(“{abc_count}”)
Lr_eval_string(“{abc_count}”)之后默认接();()中字符串,所以加“”
Lr_output_message(“%s次,lr_eval_string(“{abc_count}”)
10.C语言中%s表示字符串格式符,经常用于输出语句,%d表示整数的格式符
11.以上语句表示将lr_eval_string(“{abc_count}”)最终得到的数据以字符串的格式输出。
12.输出count的语句要写在相应的请求之后,因为请求之后才有应答,在应答内容中找到几次,需要在应答后统计。
四.脚本两种录制方式。
1)VuGen 中界面中–Enit Recording Options按钮–Genera中recording选择两种之一:
HTML -base script 和 URL-base script
2).开始录制之前,在弹出录制选项的窗口中点击options按钮。
2.基于HTML方式脚本比较简单,篇幅短
3.基于URL方式脚本比较复杂,篇幅长
4.忧郁一些特殊系统,或者基于HTTPS(基于安全的HTT一般要P协议,常用用于银行,证券,石油)协议的系统,则一般需要使用URL方式录制才行。原因:URL录制脚本比较全面。
五.在控制台中查看日志:(多用户,产生多个日子)
1.如果从脚本中直接打开控制台,则控制台的日志默认记录在脚本文件中(不常用,可能出现问题)
性能测试结束后,要对测试结果进行分析,分为三种情况:
1.测试结果完全符合需求,不需要分析。
2.测试结果存在问题,(不符合需求,时间超长),直接通过测试报告(Aanlysis)查找到原因,直接写出报告。
前提:对应的Analysis中结果描述非常清楚。
3.如果通过测试报告没有得出结果(性能瓶颈),这种比较复杂。
4.比如:发现某些事物响应时超长(最普遍),该如何处理?
1)通过Analysis报告中几个比较重要的图表进行查看,初步定位问题,再通过网页分图(网页诊断图)去确定响应时间长在系统的哪个部分。大多数情况下,时间长在服务器端。
响应时间=客户端时间+网络时间+服务器时间
2)要进一步确定哪台服务器(复杂的系统服务器 n, 甚至几十台——集群)
答案:通过监控服务器的系统资源图,能够很容易的定位哪台服务器不正常。
3.如果是应用服务器(在企业中也常称为中间件),如Tomcat,JBoss,Weblogic, WebSphe
共性:都是软件,都安装在服务器主机上提供企业级应用的支持。
区别:免费、收费(企业上百万)
Tomcat:Apache开源组织,免费
Weblogic:BEA公司出品,后来被orcal 收购了。
WebSphere:IBM公司应用服务器
4)大部分情况下都是数据库服务器出现问题,可以通过专门的数据库监控工具去监控,甚至可以提取到相应有问题的sql语句。可以对sql语句进行分析,调优,进而提升被测系统的性能。
5)以上的调试流程不适合于每个系统,绝大部分的系统都可以在前面的某些步骤停止,完成性能分析过程。
接着关注:网页细分图,服务器系统资源图,
操作:打开loadrunner-Analysis
打开 11用户综合场景11
右击Graphs→Add Graphs→打开 open a new graph窗口
在web page Diagnostics 中进一步查看细分图
二、页面细分图的初步概念
概念:评估页面的内容对事物响应时间的影响,可以深入分析网站上下载慢的图形或中断的连接等有问题的元素。
(web Page Breakdown 网页诊断图) (网页细分图)
1.页面上的组件,也叫做页面的元素,包括组成网页的内容:文字,图片,音频,视频,……
2.(页面组件图)和(页面组件细分图)区别:
1)前者可以获取到页面中某个组件的平局响应时间。
——从宏观方面
2)后者可以获得页面中某个组件在整个测试过程中的响应时间变化情况。
——从微观方面
分析时:以上两张图,相互呼应。比如:如果选择了浏览器Cache(缓存),开始下载比较慢,利用缓存,后来变快了。
打开: Page Download Time Breakdown 页面下载细分图
响应时间:包括请求后,响应的各个阶段。
8项中主要关注4项:
DNS Resolution:DNS 解析时间
Connection:连接时间
First Buffer:第一次缓冲时间
Receive:接收时间
1)DNS(Domain Name System 域名解析系统)
将服务器的域名和服务器的IP地址,对应起来的系统,可以将域名解析为IP地址。
http://www.baidu.com—— 192.168.XXX.XXX
域名 好记忆 IP很具体
提示:局域网,只需要IP地址,不存在时间。
好比:根据公司找到主机号码时间。
2)Connection 时间:
解析出 Web Server 的地址IP地址后,浏览器请求发送到Web Server ,然后浏览器和 Web Server 之间需要建立一个初始化HTTP连接,服务端需要做2件事,一是接收请求,二是分配进程,建立该连接的过程就是connection 时间。
好比:总机接到电话,指派一位客服为之所以服务的时间。
3)First Buffer:第一次缓冲(第一个数据包)
Client————Web server ——DB server
可以细分为:网络及服务器处理时间+数据库的时间
发送到第一个缓冲 (缓冲大小最大为8K)
1个字节byte=8bit 为
内存的分配是以字节为基本单位,网络一般以bit为传输单位。
一般一个字母占一个单字节:一个有汉子占用2个字节(字节集有关:GBK编码字符占2个字节, UTF-8的汉字占3个字节)
好比:获取一个数据包的内容,很重要
4)Receive 时间可以衡量网络质量情况。如果该时间较长,则一般说明网络不好。如果确定测试环境是内网,网络不是问题,则可能是客户端,服务器的问题。
好比:获取到所有数据包的接受时间,从第一个字节开始记录。
5)SSL握手时间(只发生在HTTPS协议通信的网络页面上)
6)Clicent time(由于客户端引起的延迟)
如:客户端接收信息时间较长,客户端处理响应包的时间较长,客户端显示应包的时间较长客户端显示响应包的时间较长。
7)Error time (系统页面报错时才发生,不是总是)
8)FTP time (FTP验证时间,当系统中存在FTP(File Transfer Protocol)
文件传输协议,服务器下载操作才产生该时
操作:打开Page downboad time breakdown(over time) 发生legend中,每个元素,都有8中颜色。
所以,显示内容条数:元素个数8
发现那个值越高,越要注意
4.注意:看结果分析图,一定要注意,不光要看图的走势,还要看图中坐标的单位。要看二者结合的结果。
比如:一张图中走势在某处(某个时间范围)很陡峭,但其下载时间的坐标中最高值为0.555所以该时间没有问题。
现象:Fist Buffer占用比例大(与网络和服务器有关),可以进一步细分网络时间和服务器时间。
网络时间:
Client 第一次http请求开始计时→Web Server —DB server
直到返回服务器的第一个缓冲的时间。
5.First Buffer时间,细分为网络时间和服务器时间,如果网络(带宽)情况不好,则网络的时间可能会对服务时间造成影响:如果是内网测试,则基本没有这种问题。
操作:打开 Time to First Buffer Breakdown (宏观)
第一次缓冲时间细分图(随时间变化)
发现细分图条数:元素个数2
6.页面中 组件(元素)大小的和=该页面的大小
打开Download Compent size(KB) 已经下载的组件的大小图
结合 breakdown tree 细分树 查看
7.页面诊断图(综合图)的两种方式
1)右击Graph→Add new graph→web page Diagnostics
2)从事响应时间中选择需要分析的时间,点击右键(页面诊断)
,直接打开(经常使用,目标明确)
找到Graph→Average Transaction Response Time
→找到某条折现→右击→show Diagnostics for “xxx”打开,xxx就是事务名称,比如“login”
观察综合图的分布规律
1)左边的是细分树 breakdown tree
比如login的URL地址,对应右边中间:Select Page to Break Down 中的地址。
2)最上边sverage Download Time下载细分时间
3)右边中间组件细分部分(最关心的部分)
具备四个选项
Downloat time
Componet(overtime)组件细节
Download Time (Overtime) 下载时间细分
Time to first Buffer (Overtime)第一次缓冲时间
关注:Download Time 分为8种颜色
右击条目
(a)拷贝全路径到剪切板
(b)在浏览器上显示view page in browser
各种颜色 蓝色First Buffer 比例最大,想进步分析First Buffer,
单选:Time to First Buffer(Over time)
又细分为:network time 和 server time(大部分)
基本线索:找到某个组件,单选钮切换针对该组件看不同相关的图
归纳:
右侧:上中下都有关系
上:显示下载时间图 中:显示URL地址,具体细分图
下:显示该项打钩
6.页面诊断图(综合图)的分析方式:
一般从事务平均响应时间中定位到某个事务产生诊断图
1)一般情况下,先通过默认页面(Download time )→First Buffer ,即发现当前网页中某个组件的第一次缓冲较长,再到第一次缓冲时间细分图中,确认网络时间还是服务器时间,多半是服务器时间,则瓶颈定位到服务器端。
四、模拟缓存设置问题
1.一般在进行性能测试时,都要清除缓存,一方面是为了严格测试,另一方面模拟真实实际情况(比如:网络应用)
2.在做测试数据时,越省力越好,所以一般情况下不需要清除缓存
打开:VuGen→Run-time settings→Browser
→Browser Emulation 浏览器模拟
→Simulation browser cache 模拟浏览器缓存(一般都不模拟)
Cache URLs requiring content(HTMLs)
Check for newer versions of stored pages every visit to the page.(检查存在缓存的页面版本,比如对图片进行版本的检查,模拟的时候,会增加结论的压力)
结论:测试中一般选择项
第一项不选:Simulation browser cache
后面的都选择打钩()
%prcessor Time :处理器排行非空闲线程的时间百分比,如果该值持续超过95%,怀疑是瓶颈是CPU
Processor queue length:线程单元中处理器队列的即时长度。所有处理器都是用单一队列。(线程长度在该队列中等待处理器进行循环),次长度不包括当前正在执行的线程。
资源监控
1.CPU、磁盘、内存之间千丝万缕联系,内存的执行速度要远与磁盘,内存相当于系统(比作工厂)的加工间,磁盘相当于手工厂仓库。如果车间越大,工人工作越快,如果车间越小(被废料填满),则系统运行缓慢。
关注13项(最重要的)理解
处理器:processor:%Processor Time
内存:Memory:%Commited Bytes in Use
Available MBytes
系统:sysem:Processor Queue Length 系统队列长度
非常有名的数据结构
栈 Stack:先进后出 FILO First In Last Out
队列 Queue :先进先出
二、磁盘的重要指标 phsical Dick
1.Dick Reads(Writes)/sec 磁盘的读或写的阀值;
一般不超过10M
如果发现磁盘的读写超过了几十M或上百M,会严重影响系统性能。怀疑是磁盘瓶颈。
2.性能调优的一个重要原则就是:尽量减少磁盘IO
说明:Disk I/O 就是磁盘的in或out 读/写
3.磁盘的I/o绝对不可避免(磁盘和内存的交互必不可少),但是可以,尽量减少。
举例:
JAVA 如何提高系统性能(软件本身)
1)使用缓存Cache:空间换取时间
更多的内存空间 ,更快读取时间
提前将磁盘中的数据读入内存,供程序使用。
2)使用单例
保证一个类在系统中最多只创建一个实例(对象)
三、网络的重要指标
Bytes Total/sec(重要)和Packets/sec
1.Bytes Total/sec:将该值乘以8,与网络带宽的一半进行比较,如果小于带宽的一半,则一般没有问题。
2.1bytes =8 bits
说明:网络商带宽单位,一般都用Bits,显得数值大,比如100Mbps;每秒100M bit
100M byte
四、性能分析——监控服务器资源
(客户端在测试时,不需要监控,因为主要对AUT监控,主要是其服务器) AUT:被测系统
1、为何只监控服务器:测试AUT的性能,只需要关注AUT的服务器即可,客户端只需要偶尔观察:
使用安装LR的测试机(模拟客户端)测试时,偶尔打开本机的任务管理器,点击“性能窗口”,查看,保证正常使用即可。
2.如何监控服务器内存泄漏?(笔试简答题)
——首先正常测试(监控正常指标),当发现被测试系统的内存曲线不正常时,再去测试三项指标。
1)正常的情况:物理内存在测试过程中不断被测尽,在测试结束后释放回来。
2)三项指标(两升一降)
Process/private bytes 和 Working set 计数器 升高
Available bytes 的值降低
比如:日志 每天写日志,磁盘满了,出现内存泄漏
3.如何判断应用程序的问题:Cpu平均值高,吞吐量整体水平不高甚至下降,但是上下文切换很高(正常系统中,偶尔的,适当的上下文切换是有必要的,诺频繁,则有问题),说明系统应用程序存在设计或代码方面的问题。
五、性能分析举例
1.系统响应时间,多用户使用人数等都满足需求,但是系统中处理器队列。(Processor 队列)
的平均值达到56(其他的各项指标都在阀值范围内)——如何处理?
从硬件开始分析
首先查看服务器的配置,发现采用PC机做服务器→需要更换服务器
2.如果搭建测试环境时,需求说明中要求1台4G的服务器,但是实际有两台:一台2G内存,一台8G内存,问使用哪台搭建?
一般使用低配置服务器来搭建环境,因为这样可以保证严格测试。
3.BUG一般在功能测试中的问题,性能测试中称为瓶颈,或者性能瓶颈。
六、测试中报告错误分析:
1(提前)断开连接——
1)应用服务器死掉(应用服务器崩溃down机),被测网站无法访问(该页面无法访问)——用户数目少时,一般就是程序问题
2)应用程序服务器没有死(应用访问正常),被测系统可以正常访问。
——一般服务器连接池的问题(大用户的访问量,连接池连接出现故障)
连接:可以理解为对象,系统启动时,提前准备一块内存空间,创建一定数量的连接对象,备用。等待请求到来时,分配某个连接供其使用,使用完毕归还设置为可用。为了提高访问效率。管理这写连接空间,称为连接池。
七、http 常见的状态码
1)200——OK 服务器成功接收并发送
2)4xx——客户端错误
比如:404 表示资源(网页,web资源)找不到
405 表示缺少方法的支持
3)5xx ——服务器错误
500 表示服务器端程序异常
505 表示缺少相关的协议支持
接口测试
什么是接口?
接口的种类:外部接口
内部接口:上层服务于下层服务、同级服务
HTTP分四类:post/get/delete/put
接口测试流程:需求讨论、需求评审、场景设计、用例设计、数据准备、执行