最近对一个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应用性能测试的更多相关文章

  1. 2、Oracle Logminer性能测试

    Oracle Logminer性能测试 1 测试介绍 1.1 测试目的 通过模拟不同环境下LogMiner解析联机/归档日志文件运行情况,通过测试所获取的数据分析,通过对以下两点的验证来确定通过Log ...

  2. 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具

    基于OCILIB的oracle数据库操作总结 1.       类图 2.       基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...

  3. window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台

    一.influxdb 安装与配置 1.1 influxdb下载并安装 官网无需翻墙,但是下载跳出的界面需要翻墙,我这里提供下载链接:https://dl.influxdata.com/influxdb ...

  4. Oracle IO性能测试

    Oracle IO性能测试 前言 最近发生了迁移测试库后(单节点迁移RAC)因为IO性能问题导致迁移后性能非常差的问题. 原本想在创建ASM磁盘组之前用Orion做测试,但是忘了做就没做结果出了这档子 ...

  5. LR之Oracle 2tier协议录制Oracle脚本

    在一次测试中,需用到sql去查询Oracle数据,并去使用改数据时,查阅各种资料终于实现LoadRunner对Oracle数据库进行操作,分享给大家,也与大家共同进步~   同时也可用Loadrunn ...

  6. 基于LR的数据库性能测试

    web services协议 在LR的web services协议中提供了如下函数进行数据库的连接和执行sql语句,以实现对数据库的性能测试,也可以实现向数据库中自动生成批量数据. lr_db_dis ...

  7. 基于LR的HTTP协议接口性能测试脚本实例

    背景介绍 XXX项目性能测试中新增业务场景:XX设备的在线激活,因为存在多用户同时在线激活,故需进行性能测试以确认后台服务器系统在多用并发时功能是否正常,性能指标是否满足规格要求.用户使用场景为用户通 ...

  8. 两个不同于LR和jmeter的性能测试工具

    LR图形界面,更利于使用 jmeter采用java,也能够扩展 相对于上两款工具,下面两款性能测试工具都采用了异步IO模型,扩展性都更强速度也更快 gatling:基于scala,速度相比更快性能压力 ...

  9. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

随机推荐

  1. SQL 查询CET使用领悟

    用到sql的遍历循环查询,如果不考虑用CET,估计又到了自己造轮子的时代了,现在觉得sql的CET确实是个好东西,针对SQL的递归查询,很是不错的方法: with etcRecommandINfo2( ...

  2. Mac OS X 上的安装Lisp开发环境

    到网站:https://common-lisp.net/project/lispbox/ 下载lispbox 解压下载下来的包,找到Emacs 测试: 我们也可以使用homebrew来安装lisp的解 ...

  3. Java Hour6

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为5 Hour,请各位不吝赐教. Hour6 Jav ...

  4. loj 1108(spfa判负环)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26823 思路:题目的意思是求出所有的能够到达负环的点.负环很好求, ...

  5. Oracle表空间管理

    oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;              //修改表空间数据文件类型 2.ALT ...

  6. MONO 使用重要提示

    重要提示:如果要使用mvc这样的框架(网址没有扩展名或扩展名没有正常规律),请一定用Jexus,而不要用apache/nginx等. ASP.NET跨平台初学者要注意: 1.不要开始就用freeBSD ...

  7. 【BZOJ】1821: [JSOI2010]Group 部落划分 Group(最小生成树+贪心)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1821 这题裸题. 本题要求最短距离最长,很明显,我们排序. 这里存在贪心,即我们把边权最小的 ...

  8. 去掉Xcode源码末尾的空格

    去掉Xcode源码末尾的空格 在用 Xcode 开发的时候,很容易就在行末增加一些空格了.这些空格在上传到 review board 上后 , 就会被特别的颜色显示出来.因为一种好的编程风格是说 , ...

  9. lintcode :Coins in Line II 硬币排成线 II

    题目 硬币排成线 II 有 n 个不同价值的硬币排成一条线.两个参赛者轮流从左边依次拿走 1 或 2 个硬币,直到没有硬币为止.计算两个人分别拿到的硬币总价值,价值高的人获胜. 请判定 第一个玩家 是 ...

  10. Stack and Heap 堆和栈的区别

    在和计算机内存打交道时,我们一定会碰到堆和栈,这两个东西很容易搞混,那么现在就来梳理一下二者的关系. 栈是用来静态分配内存的而堆是动态分配内存的,它们都是存在于计算机内存之中. 栈的分配是在程序编译的 ...