RPT8.0

注:

1、本文最早于2009年4月发表于ITPub《RPT 8.0初印象 免编码显易用》

2、RPT目前最新版本是 RPT 8.1

 

 

 

IBM去年就已经发布了Rational Performance Tester 8.0版本,一直没时间去下载来试试,今天终于鼓起勇气去下载了这个2G多的安装包,并装到机器上,顺便看看它有了哪些方面的改进,能否挑动LoadRunner的王者位置。

系统要求

首先看一下Rational Performance Tester 8.0对系统的要求:

操作系统

软件

硬件

Linux, Windows 2000, Windows 2003, Windows XP Professional

RedHat Desktop Version 4.0 Update 1-5 (running in 32-bit mode)

RedHat Enterprise Version 4.0 Update 1-2 (running in 32-bit mode)

SuSE Linux Enterprise Server Version 9.0 SP1 - SP4

SuSE Linux Enterprise Desktop / Enterprise Server Version 10.0

Microsoft Windows 2000 Professional with Service Pack 3 or 4

Microsoft Windows Server 2003 Enterprise/Standard Edition with Service Pack 1

Microsoft Windows XP with Service Pack 1 or 2

Microsoft Windows Vista

处理器最低要求: Intel® Pentium® 4 1.5GHz

Rational Performance Tester对内存的最低要求: 768 MB

如果仅是Agent Controller则需要500 MB

LoadRunner 9.5相比,Rational Performance Tester 8.0在内存方面要求略为高一点。LoadRunner 9.5最小内存要求为512MB

而在支持的操作系统方面,则要比LoadRunner多一些,主要是在Linux方面。LoadRunner支持将Load Generator组件部署到Unix平台用于运行虚拟用户。而Rational Performance Tester则可以在WindowsLinux平台录制和编辑测试,测试执行也支持在Windows平台和Linux平台下进行。

易用性

安装完成后,打开Rational Performance Tester,可以看到基于Eclipse的欢迎界面,其中提供了入门指南、教程等材料的链接,方便新手入门使用。

 

点击其中的第一步中的“性能测试入门”链接,可以打开如下所示的界面,右侧的分步指南类似LoadRunner中的Task(称为“任务栏”或“工作流”),用于指导新手一步步按照标准的流程录制测试、编辑测试、创建测试场景、设置需要监视的资源、运行测试,最后得到测试结果并进行分析。

 

这种手把手指导入门者的功能对于初次接触Rational Performance Tester的人来说很有必要。除此之外,为了提高易用性,Rational Performance Tester的教程也做得比较好,每个课程都是详尽的Flash演示,这种“边看边学”的教程查看方式就像看电影,不仅不会让人觉得枯燥,而且可以让初学者跟着视频一步步操作。

 

 

支持录制的协议

在支持的协议方面,要比LoadRunner少很多,Rational Performance Tester支持的协议包括:HTTP, SAP, Siebel, SIP, TCP Socket Citrix等。

Rational Performance Tester在录制脚本时可以选择4种类型的记录器:

1RPT HTTP记录。

2SAP记录。

3、套接字 API 记录。

4Citrix记录。

 

由于基于Eclipse,所以录制一个测试其实就是在创建一个项目添加到Eclipse中:

 

项目中可以创建几个文件夹来分别存储不同的内容,例如测试脚本、调度脚本的测试场景、测试结果等。

 

完成后就会启动代理控制器进行录制:

 

录制完后将打开脚本编辑器:

 

 

“免编码”

Rational Performance Tester中还有一个地方可以集中体现其易用性的,就是所谓的“Code Free”、“Scriptless Testing”,也就是说不需要编写测试脚本,不需要懂编程语言,也可以创建测试、编辑测试和执行测试。测试脚本被图形化地展现在树形列表中:

 

验证点、事务、循环等都可以在界面中可视化地插入。我想那些畏惧LoadRunner中的脚本编程的人会比较喜欢Rational Performance Tester的这种测试创建方式。

 

LoadRunner把虚拟用户的创建、测试场景设计、测试分析报告分成3个独立应用程序,而Rational Performance Tester则把这3部分的功能都放在同一个Eclipse的界面中。

在测试场景的编辑方面,与LoadRunner类似,可以方便地添加用户组、插入需要调度的脚本、设计用户负载、添加资源监视。也提供了与LoadRunner类似的用户负载预览功能:

 

在资源监视方面,Rational Performance Tester支持对Windows平台和Unix平台的资源监视,同时还可以与Tivoli结合收集各种性能数据。

 

 

小结

经过初步的试用,可以看到Rational Performance Tester 8.0在易用性方面比较突出,“免编码”的测试创建方式对那些不懂编程的测试者吸引力比较大,在辅助入门方面做了很多工作,包括手把手的“分步指南”、Flash教程等。

另外,感觉Rational Performance Tester中很多地方的界面汉化和翻译不够到位,例如“记录”我们一般叫“录制”,“根据记录来创建新测试”翻译成“通过录制方式创建新测试”可能会更好理解些。

 

# *****************************************头部注释模块************************************** #脚本名称:rpt_a_mfin_tax_model_distg_monitor_dtl.py #功能说明:税易贷模型区分度监控 #更新方式:每月全量 #更新对象:{RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl #创 建 人:gsp #创建日期:20240410 #运行周期:月 #备 注: #维护信息: # ******************************************************************************************* # -*- coding: utf-8 -*- import atexit from datetime import datetime import sys import os import subprocess import re # -- 1.验证输入参数是否正确-- # if len(sys.argv) == 2: ETL_TX_DT = sys.argv[1] else: print("usage :python xxx.py YYYYMMDD") exit(-1) ETL_HOME = os.path.abspath(os.environ['ETL_HOME']) if not ETL_HOME: print("Error:you must define a ETL_HOME before import etl module") exit(-1) # -- 2.日期及变量初始化-- # # -- 自定义模块-- # from config import db from log import Log import etl MAX_DATE = etl.MAX_DATE MIN_DATE = etl.MIN_DATE NULL_DATE = etl.NULL_DATE LEG_DATE = etl.LEG_DATE I_MB_DT = etl.I_MB_DT #月初日期 I_ME_DT = etl.I_ME_DT #月末日期 I_QB_DT = etl.I_QB_DT #季初日期 I_QE_DT = etl.I_QE_DT #季末日期 I_HB_DT = etl.I_HB_DT #半年初日期这个 I_HE_DT = etl.I_HE_DT #半年末日期 I_YB_DT = etl.I_YB_DT #年初日期 I_YE_DT = etl.I_YE_DT #年末日期 I_LAST_DT = etl.I_LAST_DT #上日日期 I_NEXT_DT = etl.I_NEXT_DT #下日日期 I_LMB_DT = etl.I_LMB_DT #上月初日期 I_LME_DT = etl.I_LME_DT #上月末日期 I_LQB_DT = etl.I_LQB_DT #上季初日期 I_LQE_DT = etl.I_LQE_DT #上季末日期 I_NMOM_DT = etl.I_NMOM_DT #下月同期日期 I_NYOY_DT = etl.I_NYOY_DT #明年同期日期 I_LYOY_DT = etl.I_LYOY_DT #去年同期日期 I_LMOM_DT = etl.I_LMOM_DT #上月同期日期 I_LQOQ_DT = etl.I_LQOQ_DT #上季同期日期 I_MATTY_DT = etl.I_MATTY_DT #滚动年开始累积日期 I_MATTH_DT = etl.I_MATTH_DT #滚动半年年开始累积日期 I_MQTTQ_DT = etl.I_MQTTQ_DT #滚动季开始累积日期 I_MMTTM_DT = etl.I_MMTTM_DT #滚动月开始累积日期 MMTTM_DAYS = etl.MMTTM_DAYS #滚动月天数 MQTTQ_DAYS = etl.MQTTQ_DAYS #滚动季天数 MATTY_DAYS = etl.MATTY_DAYS #滚动年天数 MATTH_DAYS = etl.MATTH_DAYS #滚动半年天数 dwa_host = etl.dwa_host dwa_port = etl.dwa_port dwa_db_rpt = etl.dwa_db_rpt dwa_db_fdm = etl.dwa_db_fdm dwa_db_cdm = etl.dwa_db_cdm dwa_username = etl.dwa_usr_rpt dwa_password = etl.dwa_pwd_rpt RPT = etl.dwa_db_rpt FDM = etl.dwa_db_fdm CDM = etl.dwa_db_cdm #-- 3.初始化日志-- # log = Log('dwa', ETL_TX_DT) log_filename = log.logname log.info("BEGIN . ") """ 函数名称:execute_gbase_sql 参数(2个): 管道句柄 运行sql 功能: 将sql语句发送到gbase去执行 """ def execute_gbase_sql(bformatsql): try: prefix_sql = "\n" suffix_sql = "\nquit\n" sql = prefix_sql + bformatsql + suffix_sql gsql_str_p = f"set -o pipefail; gccli -h {dwa_host} -P {dwa_port} -u {dwa_username} -p\"{dwa_password}\" -D {dwa_db_rpt} -v -v |tee -a {log_filename}" p = subprocess.Popen(gsql_str_p, shell=True, stdin=subprocess.PIPE, stdout=sys.stdout, stderr=sys.stdout,close_fds=True,universal_newlines=True, bufsize=1) output = p.communicate(sql) return p.returncode except: log.exception("Execute [%s] failed.%s" % (gsql_str_p,output.decode('utf-8'))) return -1 @atexit.register def __exit__(): """print a log when exit""" log.info("END\n") # -- 4.执行sql内容-- # # -- bsql1支持重跑sql及临时表创建-- # bsql1=""" /*Step1:创建目标表之前先清除目标表当天数据*/ DELETE FROM {RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl WHERE data_dt = DATE '{ETL_TX_DT}'; """ # -生成mapping映射- # bsqlmapping=""" """ # -bsql2算法逻辑主体实现- # bsql2=""" /*step1:创建临时表得到评分卡模型数据*/ CREATE TEMPORARY TABLE {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 (DATA_DT DATE not NULL COMMENT '数据日期' ,PROD_NAME VARCHAR(100) COMMENT '产品名称' ,CONTRACT_SEQ_NO VARCHAR(255) DEFAULT NULL COMMENT '合同流水号' ,MODEL_BRCH_NUM VARCHAR(60) DEFAULT NULL COMMENT '模型分数' ,approve_dt varchar(32) DEFAULT NULL COMMENT '申请时间' ,label VARCHAR(12) DEFAULT NULL COMMENT 'label' )DISTRIBUTED BY ('CONTRACT_SEQ_NO') comment='得到评分卡模型数据'; /*step2:往临时表插入数据*/ INSERT INTO {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 SELECT data_dt, PROD_NAME, CONTRACT_SEQ_NO, idx_val AS MODEL_BRCH_NUM, approve_dt, label FROM {RPT}.A_MFIN_TAX_MODEL_DTCT_TAB_DTL a WHERE MODEL_NAME LIKE '%评分卡模型%' AND idx_name LIKE '%得分' AND length(CONTRACT_SEQ_NO)>0 AND data_dt=DATE '{ETL_TX_DT}' ; /*step3:向模型区分度监测插入AUC季、月数据*/ INSERT INTO {RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl (DATA_DT -- '数据日期' ,PROD_NAME-- '产品名称' ,FLAG -- '标志' ,appl_date -- '申请季度' ,AUC ) SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'季'AS tag-- '标志' ,appl_quart-- '申请季度' ,SUM(( tpr + pre_tpr )/ 2 *( fpr - pre_fpr )) AS AUC FROM ( SELECT PROD_NAME, MODEL_BRCH_NUM, appl_quart, cum_bad / tot_bad AS tpr, cum_good / tot_good AS fpr, lead(cum_bad / tot_bad) OVER(ORDER BY cum_bad / tot_bad DESC) AS pre_tpr, lead(cum_good / tot_good) OVER(ORDER BY cum_good / tot_good DESC) AS pre_fpr FROM ( SELECT PROD_NAME ,MODEL_BRCH_NUM ,CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt))AS appl_quart ,COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt)) ORDER BY MODEL_BRCH_NUM ASC) AS cum_bad ,COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt)) ) AS tot_bad ,COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt)) ORDER BY MODEL_BRCH_NUM ASC) AS cum_good ,COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt)) ) AS tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_QE_DT}'-- 只需要季度末 ) b ) t GROUP BY PROD_NAME ,appl_quart UNION ALL SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'月'AS tag-- '标志' ,appl_month-- '申请季度' ,SUM(( tpr + pre_tpr )/ 2 *( fpr - pre_fpr )) AS AUC FROM ( SELECT PROD_NAME, MODEL_BRCH_NUM, appl_month, cum_bad / tot_bad AS tpr, cum_good / tot_good AS fpr, lead(cum_bad / tot_bad) OVER(ORDER BY cum_bad / tot_bad DESC) AS pre_tpr, lead(cum_good / tot_good) OVER(ORDER BY cum_good / tot_good DESC) AS pre_fpr FROM ( SELECT PROD_NAME ,MODEL_BRCH_NUM ,LEFT(approve_dt,7)AS appl_month ,COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ORDER BY MODEL_BRCH_NUM ASC) AS cum_bad ,COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ) AS tot_bad ,COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ORDER BY MODEL_BRCH_NUM ASC) AS cum_good ,COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ) AS tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_ME_DT}' -- 只需要月末数据 ) b ) t GROUP BY PROD_NAME ,appl_month; /*step4:向模型区分度监测插入KS季、月数据*/ INSERT INTO {RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl (DATA_DT -- '数据日期' ,PROD_NAME-- '产品名称' ,FLAG -- '标志' ,appl_date -- '申请季度' ,CONTRACT_NUM -- '合同数' ,KS ) SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'季'AS tag-- '标志' ,appl_quart-- '申请季度' ,COUNT(DISTINCT CONTRACT_SEQ_NO)AS 合同数-- '合同数' ,MAX(abs(quarter_cum_bad/quarter_tot_bad -quarter_cum_good/quarter_tot_good))AS KS from ( SELECT PROD_NAME ,CONTRACT_SEQ_NO ,MODEL_BRCH_NUM ,CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt))AS appl_quart ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt)) ORDER BY MODEL_BRCH_NUM asc) AS quarter_cum_bad ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt))) AS quarter_tot_bad ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt))ORDER BY MODEL_BRCH_NUM asc) AS quarter_cum_good ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY CONCAT(LEFT(approve_dt,4),'Q',quarter(approve_dt))) AS quarter_tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_QE_DT}'-- 只需要季度末 ) c GROUP BY PROD_NAME ,appl_quart UNION ALL SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'月'AS tag-- '标志' ,appl_month-- '申请月份' ,COUNT(DISTINCT CONTRACT_SEQ_NO)AS 合同数-- '合同数' ,MAX(abs(month_cum_bad/month_tot_bad -month_cum_good/month_tot_good))AS KS from ( SELECT PROD_NAME ,CONTRACT_SEQ_NO ,MODEL_BRCH_NUM ,LEFT(approve_dt,7)AS appl_month ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ORDER BY MODEL_BRCH_NUM asc) AS month_cum_bad ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7)) AS month_tot_bad ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7) ORDER BY MODEL_BRCH_NUM asc) AS month_cum_good ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(PARTITION BY LEFT(approve_dt,7)) AS month_tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_ME_DT}' -- 只需要月末数据 ) c GROUP BY PROD_NAME ,appl_month; /*step5:向模型区分度监测插入AUC上线以来数据*/ INSERT INTO {RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl (DATA_DT -- '数据日期' ,PROD_NAME-- '产品名称' ,FLAG -- '标志' ,AUC ) SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'上线以来'AS tag -- '标志' ,SUM(( tpr + pre_tpr )/ 2 *( fpr - pre_fpr )) AS AUC FROM ( SELECT PROD_NAME, MODEL_BRCH_NUM, cum_bad / tot_bad AS tpr, cum_good / tot_good AS fpr, lead(cum_bad / tot_bad) OVER(ORDER BY cum_bad / tot_bad DESC) AS pre_tpr, lead(cum_good / tot_good) OVER(ORDER BY cum_good / tot_good DESC) AS pre_fpr FROM ( SELECT PROD_NAME, MODEL_BRCH_NUM, COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(ORDER BY MODEL_BRCH_NUM ASC) AS cum_bad, COUNT( CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER() AS tot_bad, COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(ORDER BY MODEL_BRCH_NUM ASC) AS cum_good, COUNT( CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER() AS tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_ME_DT}' -- 只需要月末数据 ) b ) t GROUP BY PROD_NAME; /*step6:向模型区分度监测插入KS上线以来数据*/ INSERT INTO {RPT}.A_MFIN_TAX_MODEL_DISTG_MONITOR_dtl (DATA_DT -- '数据日期' ,PROD_NAME-- '产品名称' ,FLAG -- '标志' ,CONTRACT_NUM -- '合同数' ,KS ) SELECT DATE '{ETL_TX_DT}' AS data_dt-- '数据日期' ,PROD_NAME-- '产品名称' ,'上线以来'AS tag-- '标志' ,count(DISTINCT CONTRACT_SEQ_NO)AS 合同数-- '合同数' ,max(abs(cum_bad/tot_bad -cum_good/tot_good))AS KS FROM ( SELECT PROD_NAME ,CONTRACT_SEQ_NO ,MODEL_BRCH_NUM ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(ORDER BY MODEL_BRCH_NUM asc) AS cum_bad ,COUNT(CASE WHEN label = 1 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER() AS tot_bad ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER(ORDER BY MODEL_BRCH_NUM asc) AS cum_good ,COUNT(CASE WHEN label = 0 THEN CONTRACT_SEQ_NO ELSE NULL END ) OVER() AS tot_good FROM {RPT}.VT_A_MFIN_TAX_MODEL_DISTG_MONITOR_01 a WHERE data_dt=DATE '{ETL_TX_DT}' AND DATE '{ETL_TX_DT}' = DATE '{I_ME_DT}' -- 只需要月末数据 ) c GROUP BY PROD_NAME ; """ # -- 主调程序-- # bsql=bsql1+bsqlmapping+bsql2 bformatsql = bsql.format_map(vars()) ret_code = execute_gbase_sql(bformatsql) if ret_code : log.error(" ERROR - ERROR .") exit(-1) else: log.info("SUCESS . ") 对比下这个的auc
最新发布
08-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值