﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-性能测试</title><link>http://www.blogjava.net/paulwong/category/54688.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 22 Feb 2020 17:36:31 GMT</lastBuildDate><pubDate>Sat, 22 Feb 2020 17:36:31 GMT</pubDate><ttl>60</ttl><item><title>采用 jstatd 监控服务器</title><link>http://www.blogjava.net/paulwong/archive/2020/02/21/435144.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 21 Feb 2020 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/02/21/435144.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435144.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/02/21/435144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435144.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435144.html</trackback:ping><description><![CDATA[<br /><a href="https://www.jianshu.com/p/97f09e1648a6" target="_blank">https://www.jianshu.com/p/97f09e1648a6</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-02-21 17:08 <a href="http://www.blogjava.net/paulwong/archive/2020/02/21/435144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING BOOT 环境下减少中间件依赖的UNIT测试</title><link>http://www.blogjava.net/paulwong/archive/2020/02/07/435067.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 07 Feb 2020 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/02/07/435067.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435067.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/02/07/435067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435067.html</trackback:ping><description><![CDATA[<div>SPRING BOOT 环境下，测试有时会依赖于外部的中间件，如Mysql，Activemq，Mongodb等，那如何能减少这种依赖呢？<br />
SPRING BOOT其实已经实现了自动化配置。<br />
<br />
<h2>Mongodb</h2>
SPRING BOOT的自动化配置文件：org.springframework.boot.autoconfigure.mongo.embeddedEmbedded.MongoAutoConfiguration.java<br /><br />在pom.xml中新增一test profile，并添加相应jar包，这样可防止对其他profile的影响，如果是在Eclipse跑测试，需在Project的属性中指定Active Profile为test，以覆盖pom.xml的定义。<br />
这种方式即使是使用SPRING DATA MONGODB的REPOSITORY也是适用的。<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">profile</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">id</span><span style="color: #0000FF; ">&gt;</span>test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">id</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>de.flapdoodle.embed<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>de.flapdoodle.embed.mongo<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">activation</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">activeByDefault</span><span style="color: #0000FF; ">&gt;</span>false<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">activeByDefault</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">activation</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">profile</span><span style="color: #0000FF; ">&gt;</span></div>
</div>
在application-test.yaml中添加端口，其他如IP那些信息都不需要<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->spring:<br />
&nbsp;&nbsp;&nbsp;data:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mongodb:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port:&nbsp;27017</div>
<br />
unit test config<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileNotFoundException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.InputStreamReader;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.Reader;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.UncheckedIOException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.nio.charset.StandardCharsets;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.List;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;javax.annotation.PostConstruct;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.sql.DataSource;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.bson.Document;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Value;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.annotation.Configuration;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.annotation.Profile;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.core.io.Resource;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.core.io.ResourceLoader;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.data.mongodb.core.MongoTemplate;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.data.mongodb.repository.config.EnableMongoRepositories;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.util.FileCopyUtils;<br /><br />@Configuration<br />@Profile({"test",&nbsp;"integrationTest"})<br />@EnableMongoRepositories(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basePackages&nbsp;=&nbsp;{"paul.com.repository"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />)<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;EmbeddedDataSourceConfiguration&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Value("classpath:/initdata/USER.json")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Resource&nbsp;userResource;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Value("classpath:/initdata/MEMBERS.json")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Resource&nbsp;membersResource;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;ResourceLoader&nbsp;resourceLoader;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;DataSource&nbsp;dataSource;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;MongoTemplate&nbsp;&nbsp;mongoTemplate;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@PostConstruct<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initialize()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;FileNotFoundException,&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.initializeHsqldb();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.initializeMongodb();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initializeHsqldb()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResourceDatabasePopulator&nbsp;populator&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ResourceDatabasePopulator();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;populator.addScript(resourceLoader.getResource("classpath:/org/springframework/batch/core/schema-hsqldb.sql"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;populator.setContinueOnError(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DatabasePopulatorUtils.execute(populator&nbsp;,&nbsp;dataSource);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initializeMongodb()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;FileNotFoundException,&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.saveResource(userResource,&nbsp;"USER");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.saveDocumentList(membersResource,&nbsp;"MEMBER");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;saveResource(Resource&nbsp;resource,&nbsp;String&nbsp;collectionName)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resourceJson&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.asString(resource);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;resourceDocument&nbsp;=&nbsp;Document.parse(resourceJson);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.mongoTemplate.save(resourceDocument,&nbsp;collectionName);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;saveDocumentList(Resource&nbsp;resource,&nbsp;String&nbsp;collectionName)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resourceJson&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.asString(resource);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;resourceDocument&nbsp;=&nbsp;Document.parse("{&nbsp;\"list\":"&nbsp;+&nbsp;resourceJson&nbsp;+&nbsp;"}");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Document&gt;&nbsp;documentList&nbsp;=&nbsp;resourceDocument.get("list",&nbsp;List.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;documentList.forEach(document&nbsp;-&gt;&nbsp;<span style="color: #0000FF; ">this</span>.mongoTemplate.save(document,&nbsp;collectionName));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;asString(Resource&nbsp;resource)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;(Reader&nbsp;reader&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;InputStreamReader(resource.getInputStream(),&nbsp;StandardCharsets.UTF_8))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FileCopyUtils.copyToString(reader);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;UncheckedIOException(e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Bean(destroyMethod="close")<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DataSource&nbsp;dataSource()&nbsp;{<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BasicDataSource&nbsp;dataSource&nbsp;=&nbsp;new&nbsp;BasicDataSource();<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setDriverClassName(environment.getProperty("batch.jdbc.driver"));<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setUrl(environment.getProperty("batch.jdbc.url"));<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setUsername(environment.getProperty("batch.jdbc.user"));<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setPassword(environment.getProperty("batch.jdbc.password"));<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dataSource;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000; "><br /></span>}</div><br />
<h2>ActiveMQ</h2>
只需更改application-test.yml中的brokerUrl为vm://embedded即可<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->spring:<br />
&nbsp;&nbsp;&nbsp;activemq:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;broker-url:&nbsp;vm://embedded?broker.persistent=false,useShutdownHook=false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in-memory:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;non-blocking-redelivery:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#packages:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#trust-all:&nbsp;false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#trusted:&nbsp;com.memorynotfound<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;block-if-full:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;block-if-full-timeout:&nbsp;-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create-connection-on-startup:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enabled:&nbsp;false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expiry-timeout:&nbsp;0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idle-timeout:&nbsp;30000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max-connections:&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maximum-active-session-per-connection:&nbsp;500<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reconnect-on-exception:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time-between-expiration-check:&nbsp;-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-anonymous-producers:&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user:&nbsp;admin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#password:&nbsp;ENC(hWJHuMyhydTqyF32neasTw==)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password:&nbsp;admin</div>
<br />
<h2>关系型数据库</h2>
将在application-test.yml中的数据库信息删除，同时在pom.xml中添加jar包依赖，这边是采用HSQL数据库<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">profile</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">id</span><span style="color: #0000FF; ">&gt;</span>test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">id</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.hsqldb<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>hsqldb<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">activation</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">activeByDefault</span><span style="color: #0000FF; ">&gt;</span>false<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">activeByDefault</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">activation</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">profile</span><span style="color: #0000FF; ">&gt;</span></div>
<br />
非SPRING BOOT/SPRING的纯JDK环境可参考<br />
<a href="https://github.com/yandex-qatools/embedded-services" target="_blank">https://github.com/yandex-qatools/embedded-services</a><br />
<br />
<a href="https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo" target="_blank">https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo</a><br />
<br />
<a href="https://github.com/jonyfs/spring-boot-data-embedded-mongodb/blob/master/src/main/java/br/com/jonyfs/spring/boot/data/embedded/mongodb/config/MongoConfig.java" target="_blank">https://github.com/jonyfs/spring-boot-data-embedded-mongodb/blob/master/src/main/java/br/com/jonyfs/spring/boot/data/embedded/mongodb/config/MongoConfig.java<br />
<br /></a>ActiveMQ:<br /><a href="https://memorynotfound.com/spring-boot-embedded-activemq-configuration-example/" target="_blank">https://memorynotfound.com/spring-boot-embedded-activemq-configuration-example/</a><img src ="http://www.blogjava.net/paulwong/aggbug/435067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-02-07 10:28 <a href="http://www.blogjava.net/paulwong/archive/2020/02/07/435067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么开发与测试老掐架呢</title><link>http://www.blogjava.net/paulwong/archive/2016/04/12/430050.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 12 Apr 2016 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2016/04/12/430050.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/430050.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2016/04/12/430050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/430050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/430050.html</trackback:ping><description><![CDATA[<div id="OSChina_News_72395" newscontent=""  textcontent"="" style="margin: 10px 0px; line-height: 1.6; font-size: 10.5pt; overflow: hidden; font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋体;"><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;"><img src="http://img.blog.csdn.net/20160410225822878" alt="" title="" border:="" box-sizing:="" max-width:="" data-bd-imgshare-binded="1" style="margin: 0px; padding: 0px; border: 0px; max-width: 640px;" /></p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">让我们思考几个常见的问题：</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">软件测试的目的是什么？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发人员能否构建出没有Bug的完美软件？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测人人员和开发人员是什么关系？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">软件测试能否保证软件质量？</p></li></ul><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">先闭目冥想五分钟吧，然后可以尝试着回答上面的问题。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">计算机先驱 Maurice Wikes 回忆起 1949 年他在英国剑桥工作的情形，在拖着打孔纸带上楼给雏形计算机 EDASC 装载程序时，他看到了自己的未来：</p><blockquote style="margin: 15px 10px; padding-right: 5px; padding-left: 35px; border-color: #eeeeee; color: #006600; font-size: 9pt; background-image: url(&quot;/img/blockquote.gif&quot;); background-color: #f4f5f7; background-position: 0% 0%; background-repeat: no-repeat;"><p style="margin: 0px 0px 15pt; padding: 0px;">我强烈的意识到，生命中剩下的好日子，都将耗费在给自己的程序找错误上头。</p></blockquote><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">Maurice Wikes告诉我们，没有完美的软件。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">我曾经写过一篇荐书文，推荐了温伯格技术思想三部曲中的《<a href="http://mp.weixin.qq.com/s?__biz=MzAxMzUzNzYyNA==&amp;mid=400738399&amp;idx=1&amp;sn=215470061d405d22b12389dadd65c767&amp;scene=20#rd" color:="" text-decoration:="" box-sizing:="" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;"><strong box-sizing:="" style="margin: 0px; padding: 0px;">颠覆完美软件：软件测试必须知道的几件事</strong></a>》。在这本书里，温伯格也告诉我们，没有完美的软件。所有的开发和测试人员都应该读读那本书。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">温伯格在《颠覆完美软件》中几乎讨论所有常见的与软件测试相关的概念、问题和指导思想，所以，在这篇文章里，我只能来吐槽啦，我将从以下几方面列一些常见的现象，希望能引起大家的思考。</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试和开发的关系</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">流程与标准</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">资源</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">态度</p></li></ul><h3>测试和开发的关系</h3><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">测试和开发是对立的吗？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">从处理Bug的角度看，似乎可以这么说。<strong box-sizing:="" style="margin: 0px; padding: 0px;">开发人员既生产代码，也生产Bug</strong>。因为开发人员不可避免地会生产Bug，所以测试人员必须存在，以便在软件交付之前尽可能多地检出Bug，保证交付给客户的软件质量更好一些。一个产Bug，一个挑Bug，看起来似乎是对立的。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">在现实中，很多测试团队和开发团队也正是因为这一点而搞得关系不和，甚至真的对立起来。请回想一下你周围发生的与开发和测试相关的事儿，看看有没有遇到过下面的情景：</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发说，测试净找麻烦，客户跟本不可能像他们那样使用软件</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试说，问题总是会在看似极端的条件下产生，用户总是会不经意触碰到看似极端的不可能出现的条件</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发说，测试花在异常情况下的精力比测试主流程还多，不知道轻重缓急</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试说，开发从来不考虑测试的感受，连测都不测就扔给我们</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发说，我都测了，还要测试人员干什么</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试说，这么明显的问题你们都不测一下，把我们测试当垃圾桶啊</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">&#8230;&#8230;</p></li></ul><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">许许多多类似的问题，让开发和测试的关系从扑朔迷离、相爱相杀走向对立。我见过开发和测试搞冷战某人遇见某人侧脸而过，也见过测试经理和开发经理打架，还见过高层领导故意让测试团队和开发团队关系紧张以为这样可以提高测试效率也能给开发压力最终会产出更高质量的软件&#8230;&#8230;</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">实际上，测试和开发拥有同一个目的：让软件更完美。测试和开发的关系，是一个问题的两面，应该是相辅相成和平共处的。测试不是为了挑刺儿，他提出的问题也不针对生产软件的开发人员，而仅仅是在努力想让开发人员的产出物看起来更好用。只要开发不将测试提Bug这个行为看成针对个人的行为，一切就有了美好的前提。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;"><strong box-sizing:="" style="margin: 0px; padding: 0px;">否定软件，并不是否定开发软件的人</strong>。这是开发和测试都需要明确的一个原则和前提。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">还有的人认为开发和测试之关系类似皮与毛，皮之不存毛将焉附？所以有的开发也会因此而有优越感：没我们写软件，你们测试早下岗了！可是，开发不写软件，开发也下岗了耶！</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">感谢开发的不完美，让测试可以有事可做并练就慧眼。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">感谢测试的认真细致和耐心体贴，让开发可以发现自己的不完美并有机会提升自己&#8212;&#8212;那些说我软件不好的，都是为了我好。</p><h3>资源</h3><blockquote box-sizing:="" margin:="" 0px="" padding:="" 15px="" border-left-width:="" border-left-color:="" border-radius:="" 5px="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 15px 10px; padding-right: 5px; padding-left: 35px; border-color: #eeeeee; color: #006600; font-size: 9pt; background-image: url(&quot;/img/blockquote.gif&quot;); background-color: #f4f5f7; background-position: 0% 0%; background-repeat: no-repeat;"><p box-sizing:="" margin-top:="" margin-bottom:="" margin-left:="" line-height:="" style="margin: 0px 0px 15pt; padding: 0px;">别动我们测试的服务器，你们自己搭一个！</p><p box-sizing:="" margin-top:="" margin-bottom:="" margin-left:="" line-height:="" style="margin: 0px 0px 15pt; padding: 0px;">我们没环境，不用你们的用谁的？</p><p box-sizing:="" margin-top:="" margin-bottom:="" margin-left:="" line-height:="" style="margin: 0px 0px 15pt; padding: 0px;">谁把我们的测试手机拿走了？你们申请一个嘛，老来占我们设备。</p><p box-sizing:="" margin-top:="" margin-bottom:="" margin-left:="" line-height:="" style="margin: 0px 0px 15pt; padding: 0px;">谁在用我们的账号？招呼都不打！我要用，赶紧退出来！</p></blockquote><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">有时开发和测试之间也会有资源上的冲突，要有努力的有创造性的解决（我可以负责任地说，装黑苹果不是好办法），<strong box-sizing:="" style="margin: 0px; padding: 0px;">不要让大家伙的工作卡在环境上，这是管理者要解决的基本问题</strong>。我见过很多非常棒的一线经理，在现实制约下，主动把自己的手机、iPad都贡献出来当做测试设备。这也是解决资源问题的一种办法哦。</p><h3>流程与标准</h3><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">你身边的人员会这么抱怨吗：</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发根本不看我们的测试用例，评审邮件从来就不回复</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">我们一报Bug，开发就说用户根本不可能这么用，还说不知道我们怎么会这么测</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">送测单里根本不写测试范围或者寥寥几句跟没写一样</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发调整设计从来也不告诉我们</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">为什么产品经理和UI只和开发讨论需求变更？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">为什么发布计划里不给测试预留测试时间？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">为什么开发写完代码测都不测就扔给我们？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">为什么客户那里发现了问题老问是谁测的、为什么没测出来？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试老是一声不吭就把Bug优先级设置为Major</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试总是把大量时间花在用户根本不可能用到的功能上</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试分不清哪些什么是重点，你给他说他还老是一堆道理这了那了</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试提的Bug，现象描述也不准确，重现步骤也没有，有的根本就知道是不是误操作</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试老来打断我，一会儿叫一下一会儿叫一下，根本没办法专注开发</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">jira上的Bug重复率太高，一个问题提N遍，难道就不能合并一下？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试发现Bug，一声招呼都不打就直接告诉老板了，搞得我很被动</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试就是专门挑刺儿的，有劲不往正地儿使，你倒是测测用户常用的功能啊</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">那么简单的Bug都能流出到用户那里，真不知道测试怎么测的</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">开发老嫌测试报告数据不漂亮，逼着我们调整</p></li></ul><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">Ok，如果你身边的开发和测试从来没有过类似的问题，那很好，恭喜你，看来你们的团队人nice协作也很顺畅，棒棒哒。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">假如你身边充斥着这样嘈杂的抱怨，那说明什么呢？开发、测试、发布这一套流程有问题？还是团队缺乏明确的指向来引导大家向积极、有效的行为靠近？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">流程和标准总是有待解释的，再好的规则，歪嘴和尚也能把它念斜&#8230;&#8230;</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">我们随便挑一个问题吧：<strong box-sizing:="" style="margin: 0px; padding: 0px;">为什么开发写完代码测都不测就扔给我们</strong>？这个问题普遍存在，它反映出的是程序员和测试人员的工作边界难以界定的矛盾。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">程序员会说，我都测一遍，还要你们测试做什么？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">测试会说，你测都不测，冒烟都过不了，有没有责任心？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">程序员说，要我写测试用例，搭各种环境，遍历各种正常、异常逻辑，我还有没有时间写代码了？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">测试会说，我们测试是垃圾桶吗，什么烂玩意儿都直接扔给我们，我们的时间就那么不值钱？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">开发会说，测试本来就是干这个的，你不测谁测？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">&#8230;&#8230;</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">像这样的问题，能制定一个标准，说明什么样的逻辑开发要自测覆盖什么样的逻辑可以交给测试来测？能画一条三八线吗？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">不能。所以，这个时候，靠谱的一线管理者就显得很重要。如何创造性的发现适合团队的方法来让大家顺畅地协同工作，比标准、制度更重要，这往往依赖于技术管理者的能力和团队成员的意识。没有普适的方法，只有适合这个组织的、此时此地的策略，加油吧，在战斗中摸索出最适合当下的道路。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">那什么是靠谱的一线管理者呢？</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">温伯格《成为技术领导者》一书中对领导职责的定义如下：</p><blockquote style="margin: 15px 10px; padding-right: 5px; padding-left: 35px; border-color: #eeeeee; color: #006600; font-size: 9pt; background-image: url(&quot;/img/blockquote.gif&quot;); background-color: #f4f5f7; background-position: 0% 0%; background-repeat: no-repeat;"><p style="margin: 0px 0px 15pt; padding: 0px;">领导的职责就是创造这样一个环境，每个人都能在其中发挥出更多的能力。</p></blockquote><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">如果一个技术领导带领的团队，大部分人都能专心做与其能力适配的事情而不用整天泡在与本节前面所列类似的问题里，那他基本上就算是比较靠谱了。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">至于像给测试预留多长的测试周期、调整设计要不要通知测试、需求调整要不要测试参与等问题，合理的流程和标准可以起到很大的辅助作用，技术领导者只要依据合理的制度，引导大家有效参与，就可以化解。</p><h3>态度</h3><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">场景一：</p><pre white-space:="" word-wrap:="" box-sizing:="" margin-top:="" margin-bottom:="" font-family:="" source="" code="" padding:="" font-size:="" line-height:="" word-break:="" color:="" border-width:="" border-top-="" :="" border-right-="" border-bottom-="" border-color:="" border-radius:="" background-color:="" style="margin-top: 10px; margin-bottom: 10px; padding: 5px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; white-space: pre-wrap; word-wrap: break-word; background: #f6f6f6;">测试MM对阿猿说发现了一个Bug。  阿猿矢口否认：不可能，绝对不可能！  MM：真的有Bug，你过来看一下！  阿猿：我都不用看，在我这儿好好儿的。  MM：你来看一下嘛&#8230;&#8230;  阿猿：看什么看，肯定你环境问题，动什么东西了吗？重启了吗？</pre><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">场景二：</p><pre white-space:="" word-wrap:="" box-sizing:="" margin-top:="" margin-bottom:="" font-family:="" source="" code="" padding:="" font-size:="" line-height:="" word-break:="" color:="" border-width:="" border-top-="" :="" border-right-="" border-bottom-="" border-color:="" border-radius:="" background-color:="" style="margin-top: 10px; margin-bottom: 10px; padding: 5px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; white-space: pre-wrap; word-wrap: break-word; background: #f6f6f6;">测试MM想在jira上提个Bug，先在QQ上对阿猿说：有个Bug，你过来看下？  阿猿：忙着呢，焦头烂额的。  MM：一分钟都用不了，你来看下吧。  阿猿：思路一打断就不好恢复了，等会儿！  MM：你不看我提到jira上了啊。  阿猿：随便，你不就是爱提Bug嘛。</pre><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">场景三：</p><pre white-space:="" word-wrap:="" box-sizing:="" margin-top:="" margin-bottom:="" font-family:="" source="" code="" padding:="" font-size:="" line-height:="" word-break:="" color:="" border-width:="" border-top-="" :="" border-right-="" border-bottom-="" border-color:="" border-radius:="" background-color:="" style="margin-top: 10px; margin-bottom: 10px; padding: 5px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; white-space: pre-wrap; word-wrap: break-word; background: #f6f6f6;">测试MM呼叫阿猿：阿猿阿猿，程序又崩溃了，快来看看！  阿猿慢腾腾地起身过来，鼠标点几下：看不出来什么问题，你怎么操作的？  MM：这样点一下，那样，这样，&#8230;&#8230;回车&#8230;&#8230;。  阿猿：重现不了啊，你想办法重现，重现了再叫我，我忙着呢。  MM：&#8230;&#8230;</pre><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">我曾经画过一张暴漫，以&#8220;<a href="http://mp.weixin.qq.com/s?__biz=MzAxMzUzNzYyNA==&amp;mid=206526175&amp;idx=1&amp;sn=3c4b5da82774d0dfa0de7fee06fa689e&amp;scene=18#rd" color:="" text-decoration:="" box-sizing:="" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;"><strong box-sizing:="" style="margin: 0px; padding: 0px;">她发现了一个Bug</strong></a>&#8221;为题发布在微信订阅号&#8220;程序视界&#8221;里，再现类似的场景，感兴趣的可以在订阅号内回复10019查看（点击订阅号底部的帮助菜单里的&#8220;所有文章&#8221;子菜单也能找到）。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">开发和测试的日常工作中，上面的情景不断上演，这其中有一部分原因来自态度。我们有时还能听到类似下面的话：</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">你Bug里的现象描述根本没用</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">你根本就没理解这个逻辑，给你说不清楚</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">测试什么都不懂&#8230;&#8230;</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">你听我的，我让你怎么测你就怎么测</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">你这种测法儿，再好的软件都经不起你折腾</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">用户根本不可能这样用，你们整来整去净瞎耽误工夫</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">一轮都没测完，你们就给老板说可以按期交付没问题？</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">你们安排计划时根本不考虑测试，三天，三天怎么可能测得完！</p></li><li style="margin: 0px; padding: 0px;"><p style="margin: 0px; padding: 0px; display: inline;">&#8230;&#8230;</p></li></ul><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">有时，有一些开发人员会用技术优势藐视测试，认为测试工作技术含量低，内心认为测试是附属没地位，说话就不太客气&#8230;&#8230;测试会感觉到，反过来也会对开发有意见&#8230;&#8230;就这么，从相敬如宾开始走向嫌怨丛生&#8230;&#8230;</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">有个朋友的QQ签名档是：<strong box-sizing:="" style="margin: 0px; padding: 0px;">没有自我，只有大道</strong>。我琢磨，放在软件项目里，也挺适用的。</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">其实，开发和测试拥有共同的目的：生产高质量软件。具体说，每一个产品、项目、版本都有明确的目标，这些目标是属于开发和测试的，是大家的。我们把共同的目标牢记在心，摆在首位，我们还要想着别人所做的一切，都是针对软件本身，都是在为目标而努力，这样就心平气和多了，就容易从当下的泥沼中超脱出来，求同存异共同前进。</p><ul box-sizing:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:=""  list-paddingleft-2"="" style="margin: 0.5em 0px 0.5em 1.5em; padding: 0px; list-style-position: inside;"></ul><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;"><strong box-sizing:="" style="margin: 0px; padding: 0px;">作者：foruok&nbsp;微信订阅号&#8220;程序视界&#8221;</strong>(programmer_sight)</p><p box-sizing:="" margin-top:="" margin-bottom:="" color:="" font-family:="" microsoft="" font-size:="" line-height:="" white-space:="" background-color:="" style="margin: 0px 0px 15pt; padding: 0px;">原文：<a href="http://blog.csdn.net/foruok/article/details/51116106" target="_blank" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;">CSDN</a></p></div><img src ="http://www.blogjava.net/paulwong/aggbug/430050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2016-04-12 11:01 <a href="http://www.blogjava.net/paulwong/archive/2016/04/12/430050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能测试资源</title><link>http://www.blogjava.net/paulwong/archive/2015/01/30/422566.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Jan 2015 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/01/30/422566.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/422566.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/01/30/422566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/422566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/422566.html</trackback:ping><description><![CDATA[<a href="http://www.360doc.com/relevant/369752956_more.shtml" target="_blank">http://www.360doc.com/relevant/369752956_more.shtml</a><br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/paulwong/aggbug/422566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-01-30 00:20 <a href="http://www.blogjava.net/paulwong/archive/2015/01/30/422566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>