jmeter - 如何通过 beanshell 采样器使用 JDBC 处理在 Oracle 上运行相同循环的多个用户
问题描述
通过 beanshell 采样器,我在 Oracle 上运行以下循环查询,现在它在一个用户上运行良好,但是当我尝试对多个用户运行相同时,它失败并给出PK violation
错误,尽管在每次迭代之后我都删除了记录它将指针设置为第一个用户的初始位置。
BeanShell 采样器脚本:
import java.sql.*;
import oracle.jdbc.*;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
PreparedStatement pstmt = null;
Connection conn = DataSourceElement.getConnection("IMPACTConnectionPrerequisitsII");
String Query = "DECLARE \n"
+ "j number(4) \n"
+ "BEGIN \n"
+ "FOR j in 11 .. 12 LOOP \n"
+ "INSERT INTO FWA_STAGE_TU \n"
+ "(ID,EXT_ID,BATCH_NO,OPERATION,BLOCK_ROLL_UP_LAST_RECORD,LAST_UPDATED_DATE,ERROR_FLAG,TRIAL_NO,TRIAL_ALIAS_CODE, \n"
+ "COUNTRY_CODE,DISPLAY_UNIT_NO,GROUP_NO,TRIAL_UNIT_REFERENCE,PRIMARY_INVESTIGATOR,PRIMARY_CENTRE,OCATION_NO, \n"
+ "PURPOSE_CODE,MANAGING_MED_UNIT_CODE,UPDATING_MED_UNIT_CODE,FINANCE_MED_UNIT_CODE,PATIENTS_ALL_SET_UP_FLAG, \n"
+ "PATIENT_MONITORING_FLAG,COMMENTS,CONFIRMED_FLAG,CONFIRMED_BY,CONFIRMED_DATE,ROLLUP_ROLLDOWN_PLANNED_FIGS, \n"
+ "DOC_COLLECTION_INDICATOR,VALIDATED_PAT_CAP,MAXIMUM_PAT_CAP,PREFERRED_LANGUAGE_CODE,NEW_DISPLAY_UNIT_NO, \n"
+ "TOTAL_OPEN_DCF_ISSUES_NO,ORDER_INTERVAL,ORDER_INTERVAL_UNITS,DATA_SOURCE_CODE,RANK_SEQ) \n"
+ "VALUES (j, 1, 10, 'I', NULL, SYSDATE, 'N', 102922, 'TESTTRIAL4', 'BEL', \n"
+ "j, NULL, 'BELTU'||j, 130262, 124236, NULL, 'PATTR', 'FP', 'FP', 'FP', 'N', 'Y', 'TESTTU'||j, \n"
+ "'Y', 999999, SYSDATE, NULL, 'P', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) \n"
+ "END LOOP \n"
+ "END";
try {
pstmt = conn.prepareStatement(Query);
pstmt.executeUpdate();
}
catch(Throwable ex) {
log.error("Error message: ", ex);
throw ex;
}
finally {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
log.info("!!!! Connection closed to database !!!!");
}
如何为多个用户完成这项工作?
解决方案
如果您谈论的是多个用户,则可能是一个用户尚未删除插入的数据而另一个用户正在创建相同数据的情况。
解决方案将使用一些唯一值作为ID
(或具有主键约束的列是什么),如果您没有更好的主意,可以使用__threadNum() 函数返回当前线程的数量(虚拟用户)
另请注意,从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言编写脚本,因此值得考虑迁移。在您的情况下,根本不需要更改代码。
推荐阅读
- ruby-on-rails - 通过关系在 has_many 上的 ActiveRecord::InvalidForeignKey
- python-3.x - 如何处理带有嵌套列表和字符串元素的列表?
- javascript - 在laravel中触发事件后如何获取特定div中的值?
- python - 如何合并具有共同子字符串的字符串以在 Python 的数据框中生成一些组
- c++ - 图重路由算法黑客排名
- apache-pulsar - 用于日志记录的“旁观者”Pulsar Consumer
- python-3.x - SQLAlchemy 没有属性 Column
- xaml - 在 SkiaSharp (UWP) 中正确对齐 UI 元素
- html - HTML中“标签类型”的含义
- mysql - 如何在一个表中获取父子数据,如 MySQL 中的数据透视表?