51Testing软件测试论坛
标题:
影响性能测试报告测试的源代码
[打印本页]
作者:
Jon
时间:
2007-5-23 12:59
标题:
影响性能测试报告测试的源代码
<P><FONT face=宋体 size=2> 影响性能测试报告测试的源代码</FONT></P>
<P><FONT face=宋体 size=2> ——文章不错,可供相关人员参考学习</FONT></P>
<P><FONT face=宋体 size=2>主题:影响性能测试的源代码(数据库)</FONT></P>
<P><FONT face=宋体 size=2>关键词:测试报告、数据库、性能分析、性能测试、源代码</FONT></P>
<P><FONT face=宋体 size=2></FONT> </P>
<P><BR>CapabilityForConnection 主运行程序,读取配置文件init.properties、reference.properties初始化参数。调用POOLTEST(一次完整的测试用例),计算其平均时间与使用连接数package com.cea.repository.test;</P>
<P>import org.apache.commons.logging.LogFactory;<BR>import org.apache.commons.logging.Log;<BR>import java.util.Properties;<BR>import java.io.FileInputStream;<BR>import java.io.InputStream;</P>
<P>public class CapabilityForConnection {<BR> private static Log log = LogFactory.getLog(CapabilityForConnection.class);<BR> /**<BR> * 计算一次测试所消耗的时间<BR> */<BR> public static long times = 0;<BR> /**<BR> * 连接数<BR> */<BR> public static long psize = 0;</P>
<P> public static void main(String[] args) throws Exception {<BR> /**<BR> * 运行的次数<BR> */<BR> int size = 1;<BR> /**<BR> * 见POOLTEST说明<BR> */<BR> int execsum = 0;<BR> /**<BR> * 见POOLTEST说明<BR> */<BR> int opencon = 0;<BR> /**<BR> * execsum对应properties的命名<BR> */<BR> String execs = null;<BR> /**<BR> * opencon对应properties的命名<BR> */<BR> String openc = null;</P>
<P> long sumtime = 0;<BR> Properties prop = initProperty("reference.properties");<BR> Properties init = initProperty("init.properties");</P>
<P> if (init.size() > 0) {<BR> Object o = init.get("init");<BR> size = Integer.parseInt(o.toString());<BR> execs = init.get("name0").toString();<BR> openc = init.get("name1").toString();<BR> }</P>
<P> for (int i = 0; i < prop.size() / 2; i++) {<BR> execsum = Integer.parseInt(prop.getProperty(execs + i).toString());<BR> opencon = Integer.parseInt(prop.getProperty(openc + i).toString());<BR> sumtime = 0;<BR> psize = 0;<BR> log.info("第" + (i + 1) + "组数据:");<BR> log.info("并发应用数:" + execsum + " 模拟连接数:" + opencon);</P>
<P> String[] reference = {"" + execsum, "" + opencon};<BR> for (int j = 0; j < size; j++) {<BR> times = 0;<BR> PoolTest.main(reference);<BR> sumtime += times;<BR> }<BR> log.info("第" + (i + 1) + "组数据共执行" + size + "次;平均耗时为:" +<BR> sumtime / (size * execsum) + "毫秒");<BR> log.info("平均使用" + psize / size + "个连接");</P>
<P> }<BR> }</P>
<P> private static Properties initProperty(String filename) throws Exception {<BR> InputStream is = new FileInputStream(filename);<BR> Properties prop = new Properties();<BR> prop.load(is);<BR> return prop;</P>
<P> }<BR>}<BR></P>
[
本帖最后由 Jon 于 2007-5-23 13:02 编辑
]
作者:
Jon
时间:
2007-5-23 13:03
<P>POOLTEST计算一次完整过程耗时,统计消耗的连接<BR>package com.cea.repository.test;</P>
<P>import com.cea.repository.test.testdata.MainExecute;<BR>import java.util.HashMap;<BR>import java.util.Map;<BR>import com.cea.repository.connection.PoolSupper;<BR>import org.apache.commons.logging.LogFactory;<BR>import org.apache.commons.logging.Log;<BR>/**<BR> *<BR> * <BR>Title: 连接池性能测试</P>
<P><BR> *<BR> * <BR>Description: 测试不合理的利用连接对WEB应用所造成影响.</P>
<P><BR> *<BR> * <BR>Copyright: Copyright (c) 2005</P>
<P><BR> *<BR> * <BR>Company: </P>
<P><BR> *<BR> * @author 小舟<BR> * @version 1.0<BR> */<BR>public class PoolTest extends Thread {<BR> private static Log log = LogFactory.getLog(PoolTest.class);<BR> /**<BR> * 并发执行MainExecute的数量<BR> */<BR> private static int EXECUTESUM = 35;<BR> /**<BR> * 一次MainExecute执行所请求的连接数<BR> */<BR> public static int CONNECTIONS = 3;<BR> /**<BR> * 记录所使用的连接<BR> */<BR> public static Map poolTestMap = new HashMap();<BR> /**<BR> * 第sum次执行MainExecute所需要的时间<BR> */<BR> public int sum = 0;</P>
<P> public void run() {<BR> try {<BR> long s = System.currentTimeMillis();<BR> com.cea.repository.test.testdata.MainExecute.main(null);<BR> long t = System.currentTimeMillis() - s;<BR> CapabilityForConnection.times +=t;<BR>// if(CapabilityForConnection.times < t){<BR>// CapabilityForConnection.times = t;<BR>// }</P>
<P>// log.info("time" + (++sum) + ":" +<BR>// (System.currentTimeMillis() - s));<BR> } catch (Exception ex) {<BR> }<BR> }</P>
<P> public static void main(String[] args) throws Exception {<BR> if(args!= null && args.length>1){<BR> EXECUTESUM = Integer.parseInt(args[0]);<BR> CONNECTIONS = Integer.parseInt(args[1]);<BR> }</P>
<P> PoolSupper.initPool();<BR> startExec(EXECUTESUM);<BR> //设定足够长的时间等待所有程序执行完,得到准确的并发执行所消耗的时间<BR> try {<BR> Thread.sleep(6000);<BR> } catch (InterruptedException ex) {<BR> ex.printStackTrace();<BR> }<BR> log.info("运行平均耗时:" + CapabilityForConnection.times/EXECUTESUM);<BR> //如果条件成立,证明连接没有被回收,只要存在一个相同的,就证明连接被重复利用了<BR> CapabilityForConnection.psize +=poolTestMap.size();<BR> if (poolTestMap.size() == EXECUTESUM) {<BR> log.info("不存在重复使用的连接,共创建" + poolTestMap.size()+ "个连接" );<BR> } else {<BR> log.info("共使用" + poolTestMap.size()+ "个连接" );<BR> }<BR> clear();<BR> }</P>
<P> private static void startExec(int EXECUTESUM) {<BR> int i = 0;<BR> while (i < EXECUTESUM) {<BR> if (i++ < EXECUTESUM) {<BR> try {<BR> new PoolTest().start();<BR> } catch (Exception ex2) {<BR> }<BR> }<BR> }<BR> }<BR> private static void clear() {<BR> poolTestMap = new HashMap();<BR> }</P>
<P><BR>}</P>
作者:
Jon
时间:
2007-5-23 13:04
<P>简单的不能再简单的测试代码:<BR>package com.cea.repository.test.testdata;</P>
<P>import com.cea.repository.connection.drive.ConnectionFactory;<BR>import java.sql.Connection;<BR>import java.sql.Statement;<BR>import java.sql.ResultSet;<BR>import java.sql.PreparedStatement;<BR>import java.util.HashMap;<BR>import java.util.Map;<BR>import java.util.List;<BR>import java.util.ArrayList;<BR>import com.cea.repository.test.PoolTest;<BR>import com.cea.repository.connection.poolpository.PoolFactory;</P>
<P>/**<BR> * <BR> * <BR>Title: </P>
<P><BR> * <BR>Description: </P>
<P><BR> * <BR>Copyright: Copyright (c) 2004</P>
<P><BR> * <BR>Company: cea</P>
<P><BR> * @author 小舟<BR> * @version 1.0<BR> */<BR>public class MainExecute {<BR> public static void main(String[] args) throws Exception {<BR> testConnection();<BR> }</P>
<P> static void testConnection() throws Exception {<BR> for (int i = 0; i < PoolTest.CONNECTIONS; i++) {<BR> Connection con = PoolFactory.newInstance();<BR> //这里的改变直接影响连接的复用<BR> Thread.sleep(50);<BR> PoolTest.poolTestMap.put(con.toString(), "");<BR> con.close();<BR> }<BR> }</P>
<P>}</P>
<P>三个配置文件的内容:<BR>init.properties文件<BR>#运行的次数<BR>init=5<BR>#并发执行MainExecute的数量所匹配的名字<BR>name0=execsum<BR>#一次MainExecute执行所请求的连接数所匹配的名字<BR>name1=opencon<BR>reference.properties文件<BR>#过滤数据<BR>execsum0=10<BR>opencon0=1<BR>#第一次测试数据<BR>execsum1=100<BR>opencon1=6<BR>#第二次测试数据<BR>execsum2=85<BR>opencon2=9<BR>#第三次测试数据<BR>execsum3=140<BR>opencon3=3<BR>最后一个是pool-config.xml数据源配置:<BR>xml version="1.0" encoding="GB2312"?><BR><DataResources><BR> <ResourceParams dateIndentity="boat1"><BR> <defaultAutoCommit>falsedefaultAutoCommit><BR> <initialSize>30initialSize><BR> <maxActive>40maxActive><BR> <minIdle>0minIdle><BR> <maxIdle>18maxIdle><BR> <maxWait>10000maxWait><BR> <username>forumusername><BR> <password>kingpassword><BR> <driverClassName>oracle.jdbc.driver.OracleDriverdriverClassName><BR> <url>jdbc:oracle:thin:@192.168.1.3:1521:gzesturl><BR> <removeAbandoned>trueremoveAbandoned><BR> <removeAbandonedTimeout>10removeAbandonedTimeout><BR> <logAbandoned>truelogAbandoned><BR> ResourceParams><BR>DataResources></P>
作者:
Jon
时间:
2009-11-5 10:09
自己先顶一下 ,呵呵
欢迎交流学习
作者:
迪斯科
时间:
2010-3-26 10:28
自己先顶一下 ,呵呵欢迎交流学习
作者:
msnshow
时间:
2010-11-4 22:46
楼主是啥意思
作者:
myname1025
时间:
2010-11-19 13:55
我也没看懂
作者:
Fatmountain
时间:
2010-12-7 15:02
这个就不好怎么解释了,还是自己动手先做做
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2