基于LR的Oracle应用性能测试
最近对一个oracle ERP系统的INV模块进行性能测试,因为之前大部分都是测试web类型的应用,在这方面经验较少,期间也遇到了不少问题,因此有必要作些总结,以备后忘。首先先简单了解下测试对象相关的概念,oracle EBS、oracle ERP、oracle NCA等。
oracle应用系统相关概念
Oracle EBS
甲骨文公司的应用产品,全称是Oracle 电子商务套件EBS(E-Business Suit),是在原来Application(ERP)基础上的扩展,包括ERP(企业资源计划管理)、HR(人力资源管理)、CRM(客户关系管理)等等多种管理软件的集合,是无缝集成的一个管理套件。目前Oracle EBS已经发布R12(Release 12),是完全基于web的企业级软件(兼顾B/S和C/S的优点)。作为企业管理软件, EBS的管理范围涵盖企业管理的方方面面:资产生命周期管理、客户关系管理(CRM)、企业资源计划(ERP)、供应链管理(SCM)等等。
Oracle ERP
也就是oracle公司开发的企业资源计划管理软件,除了oracle公司做ERP外,业界还有ERP鼻祖德国的SAP公司以及国内的金蝶、用友等。oracle ERP系统分为企业管理和财务两大子系统,共有几十个模块。包括总帐管理(GL)、总帐管理(GL)、库存管理(INV)、销售&市场管理(SM)等等。另外关于oracle的产品名称,Oracle开发的database,就叫Oracle 10g Enterprise Databse,我们简称为 Oracle。它开发的application server,就叫Oracle Application Server,实际上也应该简称Oracle,为了区别,我们一般简称AS或Oracle AS。同样的道理,Oracle开发的ERP就叫Oracle ERP,简称还是Oracle。
Oracle NCA
Oracle NCA是一种基于Java的数据库协议。使用浏览器,可以启动数据库客户端(一个小程序查看器)。可以通过NCA数据库的小程序查看器对其执行操作,从而无需使用客户端软件,并可以从所有支持小程序查看器的平台执行数据库操作。有一个专门为模拟Oracle NCA客户端而设计的Vuser类型。NCA环境是一个三层环境。用户首先将一个HTTP调用从其浏览器发送到Web服务器。此调用将访问调用Oracle应用程序小程序的启动HTML页。该小程序在客户机上本地运行,所有后续调用都通过专用的NCA协议在客户端和Forms服务器之间传递。客户端(小程序查看器)与应用程序服务器(Oracle Forms服务器)进行通信,然后该服务器将信息提交到数据库服务器(Oracle 8.x)。VuGen录制并重播客户端和Forms服务器(应用程序服务器)之间的NCA通信。在录制Oracle NCA会话时,建议为Oracle NCA和Web协议创建一个多协议脚本。
Oracle 3层架构数据库包括Java客户端、Web服务器和数据库:
基于LR的Oracle应用系统性能测试
对于oracle ERP应用的性能测试,LR中提供了oracle NCA和oracle web application 11i协议,另外LR中还提供了Oracle(2-Tier)协议,Oracle(2-Tier)主要是对oracle数据库进行测试的,适于C/S结构和两层架构,例如使用sqlplus连接Oracle进行查询,就可以使用该协议进行录制。本文主要介绍oracle NCA和oracle web application 11i协议相关。
协议选择
可以说Oracle Web Applications 11i是比Oracle NCA更高一层的协议,下图展示了几种web协议所处的层次,当我们录制脚本时一般优先选择较高层次的协议,如果不成功在选择其下面的协议。例如如果使用的第一个协议是Oracle Web Applications 11i,但它未能成功回放,那么接下来应尝试Oracle NCA 协议。本次测试ERP系统INV模块使用的就是Oracle Web Applications 11i协议,不过LR中录制的到的都是同一套nca函数,区别在于使用Oracle Web Applications 11i协议时除了录制到nca类型的请求函数外还可以录制到http的web请求,而如果单使用Oracle NCA 协议录制只能录制到nca的函数,web请求不会被录制到,所以一般oracle NCA都会与http协议一起使用。
脚本录制
LR之前可以录制ERP R11及之前的版本。但自从ERP升级到R12后,LR无法录制其Form实现的功能,最新的Loadrunner11.0版本可以支持Oracle ERP R12的录制,但是使用中发现Oracle Application很难调起,我们在本次测试中起初也遇到了这个问题,不过后来是因为机器或本身系统的原因,从虚拟机换成配置较高点的物理机就成功调起来了。
对于录制有一些注意事项:
1)环境建议Win7 + LR11.00 + IE8,安装JDK1.5及以上,脚本录制过程请使用有线网络,无线网络不推荐。
2)在Java控制面板修改设置控制面板-》Java-》高级-》Java插件-》启用下一代Java插件取消。
3)如果对系统框架的脚本录制有经验,并做成了关联文件,可以导入关联文件并启用关联
在VuGen的录制选项中,注意选择“在录制期间启用关联”,钩选Oracle和OracleApps,其他项可不选择。在脚本生成后,VuGen将会自动完成nca_connect_server调用中参数icx_ticket的关联(当从普通web页面点击进入到form页面时一般都会存在icx_ticket的关联),请使用icx_ticket关键字进行搜索,以确保脚本中其他使用到icx_ticket的地方也正确关联了(VuGen可能会遗漏部分icx_ticket的关联)。
脚本调试
oracle NCA函数对象ID问题
LR中使用Oracle Web Applications 11i或oracle NCA协议,脚本中录制生成的大量oracle nca系列函数,如:nca_set_window("Discrete Jobs (H80)")、nca_obj_mouse_click("W_JOBS_M_WIP_ENTITY_NAME_0", 68, 18, 0)、nca_edit_set ("W_JOBS_M_WIP_ENTITY_NAME_0", "ABSDF12345")等完成诸如点击窗口、双击某个选项、编辑某个编辑框等之类的对象操作。另外也能录制到form界面上的键盘快捷键操作。相关函数如下:
在不作处理的情况下,一般录制到的函数如nca_set_window("125")、 nca_obj_mouse_click("34", 68, 18, 0)等,可以看到这些函数的第一个参数为一个数字串,也就是对象ID,LR中就是利用这个对象ID来识别某个对象并完成相应的动作,但是对象ID是有服务器动态生成的,在多次迭代回放时可能会改变而出错,例如我们使用该协议会经常遇到的Window or object is not displayed(窗口或对象未找到)的错误可能就是因为这个原因造成的。
解决对象ID动态变化的问题是不使用对象ID而是用对象的逻辑名称,比如nca_set_window("Discrete Jobs (H80)")中的Discrete Jobs (H80)。具体在《Loadrunner11 Vugen 用户指南.pdf》的oracle NCA协议一节:如何启用按名称录制对象进行了较详细的方法介绍,比较简单的方法是直接在录制的URL后面增加?record=names,但不一定行的通,另外两种方法都需要有权限修改服务器端的配置文件:启动HTML文件或Forms 配置文件。
对于脚本回放时的Window or object is not displayed错误,除了上面提到的对象ID动态变化的情况外,比如使用的是对象逻辑名称还是报这个错误,可能是报错之前的脚本存在问题,如报错之前的web类型的请求代码未关联,导致没有正确进入到某个页面,从而造成后面的对象未找到。还有一个原因就是当前激活的并非对象所在的窗体,比如点击一个按钮nca_button_press("W_JOBS_QF_NEW_0"),按钮W_JOBS_QF_NEW_0在Calendar窗口上,而当前激活的是Discrete Jobs窗口nca_set_window("Discrete Jobs")从而导致对象未找到。因此对于oracle nca协议脚本中的函数前后顺序是很重要的,以及init、action和end块的划分也是需要考虑清楚的,而不像http协议的脚本那样,并行的请求之间前后顺序并不是很重要。
调试通过的脚本,在场景中进行多用并发压测时仍然可能遇到Window or object is not displayed错误,本次性能中很长时间一直都遇到幽灵一般的该错误,最后分析为参数化的数据问题,即由项目组提供的几千或上万条数据中存在一些无效的数据,导致脚本运行到使用这些无效数据时,没有打开正确的form界面,导致之后的nca函数操作都找不到对象而报出该错误。
oracle NCA协议的检查点函数
LR录制NCA协议和HTTP协议所用的函数还是有所不同的,在检查点函数方面,nca_obj_status和web_reg_find有类似功能。首先对象识别,返回对象的状态后进行判断;nca_console_get_text函数可以获取控制器返回的信息,然后可以用获取的信息与预期的信息比较以进行检查;nca_get_top_window函数可以获取当前最顶层的窗口的名称,如果某个操作成功后会弹出 后续的窗口,而失败时不会,则可以使用该函数进行检查。当然nca系列函数中还有一些函数可以用作检查点函数,这里的几个函数例子如下:
使用nca_console_get_text函数添加检查点:
Action()
{
char console_text[1024];
...
nca_edit_press("W_JOBS_M_SCHEDULED_START_DATE_0"); lr_think_time(); nca_set_window("Calendar"); nca_button_press("CALENDAR_OK_0"); /*point save*/ lr_start_transaction("Define_Discrete_Job"); nca_set_window("Discrete Jobs (H80)"); nca_menu_select_item("Discrete Jobs", "File;Save"); nca_console_get_text(console_text); //lr_output_message("The console message was: %s", console_text); if(NULL != strstr(console_text,expected_console_text))
{
lr_end_transaction("Define_Discrete_Job", LR_PASS);
}
else
{
lr_end_transaction("Define_Discrete_Job", LR_FAIL); } //lr_end_transaction("Define_Discrete_Job", LR_AUTO); /*end*/ lr_think_time(); nca_win_close("Discrete Jobs (H80)"); return ;
}
使用nca_get_top_window函数添加检查点:
Action()
{
char topwin[1024]; ...
nca_set_window("Find Invoices"); /*point find*/ lr_think_time(); nca_edit_set("INVOICES_QF_INVOICE_NUM_0", "{Number}"); lr_think_time(); lr_start_transaction("Invoice_Match"); nca_button_press("INVOICES_QF_FIND_0"); nca_get_top_window(topwin); lr_output_message("Notify:topwin is %s",topwin); if( == strcmp(topwin,"Invoice Workbench"))
{
lr_end_transaction("Invoice_Match", LR_PASS);
}
else
{
lr_end_transaction("Invoice_Match", LR_FAIL);
}
return ;
}
LR中NCA协议的监控指标
在对NCA协议脚本压力测试过程中,一个业务查询的场景进行单场景500并发的压力测试,监控的HPS和Throughput除了在初始阶段有监控数据外,在迭代运行和结束阶段都没有的监控数据,即监控的数据为0,但是,整个过程中对应用服务器都产生了压力,为什么HPS和Throughput为0时对应用服务器仍然有压力?
分析原因,脚本中init块中存在http的web函数和nca类型的函数,而在action和end块中只有nca类型的函数,因此可知,LR中HPS和Throughput只会针对http类型的请求进行统计,而对于oracle NCA类型请求并没有统计数据,解决措施是在需要考察的nca业务操作前后添加事务函数,然后压测时观察TPS来进行分析。
基于LR的Oracle应用性能测试的更多相关文章
- 2、Oracle Logminer性能测试
Oracle Logminer性能测试 1 测试介绍 1.1 测试目的 通过模拟不同环境下LogMiner解析联机/归档日志文件运行情况,通过测试所获取的数据分析,通过对以下两点的验证来确定通过Log ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台
一.influxdb 安装与配置 1.1 influxdb下载并安装 官网无需翻墙,但是下载跳出的界面需要翻墙,我这里提供下载链接:https://dl.influxdata.com/influxdb ...
- Oracle IO性能测试
Oracle IO性能测试 前言 最近发生了迁移测试库后(单节点迁移RAC)因为IO性能问题导致迁移后性能非常差的问题. 原本想在创建ASM磁盘组之前用Orion做测试,但是忘了做就没做结果出了这档子 ...
- LR之Oracle 2tier协议录制Oracle脚本
在一次测试中,需用到sql去查询Oracle数据,并去使用改数据时,查阅各种资料终于实现LoadRunner对Oracle数据库进行操作,分享给大家,也与大家共同进步~ 同时也可用Loadrunn ...
- 基于LR的数据库性能测试
web services协议 在LR的web services协议中提供了如下函数进行数据库的连接和执行sql语句,以实现对数据库的性能测试,也可以实现向数据库中自动生成批量数据. lr_db_dis ...
- 基于LR的HTTP协议接口性能测试脚本实例
背景介绍 XXX项目性能测试中新增业务场景:XX设备的在线激活,因为存在多用户同时在线激活,故需进行性能测试以确认后台服务器系统在多用并发时功能是否正常,性能指标是否满足规格要求.用户使用场景为用户通 ...
- 两个不同于LR和jmeter的性能测试工具
LR图形界面,更利于使用 jmeter采用java,也能够扩展 相对于上两款工具,下面两款性能测试工具都采用了异步IO模型,扩展性都更强速度也更快 gatling:基于scala,速度相比更快性能压力 ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
随机推荐
- Visual Studio 2012 使用免费的Team Foundation Service(转载)
转载地址:http://www.cnblogs.com/chsword/archive/2012/12/14/visualstudio2012_tfs.html VS2012提供了在线的TFS服务,免 ...
- 在Android4.4上新增加keycode
keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode.分成两部分,驱动和framework,这里主要讲解framework部分: 一.驱动部分: ...
- sdut 2411:Pixel density(第三届山东省省赛原题,字符串处理)
Pixel density Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Pixels per inch (PPI) or pi ...
- hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
一只小蜜蜂... Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
- 【现代程序设计】homework-04
题目要求: 第四次作业,构造一个方阵将指定单词填入 stage 1:每个单词只出现1次,且八个方向各至少有两个单词 stage 2:矩阵长宽相等 stage 3:方阵的四个角都要参与单词的构建 算法思 ...
- Android中Dialog
在Android中,Dialog是一个非常重要的UI, 它可以方便的给用户提示,用最简洁的方式向用户展示信息, 以下的图片是Dialog的一个整体架构,通过它,可以总体对Dialog有一个很清晰的认识 ...
- 微信绑定后台是验证token失败
/AX/dapeng/VfanCms/Lib/ORG/ 在ORG文件夹中,找到Wechat.class.php文件,去掉解释,验证完后改回来!应该是为了防止后台被别人绑定了去.
- Marvelous Mazes
F - Marvelous Mazes Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submi ...
- Android 编程下如何修改 jar 文件的包名
首先我们要说说为什么要修改 jar 文件的包名,jar 包我们会非常高频率的使用,尤其是用一些其他三方库的时候,往往把 java 代码打包成 jar 文件,方便项目依赖使用.笔者在开发过程中遇到过一些 ...
- PHP API 框架开发的学习
基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用.对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户.开发者和中小网站带来了更大的 ...