LoadRunner虚拟用户高级开发指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-11 04:02:44

点击下载

作者:中国民生银行信息科技部

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

LoadRunner虚拟用户高级开发指南

LoadRunner虚拟用户高级开发指南试读:

前言

在刚刚出版的作品《大型IT系统性能测试入门经典》中,我们提出了“亚健康软件”的概念,并提出了治疗“亚健康软件”的良药——全面性能测试方案。在性能测试工作中实施全面性能测试方案,无疑离不开强大的性能测试工具,而LoadRunner几乎成了性能测试的必备工具。

在实际工作中,很多使用LoadRunner的测试人员开发Vuser脚本时总会遇到这样或那样的问题,影响到性能测试工作的正常进展。而对于性能测试人员而言,Vuser脚本开发技能是一项基本功,需要在工作中长期修炼才能学有所成。

本书主要为了LoadRunner使用人员精通脚本开发而创作,目的是分享作者们的经验,使大家在更短的时间内成为LoadRunner的高手。

创作特色

本书从构思之初到创作完成,一直把“如何使LoadRunner性能测试人员成为Vuser脚本开发高手”作为主要目标。因此本书既注重实战经验的推广,又注重开发技能的培养。在内容设计上,本书精选了最常使用的LoadRunner协议作为研究对象,结合相关的开发知识深度讲解如何学习各类Vuser脚本开发,从而达到触类旁通的学习效果。

本书在创作上具有以下的特色:

实践性强:本书讲解的知识大多数来源于作者们的一线工作经验,在讲解方式上非常注重从实际应用的角度进行探讨与分析,并提供大量的实际案例。例如,对于API函数绝对不是仅仅翻译帮助文档中的相关内容,而是实际中用到什么就重点讲解什么,而将查阅帮助文档这类基础工作留给读者自己来完成。通过这种训练方式,读者才能真正提高自己的脚本开发能力。

Vuser类型全面而典型:本书精选HTTP、Web Service、Socket、.NET、Java、Tuxedo、移动APP相关的Vuser作为典型讲解对象,同时结合C语言、DLL、C++、C#、面向对象等知识,基本覆盖到了各种架构的 Vuser 开发知识。掌握这些技能后,读者完全有能力去开发各类LoadRunner脚本。

丰富的实战案例:本书提供的案例非常丰富——既有一个个实用的小案例,又有内容全面的大案例,这些案例可以直接迁移到自己的测试环境中来使用。例如第3章的代理录制方式,很好地解决了一些客户端不能录制脚本的问题。读者可以按照这种方式开发移动 APP、嵌入式平台客户端、Linux 客户端,以及一些 C/S架构应用程序客户端的Vuser脚本。

大量实用的代码:代码丰富是本书非常突出的一大特点。本书既提供了大量Vuser开发过程中经常使用到的代码——这些代码可以在实际 Vuser 开发过程中直接使用,又提供了一些开发项目的源代码——使得读者可以深入了解一些产品的开发原理与实现过程。

广度与深度适中:本书范围非常广泛,既讲解了VuGen相关的Vuser开发知识,又讲解了C、C++、C#、.NET、Java等开发语言,以及相关IDE的使用知识。在内容深度上,本书尽量选择难度适中的例子,通过循序渐进的学习,使读者逐步掌握开发要领。

学习建议

对于开发基础薄弱的初学者,学习本书时可以分为两个阶段:

第一阶段:建立信心,打好基础。很多测试人员不是没有能力开发程序,而是畏惧自己动手去写程序。正是因为没有足够的信心,导致很多测试人员对程序开发这座大山望而却步,一直从事相对容易的功能测试工作。因此,对于想从事测试开发的工程师而言,首先应该突破心理上的畏惧,“勇敢”地挑战这一工作。

本阶段的具体做法就是动手调试书中的每一个小程序,特别强调的是千万别“只看不练”。看懂了不一定能自己写出来,写出来也不一定在自己的环境中运行正确。只有自己动手,才能为后续的学习打好基础。本书提供了大量的案例,只有通过学习与练习,才能实现建立信心、打好基础的目标。

在练习这些小例子的过程中,还应该注意查看VuGen的函数帮助文档。通过学习帮助文档的内容,能达到举一反三的学习效果,从而做到活学活用。

第二阶段:巩固基础,提高技能。在写出小程序后,接下来的目标是形成一定的设计能力。这一阶段的主要任务是完成复杂案例程序的开发。对于复杂的案例程序,尽量不要完全照搬书中的代码,而是根据相关产品的功能,结合书中产品的设计思路,自己独立来完成代码——这是一个创造的过程。

例如,对于第6章的示例程序CommandRunner,可以自己去查阅.NET中相关Socket知识,完成其功能开发,最后再完成 Vuser 脚本的开发工作。或者可以先参考各个类的设计思路,然后自己实现具体的功能设计和程序开发工作。

这一阶段还应该做的就是博览群书——LoadRunner涉及的开发知识很多,因此需要借鉴大量的相关图书资料来提高自己,这也是成为高手的前提条件。

对于有一定经验的读者,可以直接开始进行第二阶段的学习

下面具体介绍各章的学习方法:

第1章 虚拟用户开发基础。本章是全书的基础,掌握好本章的内容才能更好地学习后续内容。学习本章时,要重点掌握C语言与Vuser脚本、Vuser开发常用函数、参数化功能详解三部分内容。Vuser开发常用函数部分重点学习字符串处理函数、消息处理函数部分。学习时应该认真调试相关函数,并查阅函数在VuGen函数帮助文档中的相关内容。

第2章 深入解析Web虚拟用户。本章重点学习HTTP协议基础、检查点、关联的相关知识,尤其是一些Web虚拟用户常用函数的用法。本章是开发Web虚拟用户的基础,建议读者学习时积极练习相关知识点的应用。

第3章 深入解析Web Services虚拟用户。本章重点学习Web Service脚本的三种开发方式,每种开发方法都要进行足够的练习。在实际工作中,这三种脚本开发方法通常需要逐一进行尝试,以确定哪种更适合当前系统的脚本开发,因此需要全部掌握。

第4章 深入解析Socket虚拟用户。对于本章内容的学习,应该首先掌握基本Socket虚拟用户函数的用法,这是开发Socket协议Vuser的基础;其次应该深入掌握基于端口映射的代理方式录制脚本方法,对于很多不能直接录制脚本的应用,例如移动 APP、基于Linux/Unix的客户端应用,通常采用这种方式来开发虚拟用户脚本。

第5章 深入解析动态链接库技术。在Visual C++中开发DLL,以及DLL的高级应用一直是学习 LoadRunner 脚本开发的难点之一,本章循序渐进地讲解了这部分知识。读者学习时按照书中的步骤进行演练即可,如果有兴趣可以查阅相关书籍来掌握更多的知识。

第6章 深入开发.NET虚拟用户。本章的重点学习内容是.NET虚拟用户常用程序、C/S应用开发与测试案例、视频播放性能测试案例等三部分。建议读者将常用程序部分建议看懂后,自己独立实现其功能——只有这样才可以得到很好的程序开发训练。同理,C/S 案例部分学习完成后,一定要自己开发出 CommandRunner,这样才能建立系统的面向对象意识,设计出好的脚本程序。视频播放案例部分主要是学习解决问题的思路,读懂即可。

第7章 深入开发Java虚拟用户。本章主要讲解Java虚拟用户的开发知识,重点内容是 Java 虚拟用户的开发基础知识,以及如何调用开发人员已经实现的 API。如果读者对这部分内容特别感兴趣,可以独立练习本节的案例,也可以去看一些专业的Java开发作品。

第8章 Tuxedo协议虚拟用户开发。本章重点学习Tuxedo协议虚拟用户开发的基础知识,掌握Tuxedo这一重要交易中间件的Vuser脚本开发方法。学习过程中,首先需要动手掌握Tuxedo域环境的搭建方法,然后练习Tuxedo两种缓冲区脚本的开发方法。

第9章 深入开发Mobile APP虚拟用户。本章重点学习Mobile APP的Vuser脚本开发方法。读者需要掌握模拟器和代理两种方式来开发Mobile APP的Vuser脚本。在实际应用中,这两种开发方式都会用到,因此全部需要认真掌握。

第10章 网络通信虚拟用户开发案例。本章主要为了扩充知识面而编写,重点讲解了一个基于UDP协议应用程序的Vuser脚本开发方法。本章既讲解了程序客户端与服务器的实现过程,又讲解了 Vuser 的开发方法,融合了前面各章节的诸多内容。读者学习时可以主动查阅相关资料来扩充自己的知识体系。如果对案例程序比较有兴趣,可以进行更深入的研究与开发。

读者对象

如果想成为LoadRunner高手,本书知识是必不可少的修炼内容。本书读者可以细分如下:《大型IT系统性能测试入门经典》《LoadRunner性能测试指南》等《陈绍英作品系列》的读者:可以继续深入学习LoadRunner高级开发知识,以解决实际工作中遇到的各种Vuser脚本开发问题;

受各种 Vuser 开发问题困扰的测试工程师:很多 Vuser 脚本开发的问题都可以在本书中找到答案,甚至可以通过学习本书独辟蹊径来解决自己遇到的问题;

希望提高 Vuser 开发技能的测试工程师:学习本书可以大大提高测试工程师的Vuser脚本开发技能,有了本书就不必再四处搜寻资料或者去论坛上学习;

有 LoadRunner 经验的开发/测试工程师:本书中很多高级内容仍然值得有经验的工程师来学习,可以帮助其开阔眼界,提高开发方面的技能;

具备一定开发基础的开发/测试工程师:即使没有 LoadRunner 使用经验,仍然可以通过本书学习LoadRunner虚拟用户开发。有了开发基础可以大大加快本书的学习速度;

准备成为性能测试工程师的技术人员:希望向性能测试领域发展的测试工程师,可以将本书与《LoadRunner性能测试实战》一书同步来学习。

关于本书

全书共分为10章。第1,2,4,5,6,7章主要由陈绍英创作完成,第3,8,9,11章主要由周志龙创作完成,第10章主要由冯艳硕创作完成。

各章主要内容如下:

第1章 虚拟用户开发基础。本章首先介绍了Vuser的一些背景知识,接着深入探讨了Vuser开发的必备知识:C语言基础、Vuser开发常用函数、参数化。C语言部分主要介绍了数组、指针、字符串、printf输出函数、分支与循环语句、Vuser开发中常用C函数、文件访问等内容;Vuser开发常用函数主要介绍了用户事务函数、字符串处理函数、消息处理函数、脚本信息函数、错误处理函数等内容;参数化部分深入探讨了参数化基础知识、文件类型参数等内容,并结合实际案例讲解了参数化的具体应用。

第2章 深入解析Web虚拟用户。本章首先讲解了HTTP协议基础、Cookie应用等基础知识,接着讲解了检查点、关联等常用Vuser开发技术;最后讲解了Web类脚本开发常用函数的用法以及常见问题的处理方式。

第3章 深入解析Web Services虚拟用户。本章重点讲解了Web Service脚本的三种常用开发方式:web_service_call模式、soap_request模式、web_custom_request模式。通过依次尝试这三种模式,可以解决大部分Web Service应用的脚本开发问题。

第4章 深入解析Socket虚拟用户。本章首先讲解了Socket虚拟用户常用函数的用法,重点介绍了基本函数、关联函数、超时函数、Buffer 函数、转换函数;接着以基于 Socket的网络应用程序 WinSocketSample 作为实战测试对象,讲解了如何使用代理方式来录制基于Socket应用的用户操作以生成Vuser脚本,其中的代理方式分别介绍了单机代理和多机代理两种方式,并介绍了如何对生成的脚本进行参数化;然后分享了一些项目中的实战经验;最后介绍了一个通过脚本日志定位性能问题的案例,向读者展示了如何在实际中灵活使用所学的知识来发现性能问题。

第5章 深入解析动态链接库技术。本章详细探讨了动态链接库这一在 LoadRunner中经常用到的技术,尤其深入探讨了DLL在Visual C++中进行使用的相关知识。本章包含DLL的基本使用、Visual C++中创建与调用DLL、函数名称改编、C++类的导出与封装、MFC DLL、DLLMain函数等知识。

第6章 深入开发.NET虚拟用户。本章前半部分全面系统地介绍了.NET虚拟用户基础知识,包含.NET 虚拟用户适用范围及安装配置、创建.NET 虚拟用户项目、面向对象开发基础、常用.NET程序等四部分内容。本章后半部分介绍了一个C/S架构应用的Vuser脚本开发案例,通过深入了解测试对象CommandRunner的设计与实现过程,使读者掌握这类Vuser脚本开发的基本方法。

第7章 深入开发Java虚拟用户。本章首先介绍了Java虚拟用户基础知识;接着介绍了如何在Eclipse创建与编译Java类文件以及如何在Java虚拟用户中调用编译好的类文件;然后分享了一些项目中的实战经验;最后通过并发下载文件、信用卡审批、脚本数量精简等案例讲解如何在实际中使用Java虚拟用户。

第8章 Tuxedo协议虚拟用户开发。本章详细介绍Tuxedo协议虚拟用户开发的基础知识:首先介绍了Tuxedo域环境的搭建方法;接着介绍了Tuxedo中CARRAY类型、FML(32)类型两种缓冲区脚本的开发方法。通过这些基础知识的学习,读者可以掌握Tuxedo这一重要交易中间件的Vuser脚本开发方法。

第9章 深入开发Mobile APP虚拟用户。本章探讨了Mobile APP的Vuser脚本开发方法,重点介绍了模拟器和代理两种开发脚本的方式。目前,Mobile APP得到了空前的推广,因此读者需要系统掌握Mobile APP虚拟用户的开发方法。

第10章 网络通信虚拟用户开发案例。本章重点讲解了一个基于UDP协议应用程序的Vuser脚本开发方法。首先讲解TCP与UPD协议的相关知识,接着介绍案例协议的相关实现方式,然后讲解服务器与客户端的设计与实现,最后介绍了 Vuser 脚本的设计与开发方法。通过本案例的学习,读者可以系统掌握网络通信类应用的Vuser脚本开发方法。关于作者陈绍英

15年以上IT系统开发与测试经验。现就职于中国民生银行信息科技部测试管理中心。

拥有银行、互联网、电子政务等领域IT系统的测试管理与实施经验,目前主要专注银行系统的性能测试与自动化测试。现负责所在银行IT系统的性能测试、移动APP自动化测试、接口自动化测试、智能一体化测试平台 DT 的设计、开发与推广等工作,曾经带领团队完成了民生银行新一代银行IT系统中100多个业务系统的性能测试组织管理与实施工作。

作者在软件测试理论与实践方面进行了非常深入的研究与探索,目前已出版原创图书作品四部:《Web性能测试实战》,2006年5月,国内第一本性能测试理论方面的作品《LoadRunner性能测试实战》,2007年9月,国内第一本讲解LoadRunner的作品《LoadRunner虚拟用户开发指南》,2009年4月《大型IT系统性能测试入门经典》,2016年5月

翻译作品一部:《软件测试与持续质量改进》第二版,2008年;第三版,2011年。

在《金融科技治理与研究》《程序员》等杂志上发表过《银行 IT 系统功能&性能一体化测试理论及应用》《性能测试》《治疗软件亚健康》《性能测试兵法》《架构设计阶段的性能测试》《中小型IT企业产品测试案例解析》等多篇文章。

作者在性能测试理论、技术方面的研究与探索,丰富了国内IT领域性能测试相关的理论体系,推动了性能测试在国内的发展速度。《Web性能测试实战》一书中提出的“全面性能测试模型”,成为很多测试团队组织与开展性能测试工作的指导原则。作者在出版图书的同时还借助视频、讲座等方式,传播性能测试知识与经验,直接或间接使很多项目经理、测试工程师掌握了如何系统地规划、设计、实施性能测试。

作者近年提出的功能、性能等测试同步进行的“智能一体化测试”理论,目前已经进入到实践应用阶段,基于“智能一体化测试”理论研发的中国民生银行智能一体化测试平台DT(DefectTerminator)已经投产使用。周志龙现就职于中国民生银行信息科技部测试管理中心。

拥有近10年IT系统开发与测试经验。在银行、电信、互联网等领域IT系统有着丰富的性能测试项目经验和测试管理经验,擅长性能测试分析及调优。

曾参与编写《大型 IT 系统性能测试入门经典》《性能测试进阶指南》等书,承担过中国移动、中国电信、中国网通、中国建设银行、中国民生银行等相关系统的性能测试实施项目。

目前主要专注银行系统的性能测试与自动化测试。金成姬北京大学光华管理学院在读MBA。

10年以上 IT 行业从业经验,擅长测试团队管理,拥有丰富的软件测试管理与实施经验。曾参与编写《Web性能测试实战》《LoadRunner性能测试实战》《LoadRunner虚拟用户开发指南》等作品。第1章虚拟用户开发基础

在LoadRunner虚拟用户(Virtual User,Vuser)开发过程中,往往会涉及很多开发工作,录制与修改脚本只是入门级的开发方法。例如很多应用系统无法进行录制,这类系统就需要手工来开发脚本。

本章主要讲解手工开发 Vuser 脚本的基础知识,掌握后可以更好地完善与增强 Vuser脚本的功能,为后面学习更高级的Vuser技能打下坚实的基础。

本章主要内容如下:

虚拟用户开发简介

C语言与Vuser脚本

Vuser开发中常用的函数

参数化功能详解1.1 虚拟用户开发简介

Vuser开发不是简单地模拟用户的操作,更不是单纯地录制与修改脚本。只有掌握了足够的性能测试与LoadRunner的相关知识才能设计与开发好Vuser脚本。否则,即使学完了本书的全部内容也不一定能够做到学以致用,很可能在进行Vuser开发时仍然不知所措。在学习性能测试知识的过程中,开发知识属于基本功,掌握了开发技能也仅仅是学习的开始。1.1.1 Vuser开发准备工作

对于一个掌握了足够性能测试与 LoadRunner 使用知识的脚本开发人员,还应该在Vuser开发之前做好下面3项准备工作。

深入了解系统功能:深入了解系统是进行性能需求分析的前提。Vuser开发人员应该依次落实待测试系统有哪些业务、哪些业务是核心业务、哪些业务需要进行模拟。了解系统功能后,还可以提前做些相关的技术准备,以尽早突破 Vuser 开发中的一些技术难点。

深入了解系统架构:分析系统的架构,弄清楚开展性能测试需要做哪些技术准备工作,系统潜在的压力点有哪些,进而确定重点模拟用户的哪些业务和操作。

设计性能测试场景:前面两项准备工作完成之后,接下来就是设计性能测试场景。性能测试场景是Vuser开发的依据,Vuser脚本开发应该以性能测试场景作为基础,而不是随意去模拟用户的行为。

上面3项工作是非常重要的,也是性能测试设计阶段的核心工作,因此应该认真完成。当准备工作做好后,就可以用我们掌握的开发技能去解决 Vuser 开发中遇到的问题,完成Vuser开发工作。

本书重点讲解Vuser开发过程的相关知识,关于性能测试设计与LoadRunner的更多内容可以参考作者同系列作品中的《大型IT系统性能测试入门经典》《LoadRunner性能测试指南》《大型IT系统性能测试规划、设计与实施》等书籍。1.1.2 脚本协议选择

创建虚拟用户脚本的第1步是选择协议。LoadRunner支持的虚拟用户协议类型非常广泛,每种 Vuser 协议一般适合于特定体系结构。另外,很多 Vuser 协议既可以单独使用,又可以和其他协议组合在一起使用,以创建有效的负载测试方案。

下面是LoadRunner11支持的各类常用协议。

Client/Server:主要有COM、DCOM、DNS、FTP、LDAP、Microsoft .NET、RTE、Tuxedo、Windows Sockets协议。

Custom:主要有C、Java、JavaScript、VBScript、VB类型脚本。

Database:主要有MS SQL Server、ODBC、Oracle(2-Tier)。

E-business:主要有Action Message Format、AJAX、Ajax TruClient、Flex、Java Over HTTP、Media Player、Microsoft .NET、Real、Silverlight、Web(Click and Script)、Web(HTTP/HTML)、Web Services等协议。

ERP/CRM:主要有Oracle NCA、Oracle Web Applications 11i、PeopleSoft Enterprise、Peoplesoft-Tuxedo、SAP-Web、SAP(Click and Script)、SAPGUI、SAPGUI、Siebel-Web等协议。

Java:主要有Enterprise Java Beans、Java Over HTTP、JAVA Record Replay、Java Vuser等协议。

Mailing Services:主要有IMAP、MAPI、POP3、SMTP等协议。

Remote Access:主要有Citrix_ICA、RDP等协议。

Wireless:主要有Multimedia Messaging Service等协议。

一些测试人员刚刚接触 Vuser 开发工作时不知道如何选择录制协议,通常会把选择协议和具体的运行平台,甚至与开发人员使用的开发语言关联起来。例如,有些人可能会问“一个基于WebLogic、Oracle、Java的电子商务应用应该选择什么协议”。实际上,选择协议的关键是看要模拟的终端用户与服务器之间采用了什么协议来进行通信,然后选择对应类型的Vuser协议,而与具体的技术开发平台没有直接关系。

下面是一些常见的选择Vuser协议的原则。

基于浏览器的应用多选择Web(HTTP、HTML)协议。

浏览器嵌入了Active插件时,可能需要自己开发测试脚本。

C/S架构取决于使用的数据库以及具体的网络通信协议。

基于TCP/IP的网络应用通常会选择Windows Sockets协议。

……

对于测试人员来讲,应该记住性能测试是为了模拟虚拟用户的操作。因此关注的重点在于待测系统使用了什么协议进行通信,而不是使用什么语言开发或运行在什么平台上,尽管开发语言或运行平台对 Vuser 开发工作会有一定的影响。如果实在不清楚,则应该与开发人员进行沟通,以明确系统采用的通信协议。

选对协议对于Vuser开发工作非常重要,尤其对于通过录制来开发Vuser脚本的工作。原因在于,不同的脚本协议生成的脚本内容可能会所有不同。通过逐步了解 Virtual User Generator(简称VuGen)的录制原理,可以进一步体会到选择协议的重要性。VuGen生成脚本的过程主要通过Proxy方式来实现,如图1-1所示。图1-1 VuGen的录制原理

以 Web(HTTP/HTML)为例,在开始录制时,VuGen 将会打开一个浏览器,这个浏览器将会以 VuGen 作为代理来访问目标服务器。这样在使用 VuGen 录制用户操作的过程中,VuGen就可以捕获往来于客户端和服务器之间的通信数据包。

录制结束后,Vugen会根据对捕获数据包的分析,将其还原成对应协议的API组成的脚本。同时VuGen会将这些函数生成的脚本插入到VuGen编辑器中,以创建原始的Vuser脚本。

因此,录制脚本时一定要选对协议,这样LoadRunner才能够正确地捕获对应协议的数据包来生成脚本。此外,底层协议往往能录制高层协议对应的脚本,读者可以自行尝试使用 Windows Sockets 协议来录制访问雅虎、搜狐等网站时所生成的虚拟用户脚本。这种脚本不太容易读懂,更不容易进行修改以增强功能。1.1.3 脚本的一般构成

多数Vuser脚本都由3个或4个部分组成,且创建时都有3个默认部分:vuser_init、Action和vuser_end。vuser_init部分用于完成Vuser的初始化操作,例如登录系统;Action部分是Vuser的主要部分,用于模拟用户登录后的业务操作;vuser_end部分用于完成退出与释放资源之类的工作。图1-2 脚本构成

图1-2所示的是Web(HTTP/HTML)协议脚本,共由4个部分构成。其中,globals.h中包含一些共有的外部文件,也可以在这里定义全局变量。

在脚本的这3个部分内容中,vuser_init与vuser_end部分只能迭代执行一次,且不可以进行重命名操作;而Action部分则可以反复迭代执行,而且既可以重命名,又可以插入新的Action。相关操作可以通过右键菜单来进行,如图1-3所示。图1-3 Action的右键菜单

脚本开发完成后,还可以在“Run-time Settings”中通过插入Block或者Action来自定义执行流程,一个Block可以包含多个Action部分。图1-4是根据图1-3对应的脚本定制的执行流程,可以看到SendMail在Block0中添加了3次。按照图1-4的设置,在一次迭代中SendMail部分将反复执行3次,然后执行ReceiveMail部分,而整个过程将会按照设置的迭代次数执行5次。图1-4 定制脚本流程

由此可以看出,定制流程使脚本的灵活度大大增加。读者可以自行研究一下具体用法,根据实际需要来决定是否需要设置执行流程。1.1.4 几个重要的概念

1.事务

为了更好地分析并发用户操作的响应时间,LoadRunner 引入了事务的概念。事务(Transaction)是一个或多个用户操作步骤的集合。一个事务在脚本中体现为一个有着开始与结束名称标识的代码块。习惯上,通常把需要进行性能分析的一个或几个操作的集合定义为一个事务。在测试脚本运行到事务的开始点时,LoadRunner就会开始计时,直至运行到该事务的结束点,事务计时结束。这个事务的运行时间在结果中会有所反映。

例如,可以将登录操作或数据查询操作定义为一个事务。登录事务可以使用以下格式简单地来表示。

lr_start_transaction("登录");

//登录的相关操作过程

lr_end_transaction("登录", LR_AUTO);

插入事务的操作既可以在录制过程中进行,也可以在录制结束后进行。LoadRunner可以在脚本中不限数量地插入事务,事务间可以互相嵌套或者互相包含,详见1.3.1节的用户事务函数。在脚本录制过程中或录制结束后,均可以通过菜单或者工具栏来添加事务。不过习惯上,通常会在录制过程中添加事务。下面介绍如何在录制脚本时添加事务。

以录制百度网站搜索操作为例:当录制到搜索操作需要添加事务时,在录制工具栏上单击按钮,打开事务开始标识对话框,在“Name”文本框中输入事务的名称“Search”,如图1-5所示。单击“OK”按钮,脚本中将自动添加“Search”事务开始标识的相关语句。图1-5 插入事务开始标识

接下来的操作是在网页中输入关键字进行搜索,例如输入“LoadRunner”。搜索结果显示完成后,接下来单击录制工具栏上的按钮,打开事务结束标识对话框,如图1-6所示。单击“OK”按钮,插入“Search”事务的结束标识。图1-6 插入事务结束标识

单击按钮结束录制,将会生成与例1-1相类似的脚本(假设相关操作均录制在Action部分),加粗字体部分为“Search”事务的开始与结束部分。

例1-1

Action()

{

web_add_cookie("BD_UTK_DVT=1; DOMAIN=www.baidu.cn");

web_url("www.baidu.cn",

"URL=http://www.baidu.cn/",

"Resource=0",

"RecContentType=text/html",

"Referer=",

"Snapshot=t1.inf",

"Mode=HTML",

LAST);

lr_start_transaction("Search");

web_add_cookie("BAIDUID=F05A393546E7EC9AC043C4DD636FCE4D:FG=1;DOMAIN=s.baidu.com");

lr_think_time(12);

web_submit_form("s",

"Snapshot=t2.inf",

ITEMDATA,

"Name=wd", "Value=LoadRunner", ENDITEM,

EXTRARES,

"Url=http://s.baidu.com/w.gif?path=http://www.baidu.cn/s?wd=LoadRunner&t=1225177346816",

"Referer=http://www.baidu.cn/s?wd=LoadRunner",ENDITEM, LAST);

lr_end_transaction("Search",LR_AUTO);

return 0;

}

2.集合点

集合点可以控制Controller中的Vuser在同一时刻并发来执行同一任务,从而对某一特定的用户业务或事务产生较重的负载。当某个Vuser到达集合点时,Controller会将其保留并暂停运行,直到保留的Vuser数量满足其释放条件为止。Controller将这些处于等待状态的 Vuser 同时释放后,它们将同时从客户端向服务器发出请求,从而产生非常密集的同一类用户操作或请求。尽管这些请求受网络传输等因素的影响,不一定能在同一时刻发送到服务器,但是当 Vuser 数量较大时,无疑会有一定数量的请求并发到达服务器,从而形成真正意义的并发测试。这种真正意义的并发测试,可以发现很多深层次的性能问题。

集合点一般会在用户事务的开始标志前创建,同时只能在脚本的Action部分插入集合点,vuser_init或vuser_end部分不可以插入集合点。

在脚本录制过程中或录制结束后均可以插入集合点。在脚本录制过程中,通过单击录制工具栏上的图标来插入集合点;录制结束后,可以先将光标切换到需要插入集合点的脚本位置,然后单击VuGen菜单上的“Insert→”来插入集合点。这两种方式都将打开如图1-7所示的集合点对话框。图1-7 集合点设置对话框

输入集合点名称后单击“OK”按钮,就完成了集合点的创建工作。

提示:一些测试人员经常对什么时候使用集合点产生疑问,不清楚是否每次测试都需要开启集合点。首先应该肯定的是,不管是否使用集合点,在Controller中运行的各个Vuser都可以理解为并发用户,除非Vuser处于执行lr_think_time函数的等待状态;其次应该明白,使用集合点产生的效果在实际用户环境中发生的概率可能很低,其作用是使一定数量的Vuser进行相对完全一样的操作,是一种特殊的并发。

因此,是否开启集合点取决于当前测试场景的设计目标:如果想产生较大压力以找出服务器的瓶颈或进行严格的并发以验证服务器的并发控制功能,通常会开启集合点;反之则没有必要开启集合点功能。例如,测试场景的目标是“想测试一定数量并发用户使用系统时的用户体验”,那么就没有必要控制用户进行集合操作。只要让每个Vuser在场景启动后独立运行即可,这种自然并发更能反映出用户对系统的真实使用情况。

集合点的属性设置在 Controller 中进行,这里不再赘述。读者可以参考《LoadRunner性能测试指南》中的相关内容。

3.思考时间

思考时间(Think Time)可以理解为用户得到服务器响应后进行处理的“客户端时间”。在这期间,客户端不会与服务器进行交互。在脚本中可以理解为两次与服务器进行交互操作之间的等待时间。真实用户不可能像机器一样与服务器进行不间断地交互,而是需要停下来处理一些业务,例如打开邮件进行阅读或者撰写邮件,这时用户没有对服务器发出任何请求,不存在任何压力。

LoadRunner能够模拟用户的思考时间,以便更真实地反映出用户使用系统的情况。思考时间在VuGen脚本中通过lr_think_time来实现,其语法结构如下:

void lr_think_time(double time);

lr_think_time函数只有一个参数time(单位:秒),它表示用户将要思考的具体时间。当Vuser脚本执行到lr_think_time时,将会等待time的时间后再执行后面的语句。在前面例1-1的脚本中可以找到语句“lr_think_time(12);”,表示等待12s后再执行后面的脚本。

通过“Run-Time Setting”中的“Think Time”选项可以设置思考时间,如图1-8所示。可以看出,在脚本的执行过程中既可以忽略掉“Think Time”的执行,也可以按照一定的策略来执行“Think Time” ——因为真实用户进行相同业务处理时的“Think Time”通常不会完全一致,因此VuGen提供了相应的配置项。图1-8 脚本的Think Time属性

如果为了产生更大的压力,我们通常会选择第一项,即忽略思考时间。忽略思考时间后,脚本在运行过程中将会跳过所有的 lr_think_time 语句。这样,并发用户的访问速度将会加快,进而产生更大的压力。如果选择回放思考时间,则有3种设置策略。(1)按脚本中记录的Think Time回放。(2)按脚本中记录的Think Time的倍数回放。(3)设定Think Time的最小值与最大值,每次回放时取对应范围内的随机值。

另外还可以设置Think Time的上限。如果前面设置策略后得出的Think Time低于上限时,则按策略中得到的Think Time回放,否则仅回放指定上限的Think Time。

提示:关于何时回放Think Time,其思路与前面是否设置集合点是一致的。读者可以思考一下,Vuser何时需要回放Think Time。1.1.5 脚本调试方法

VuGen本身提供的脚本调试功能远不如Visual C++等专业开发工具的调试功能强大,其常见的调试方法主要是通过设置断点以及分步执行程序来控制执行过程,并结合输出的日志来查看运行结果。如果是Web类虚拟用户,还可以通过VuGen的内置浏览器来预览执行结果。

提示:如果程序过于复杂,可以考虑先在Visual Studio、Eclipse等第三方集成开发环境中进行调试,调试通过后再将程序移植到VuGen中运行。

下面逐一介绍VuGen中的主要调试技巧。

1.断点与分步调试

断点主要针对脚本中某些特定语句来设置。当执行到设置了断点的语句后,脚本会暂停执行。脚本暂停执行后,可以分析已经运行完成的语句对当前功能的影响。

断点的设置方法很简单:将光标切换到需要暂停执行的代码行上,按F9快捷键即可;如果再次按F9快捷键将会取消当前的断点;还可以通过工具栏中的菜单或者鼠标右键来设置断点,读者可以自行研究一下后两种设置方法。

设置断点后,单击工具栏中的图标或按F5快捷键来运行脚本。当脚本运行到断点位置后将会暂停执行,这时可以去检查脚本的执行情况;需要继续执行脚本时,再次单击工具栏中的图标或按F5快捷键即可;脚本遇到新的断点后将会再次暂停执行。

分步调试脚本可以通过按F10快捷键来进行。首次按F10快捷键后,将会启动脚本,然后高亮显示第一个待执行语句;以后每次按F10快捷键都将执行一条语句,直到脚本执行完毕为止;通过分步调试的方式可以查看每条语句的执行情况。

在实际调试过程中,断点与分步调试这两种方法通常结合起来使用:当运行到断点位置时,再按F10快捷键切换到分步调试模式。在分步调试过程中也可以单击工具栏中的图标或按F5快捷键使脚本连续执行,直到遇到新的断点为止。

图1-9为一个执行到断点位置的脚本的运行画面。可以看到,脚本停在第2个断点所在的位置等待继续执行。图1-9 在脚本设置了断点后的运行情况

2.跟踪运行日志与输出脚本调试信息

对于多数脚本而言,VuGen会显示4个Output Window(输出信息窗口):Replay Log (回放日志)窗口、Recording Log(录制日志)窗口、Correlations Results(关联结果)窗口与Generation Log(脚本生成过程日志)窗口,如图1-10所示。默认情况下,Output Window是打开的。如果没有打开,可以通过菜单“View → Output Window”来开启全部输出信息窗口。调试脚本时,主要查看回放日

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载