1.首先编写一个测试用的 function

 CREATE OR REPLACE FUNCTION getDealmainNo_test(dealdate        IN varchar2,
productcodename in varchar2)
/***********************************************************
* linc 2018-01-09
* 方法:获取序列编号
* 入参:成交日期,产品代码
* 返回:序列编号
***********************************************************/
RETURN varchar2 AS
today varchar2(10);
seqno integer;
begindate varchar2(20) := dealdate || ' 00:00:00';
enddate varchar2(20) := dealdate || ' 23:59:59';
seqnoname varchar2(30);
pragma autonomous_transaction;
BEGIN
seqno := 0;
select to_char(sysdate, 'yyyy-mm-dd') into today from dual;
if today = dealdate then
execute immediate 'select seq_' || productcodename ||
'_no.nextval from dual'
into seqno;
else
begin
select nvl(max(to_number(substr(s.tno, -6))), 0) + 1
into seqno
from (select s.tno
from table_A s
where s.dealdate between
to_date(begindate, 'yyyy-mm-dd hh24:mi:ss') and
to_date(enddate, 'yyyy-mm-dd hh24:mi:ss')
and s.tcode = productcodename) s ; exception
when others then
return '';
end;
end if;
seqnoname := productcodename || replace(dealdate, '-', '') ||
lpad(seqno, 6, '0');
RETURN seqnoname;
END getDealmainNo_test;

2.使用java对func进行调用 每次获得一个最大的成交编号 ;

 package main.java.javaprictice;

 import main.java.C3P0XmlSimplify;
import org.testng.annotations.Test; import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* Created by linbo.yang on 2018/1/9.
*/
public class CallOracleFunc {
Connection conn = null;
CallableStatement callableStatement = null;
PreparedStatement ps = null;
ResultSet rs; public Integer save(String no) { Integer rowCount=null ;
String sql="insert into table_A(dealdate,tno,tdate,tcode) values(?,?,?,?) ";
conn = C3P0XmlSimplify.getInstance().getConnection();
//ddate
SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH24:mm:ss");
String date = df.format(new Date());
Timestamp timestamp = Timestamp.valueOf(date);
//dealdate
SimpleDateFormat df1 =new SimpleDateFormat("yyyy-MM-dd");
String dealdate = df1.format(new Date()); try {
ps = conn.prepareStatement(sql);
ps.setDate(1,java.sql.Date.valueOf("2018-01-08"));
ps.setString(2,no);
ps.setTimestamp(3,timestamp);
ps.setString(4,"IBO");
rowCount= ps.executeUpdate();
System.out.println("rowCount"+rowCount);
} catch (SQLException e) {
e.printStackTrace();
}finally {
C3P0XmlSimplify.releaseSources(conn);
return rowCount ;
} } public String getDealmainNo() {
String string = null;
try { conn = C3P0XmlSimplify.getInstance().getConnection();
/* ?=call getDealmainNo(?,?);
* 第一个问号(?) 代表输入值,但要制定输入类型:callableStatement.registerOutParameter(1, Types.VARCHAR);
* 第二个问号(?) 代表输入值,通过callableStatement.setString()方法类制定入参的类型 ;
* 。。。。。。。
* */
callableStatement = conn.prepareCall("{?=call getDealmainNo_test(?,?)}");
callableStatement.registerOutParameter(1, Types.VARCHAR);
callableStatement.setString(2, "2018-01-08");
callableStatement.setString(3, "IBO");
callableStatement.execute();
string = callableStatement.getString(1);
System.out.println(string); } catch (Exception e) {
e.printStackTrace();
} finally {
C3P0XmlSimplify.releaseSources(conn);
return string;
}
}
@Test(threadPoolSize = 3,invocationCount = 10,timeOut = 100000)
public void getDealmainNo_() {
CallOracleFunc c=new CallOracleFunc();
String dealmainNo = c.getDealmainNo();
Integer row = c.save(dealmainNo);
System.out.println("dealmainNo="+dealmainNo+" ;row="+row); } public static void main(String[] args) {
CallOracleFunc c=new CallOracleFunc();
String dealmainNo = c.getDealmainNo();
Integer row = c.save(dealmainNo);
System.out.println("dealmainNo="+dealmainNo+" ;row="+row); } }

--数据的相关脚本

    create table table_A(
tid number ,
dealdate date ,
tcode varchar2(100),
tno varchar2(100),
tdate timestamp
) ;
drop table table_A ;
select * from table_A t where t.tid is null ;
delete table_A t where t.tid is null ;
insert into table_A
select v.ID,
v.DEALDATE,
v.PRODUCTCODE,
v.NO,
v.CREATETIME
from v_product_deal_main v ;
insert into table_A(tno,tdate) values(?,?) ; select nvl(max(to_number(substr(s.tno, -6))), 0) + 1
from (select s.tno
from table_A s
where s.dealdate between
to_date('2018-01-08 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2018-01-08 23:00:00', 'yyyy-mm-dd hh24:mi:ss')
and s.tcode = 'IBO') s

使用testng多线程来测试成交编号重复的问题的更多相关文章

  1. testng多线程并行执行测试

    testng多线程并行执行测试 testng多线程并行执行测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力.TestNG允许我们以 ...

  2. Selenium & Webdriver 远程测试和多线程并发测试

    Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...

  3. 学习使用TestNG进行数据驱动测试

    转自: https://mp.weixin.qq.com/s/8Bd8LEhiC2pu2VMcyNMGlQ 学习使用TestNG进行数据驱动测试 赵吃饭 51Testing软件测试网 前天   学习使 ...

  4. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

  5. testNG之异常测试

    @Test(expectedExceptions = ) 在测试的时候,某些用例的输入条件,预期结果是代码抛出异常,那么这个时候就需要testNG的异常测试,先看一段会抛出异常的代码 exceptio ...

  6. TestNG多线程测试-注解方式实现

    用@Test(invocationCount = x,threadPoolSize = y)声明,invocationCount表示执行次数,threadPoolSize表示线程池大小. packag ...

  7. TestNG 多线程测试

    TestNG以注解的方式实现多线程测试 import org.testng.annotations.Test; public class TreadDemo { // invocationCount ...

  8. 利用Testng注释实现多线程并发测试

    Testng 是一款非常优秀的测试框架,真正从测试角度出发,为测试所想.在测试过程中我们经常会遇到对某一个场景做并发请求,主要想了解该程序在并发时是否会有异常或者没考虑到的其他情况,这时往往不是要做性 ...

  9. TestNG多线程测试-用xml文件实现

    MultiThreadOnXml类: package com.janson.multiThread; import org.testng.annotations.Test; public class ...

随机推荐

  1. PPAS的MTK tool 工具使用说明

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackg ...

  2. 4 jdngo vue-rotue

    . 执行linux命令 与mac命令   git base 3 初始化操作  页面加载完成,发起请求  window.onload

  3. 微信小程序:设置启动页面

    一.功能描述 微信小程序启动时,首先运行app.js,然后才跳转到第一个页面,也就是启动界面. 设置启动界面,只需要调整app.json的pages信息的位置,放在第一条的page记录便是启动界面

  4. Codeforces Round #511 Div.1 A Div.2 C

    嗯切一题走人很开心. gzy-50分比我还惨. 题意:有n个数,去掉尽量少的数使得剩下数的gcd变大. 首先把这n个数都除以gcd,就变成了去掉尽量少的数使得gcd不等于1. 可以枚举一个质数,然后统 ...

  5. CSS快速入门-定位(position)

    一.概述 CSS 定位 (Positioning) 属性允许你对元素进行定位. 定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的 ...

  6. vim使用技巧(插入,删除,查找,复制,粘贴,剪切)

    原文链接:http://blog.csdn.net/qq_38646470/article/details/79643000 编程人员很喜欢的编辑器:vim 先搞清楚vim的三种模式: 1.命令模式: ...

  7. [PLC]ST语言五:STL/RET/CMP/ZCP

    一:STL/RET/CMP/ZCP 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言: (*步进指令STL(EN,s);*) SET(M8002,S3); STL(T ...

  8. STM平台增加性能测试/稳定性测试部分【一】

    前置 我之前写了一个接口自动化平台的,后期因为一个原因删除了. 现在,在此平台的基础上,我又增加了性能/稳定性的功能 它的前端大概是这样: 数据解析: 图表展示: 我将稳定性及性能归与一套方案去编写, ...

  9. 【SIKIA计划】_04_C#中级教程 (2015版)笔记

    IKIC#中级教程 (2015版)正常模式指的是不会影响程序的正常运行.1,在VS中我们使用Console.Write(或者WriteLine)方法向控制台输出变量的值,通过这个我们可以查看变量的值是 ...

  10. 关于python中的tkinter模块

    python2.7和python3.6中的tkinter是两个包,不会自动升级,假如在fedora28做开发的话, 错误:用import Tkinter /import tkinter /import ...