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. 成都Uber优步司机奖励政策(4月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. MIUI 10 已连接 但无法访问互联网 的解决方案

    wifi为 DHCP 时,我发现得到的总是已经有机器在用的 192.168.1.9  这台机器, 所以只需要手动配置一下ip就行了,随便指定一个,然后ping一下,ping不通的话就配上,然后再重新连 ...

  3. flask之URL和视图(一)

    1.Flask URL和视图 1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__name ...

  4. C#用Oracle.DataAccess中连接Oracle要注意版本问题!转)

    一般人,不包括全部平时在开发中使用的都是32位的PC机,所以安装的也是Oracle32位的客户端.但是一般服务器都是64位的,安装的也是 64位的Oracle客户端,如果要部署使用Oracle.Dat ...

  5. linux shell 完成批量压缩文件

    首先得到文件列表 使用 list -1 注意是1 不是l 然后是用一个循环内包装zip代码 #!/bin/bash list=`` for var in $list do echo $var zip ...

  6. C#多线程的几种使用

    参见链接   :http://www.jb51.net/article/46234.htm

  7. 2.2 Oracle之DML的SQL语句之多表查询以及组函数

    一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHE ...

  8. 服务治理-> Spring Cloud Eureka

    服务治理->搭建服务注册中心 服务治理可以说是微服务架构中最为核心和基础的模块, 它主要用来实现各个微服务 实例的自动化注册与发现. 为什么我们在微服务架构中那么需要服务治理模块呢?微服务 系统 ...

  9. 使用Java EE 在eclipse 开发动态的Web工程(Java web项目)

    1.使用Java EE 在eclipse 开发动态的Web工程(Java web项目)1)开发开发选项切换到JavaEE2)可以在Windows->show view中找到package exp ...

  10. 自定义UIView怎么注册销毁NSNotification通知

    问题描述:在使用天猫tangram框架后.部分组件自定义后会用到通知,但是在iOS 8 系统中,会崩溃? 原因分析:当对象挂掉后,要对应移除注册的通知. 否则当你重复执行发送通知的时候,在iOS8 系 ...