一共两个UnitTest,一个PUnit的Runner,代码如下
package test;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
//import org.springframework.jdbc.datasource.DriverManagerDataSource;
import com.mchange.v2.c3p0.DriverManagerDataSource;
import junit.framework.TestCase;
public class InsertQueryJava extends TestCase {
public void testAll() {
DriverManagerDataSource ds = new DriverManagerDataSource();
// ds.setUsername("xx");
// ds.setPassword("xx");
// ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
// ds.setUrl("xx");
ds.setUser("xx");
ds.setPassword("xx");
ds.setJdbcUrl("xx");
ds.setDriverClass("oracle.jdbc.driver.OracleDriver");
SimpleJdbcTemplate tpl = new SimpleJdbcTemplate(ds);
String sql1 = "insert into xxxx(a, b) values ('test', 100)";
String sql2 = "select a, b from xxxx";
tpl.update(sql1);
int max = 0;
List ll = tpl.queryForList(sql2);
Iterator it = ll.iterator();
while(it.hasNext()){
Map item = (Map) it.next();
BigDecimal x = (BigDecimal) item.get("B");
if(x.intValue() > max)
max = x.intValue();
}
System.out.println(max);
}
}
package test
import com.mchange.v2.c3p0.DriverManagerDataSource;
import groovy.sql.Sql
class InsertQuery extends GroovyTestCase{
void testAll(){
def p = [
url:'xx',
u:'xx',
p:'xx',
driver:'oracle.jdbc.driver.OracleDriver'
]
// def db = Sql.newInstance(p.url, p.u, p.p, p.driver)
def ds = new DriverManagerDataSource()
ds.setUser(p.u)
ds.setPassword(p.p)
ds.setJdbcUrl(p.url)
ds.setDriverClass(p.driver)
def db = new Sql(ds)
String sql = "insert into xxxx(a, b) values ('test', 100)"
String sql2 = "select a, b from xxxx"
db.execute(sql)
def ll = db.rows(sql2)
int max = 0
for(one in ll){
if(one.b > max)
max = one.b
}
println max
// def item = ll.max{it.b}
// println item.b
}
}
package test;
import org.punit.runner.ConcurrentRunner;
public class Runner {
public static void main(String[] args) {
int threadNum = 20;
new ConcurrentRunner(threadNum).run(InsertQueryJava.class);
new ConcurrentRunner(threadNum).run(InsertQuery.class);
}
}
windows下jdk1.6.20 groovy1.8.0
通过运行结果发现了几点表面现象:
groovy的Sql,直接newInstance比new Sql(datasource)的性能要好
c3p0的DriverManagerDataSource要比spring jdbc的DriverManagerDataSource的性能要好
都编译成class文件后groovy的性能和java的性能几乎一样
下面是Runner结果
[concurrent] Starting test.InsertQueryJava
test.InsertQueryJava
log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).
log4j:WARN Please initialize the log4j system properly.
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
testAll() - [4292.373611ms]
total: 1, failures:0 (GREEN) - 4331.556105ms
[concurrent] Starting test.InsertQuery
test.InsertQuery
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
testAll() - [6448.14313ms]
total: 1, failures:0 (GREEN) - 6686.467204ms
后面为了使得数据源连接池有个池的效果,我用了一个全局的DataSource,结果更吃惊。。groovy竟然效率更高
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
[concurrent] Starting test.InsertQueryJava
test.InsertQueryJava
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
testAll() - [1100.632273ms]
total: 1, failures:0 (GREEN) - 1139.438811ms
[concurrent] Starting test.InsertQuery
test.InsertQuery
100
100
100
100
100
100
100
100
testAll() - [237.711986ms]
total: 1, failures:0 (GREEN) - 442.693834ms
100
100
100
100
100
100
100
100
100
100
100
100
代码修改如下
package test;
import javax.sql.DataSource;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ContextHolder {
static ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:beans.xml");
public static DataSource getDs(){
return (DataSource) context.getBean("ds");
}
}
package test;
import org.punit.runner.ConcurrentRunner;
public class Runner {
public static void main(String[] args) {
ContextHolder.getDs();
int threadNum = 20;
new ConcurrentRunner(threadNum).run(InsertQueryJava.class);
new ConcurrentRunner(threadNum).run(InsertQuery.class);
}
}
分享到:
相关推荐
4. **灵活性**:P-unit 可以应用于各种类型的性能测试,如负载测试、压力测试、稳定性测试等,能够模拟不同用户行为,以全面评估应用在各种条件下的表现。 5. **兼容性**:由于其开源性质,P-unit 兼容多种操作系统...
用于比较方法的性能和运行基准的简单框架。 对于我的信息,请参阅以下链接: ##指示 创建一个新的类库,通常我使用 .Benchmarks 的命名约定,但这不是强制性的。 从 NuGet 下载包或将 pUnit.dll 的引用添加到...
对于"punit",我们假设它是一个实用工具库,可能包含了各种用于单元测试、性能测试或者集成测试的工具,帮助开发者确保他们的代码能够正确、高效地运行。 要在Python环境中安装punit-1.0.3,你需要先确保已经安装了...
PUnit 是一个简单的实用程序,可以在任何软件单元上执行回归测试。无需更改代码,因为回归测试是在可执行文件输出上执行的。 要执行的测试在 XML 文件中描述。
资源来自pypi官网。 资源全名:punit-1.0.3-py3-none-any.whl
可以使用以下Maven命令执行库的单元测试 mvn clean install -Punit-tests 用法 将以下依赖项添加到您的maven pom.xml文件中。 <groupId>com.sap.cloud.client</groupId> <artifactId>rest-api-client ${...
在“Linux/Unix编程”和“Unix_Linux”的标签下,我们可以推断这个项目专注于编写在Linux或Unix系统上的程序,尤其是涉及到与硬件交互的部分。在这些操作系统中,通常需要使用C语言编写低级别驱动程序来与硬件进行...
Punit Dharmadhikari的T1A2投资组合项目的自述文件 以下是与T1A2作品集提交有关的自述减价文档。 链接到Punit Dharmadhikari的T1A2产品组合URL 请点击访问Punit Dharmadhikari的作品集。 或者,请将下面的链接复制...
在Hadhoop summit 2016上,Anand Venugopal, Punit Shah分享了题为《Lego-Like Building Blocks of Storm and Spark Streaming Pipelines》,就各种流式实现的学习和最佳实践,特定的使用工具等方面的内容做了深入的...
特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本,并允许具备软件的人员这样做,但须...
分叉或克隆这个 repo 进行某些更改,例如名称和链接转到 Repo 设置并向下滚动到 Github Pages 在源部分中,选择您的分支并单击保存。 瞧! 您的网站应该位于https://{username}.github.io执照麻省理工学院 :...
在src/punit/下出现html,scss,js文件编写业务代码 在src/config.js中配置后台接口地址 在src/js/routeControl.js中控制路由,修改默认路由 use visop quick begin npm install -g visop cd yourproject visop start ...
加拿大地震 Android 应用... 根据日期,大小和省份进行排序(升序和降序)的不同过滤器易于根据地震标题、位置、日期/时间和省份进行搜索截图由开发团队成员Punit Shah ( ) 维伦·古贾里亚桑杰·卡普尔巴努·钱德·雷