LoadRunner - 当DiscuzNT遇上了Loadrunner(上) (转发)

当DiscuzNT遇上了Loadrunner(上)

DiscuzNT3正式版发布已经有一段时间了,最近半年多来很少再写关于这个产品的技术文章了,一是时间,二是精力有限。不过在正式版发表之后,倒是有 了些功夫,同时我们的一个商业客户在从2.6版本升级到3.0正式版之后,出了一个小插曲,导致不得不退回到2.6版本。因为这个客户的论坛访问量和发帖 量比较大,平时在线人数5000,日发帖量在2-3万左右。所以出了一些性能上的问题,在大并发情况下,服务器响应超时,且在峰值时越发不稳定。之前我在 公司内部用了tinyget做了一些简单的压力测试,发现了一些问题,但原因尚不明显,所以在公司会议上就有人提出使用loadruner来做一下压力测 试,看看3.0产品的性能倒底如何,是什么造成用户的服务器不稳定。所以就有了今天的这篇文章。

当然,我写这篇文章的目的主要是做一份备忘录。原因很简单,就是三年多以前曾用过一段时间的LR,本以为这次测试会轻车熟路,可不曾想,连最简单的并发用户数都忘在哪里设置了,所以鉴于此,才有感做记录的‘必要性’。所以本文的内容兼笔记和实战于一身,呵呵。好了,费话少说,let’s go!

首先,我要在本地搭建一个测试环境,而这个测试环境是一个小型的内部网络,包括一台1u的服务器,一台TPLINK交换机和一台安装了lr的机器。而为什 么要这样做,原因很简单,如果使用公司局域网,首先就要受到网络内部流量的影响以及限流软件的限制,如果再有一两个同事开个什么‘雷’呀,‘驴’呀, ‘米’呀的下载器,那就更热闹了,很难最终把压力和网络流量模拟上来,所以我就直接通过网管找来了这三台设备,给成了一个100m的内部网络,这样能够从 根本上确保1000 的并发用户数(v_user)。

这里要声明的是,本身用的是loadruner8.0,且是破解版。呵呵,你没看错,因为我很穷,没这份财力去购买正版的lisence,所以这里就只能 ‘那个’了。同时,为了确保安装的lr正常运行,我直接将其安装在了window2003+ie6的平台上,这是lr比较标准的系统运行环境。在完成安装 和lisence注册后,下面就来看一下其使用流程。

第一步:录制脚本

下面就是一个录制脚本的过程:

因为测试的是WEB应用,所以在创建项目窗口中选择http协议。

然后紧接着在下面窗口中填入要测试程序的http链接地址,然后点击确定。这时lr就会启动ie6并按之前我们设置的网址访问该应用。

这里我们可以看到下面的events在不断的累加,这些events我们可以看成是一个个http请求处理操作(比如下载js,css,图片等)。

接着我们点击该录制工具的“new action”图标来新建一个action,这样做的目的就是将我们测试流程中的每一个环节分别定义,以便在后续分析压力测试结果时能够一目了然,呵呵。

我们在新的action中,定义为“showforum”(即显示版块信息),然后我们就去点击一个论坛版块链接,如下:

注:我习惯于将action的名称定义为链接页面名称,这样比较直观。

这里我们看到events累加数又在变化。这时我们再创建一个action,以记录发主题的操作,这里因为我们的产品在3.0中支持了弹窗功能,所以我们 就将该action记录为"pop_posttopic”, 然后我们点击一个当前showforum页面的“新帖”按钮,这样发帖页面就被弹出来了,如下图:

这里大家看到了吧,即使是ajax弹窗,lr也会‘忠实’的加以记录。

这里我们简单的输入一些信息,然后在创建一个新的action叫‘posttopic’,也就是提交主题,接着我们点击发布按钮,这样就将提交主题流程也记录下来了。

大家会发现当发布成功后,页面会跳转到showtopic。换句话说‘posttopic’这个action中包含提交跳转两个操作,不过没关系,等测试报告出来时,我们可以看到这一个action中的两个操作分别的执行时间,页面体积等信息。

按一般人浏览论坛的习惯,就是其会在不同的版块和话题之间‘翻来覆去’的‘折腾’,所以我们就再创建一action,叫‘showforum_2’,以代表其跳转版块的行为,然后点击导航链接上的按钮,如下图:

当页面跳到showforum页面下时,我们再创建一个action,叫showtopic_2, 以代表用户又打开了一个新主题。然后我们就随便点一个主题帖。这样就基本上完成了一个主要的操作流程。最后我们在录制工具的下拉框中找到 “vuser_end”这个action,以此作为最后一个action的操作,平时我把‘注销(退出登陆)’操作做为这个action的内容,而今天我 以‘跳转回首页’作为了“vuser_end”这个action的内容了。

这样,录制工具就完成了,我们点击录制工具条上的那个方块图标,来结束录制,如下图:

下面我们来看一下lr给我们生成的相关脚本。如下图:

直接从脚本上来看,基本上就是每个action所访问页面内容中的链接,脚本及相关文件的链接信息。lr就是借助这些信息来依次执行相关操作的。

下面我们可以接着设置一下我们刚才录制脚本时所做的‘一系列操作’的‘重复次数’,我们可以通过点击lr上的工具栏图标来进行设置,如下图:

在弹出窗口中,我们可以设置重复次数,图中的设置是重复这些操作5次

当然我们还可以设置每个action执行完之后的间隔时间,这一点我们可以理解成为:当我们看一个帖子时,不会一打开页面就跳转或关闭,肯定会看完相应内 容之后才执行‘后续操作’。不过为了最大限度的给服务器和数据库‘制造压力’,这里用的是默认设置,即一个action操作完后马上执行下一个 action,如下图:

我们可以用lr上的操作图标,来看一下我们脚本的执行情况(注:按F10为单步执行)

注:检查脚本的执行情况主要是为了后续工作考虑,因为有些脚本录制的内容可能不正确或不是我们想要的,我们可以酌情修改

好了,今天的内容就先到这里了,在后续的文章中,将会介绍如果设置并发用户,以及生成保存测试结果,以及如果分析测试报告,因为一切工作都是为了生成一份尽可能准确客观的‘报告’,从而能快速帮助我们找出‘系统瓶颈’,从而重点加以优化。

原文链接:http://www.cnblogs.com/daizhj/archive/2009/09/25/1573926.html

作者: daizhj, 代震军

Tags: loadrunner,压力测试,discuznt

网址: http://daizhj.cnblogs.com/

分类: Discuz!NT, 压力测试(Loadrunner)

标签: discuzNT, loadrunner, 压力测试

时间: 2024-10-12 04:10:14

LoadRunner - 当DiscuzNT遇上了Loadrunner(上) (转发)的相关文章

LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)

当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍如何通过测试报告来查看系统的运行情况,找出影响性能的因素,以及如何去进行优化. 首先,看一下这张并发用户的图: 这是在优化之前我生成的测试报告的截图,通过这张图可以看到这个测试过程长达24分钟(这在之前的无数次测试中算是具有代表性的了), 而并发用户峰值是从4--15分钟,持续时间近11分钟.就目前

LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)

当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上的“工具”菜单项,选择该菜单的第二项“Create Controller Scenario(创建控制场景)”,如下图: 这时,lr会弹出一个窗口,我们只要在select scenario type项中的number of vusers设置成1000,这样我们就可以用1000并发用户来测试我们上文中所

艾恩ASP无组件上传类(上传组件)说明文档(from www.sysoft.cc)

艾恩ASP无组件上传类(上传组件)说明文档2010-1-18 By Anlige一.简介自从接触ASP就开始接触上传,看过一些上传类,但是总感觉封装的还是不够简单,因此自己尝试写一个能够用最少最简单的代码实现各种上传方式的上传类.在学校期间就开始写,一点点的完善.优化,到现在的版本,现在的版本能适应各种上传方式.上传类的主要的功能如下:1.自由设置最大上传大小.单文件最大上传大小2.自由设置允许上传的文件类型3.可设置文本的编码,以适应各种上传环境4.内置进度条,a用户可选择开启和关闭5.多种错

上千万或上亿数据(有重复),统计其中出现次数最多的N个数据. C++实现

上千万或上亿的数据,现在的机器的内存应该能存下.所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数.然后就是取出前N个出现次数最多的数据了,可以用第2题提到的堆机制完成. #include "IOSTREAM" #include<hash_map> #include<string> #include<map> using namespace std; int main(void) { //海量待统计数据 char* a[5]={&quo

spring mvc 批量上传+文件上传

spring mvc 批量上传+文件上传 简单3步走.搞定! 上传文件成功后: 1 上传文件核心方法 public static String saveWebImgFile(MultipartFile imgFile){ String webFilePath = ""; if(imgFile.getSize() > 0 && isImage(imgFile.getContentType())){ FileOutputStream fos = null; try {

关于软件知识存在认识上和方法上的误区

我们原先掌握的关于软件知识不是太贫乏就是不恰当,存在认识上和方法上的误区. 软件的生命性 软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构的原由,反复强调都不过分. 一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能. 目前很多人对软件的思想还是焦点落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功

Android网络开源库-Retrofit(三) 批量上传及上传进度监听

由于gif图太大的原因,我将图放在了github,如果博客中显示不出来图,传送门 由于我是事先写在md上的,导致代码的可读性差,大家将就着看吧. 1. 前言 在上一篇博客中,我们介绍了Retrofit的文件上传,文件下载以及进度监听,这篇博客我们来了解下批量上传以及上传进度的监听. 2.批量上传 要想实现批量上传,我们要考虑下HTML中实现批量上传的方法,借助Form表单,所以,我们也可以通过借助Form表单来实现批量上传. 2.1 HTML FORM 表单的写法 <html> <bod

上千万或上亿数据(有反复),统计当中出现次数最多的N个数据. C++实现

上千万或上亿的数据,如今的机器的内存应该能存下.所以考虑採用hash_map/搜索二叉树/红黑树等来进行统计次数. 然后就是取出前N个出现次数最多的数据了,能够用第2题提到的堆机制完毕. #include "IOSTREAM" #include<hash_map> #include<string> #include<map> using namespace std; int main(void) { //海量待统计数据 char* a[5]={&qu

【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,并且在AVD中浏览sdcard的文件

首先,实现这一切的大前提是,你的AVD安卓模拟器,在启动之前,有设置好sdcard的大小,如下图.同时,你的AVD安卓模拟器,要处于启动状态.否则无法执行如下的操作. 这里以<[Android]利用adt-bundle在Windows下轻松搭建Android开发环境与Hello world>(点击打开链接)在Windows中安装出来的安卓开发环境为例. 一.把外部文件拷贝的AVD安卓模拟器上的sdcard上 1.在AVD成功开机之后,你先要通过Window->Open Persperct