??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品一区视频,国产精品小仙女,96精品久久久久中文字幕http://www.aygfsteel.com/paulwong/category/54688.htmlzh-cnSat, 22 Feb 2020 17:36:31 GMTSat, 22 Feb 2020 17:36:31 GMT60采用 jstatd 监控服务?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/paulwong/archive/2020/02/21/435144.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/435144.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2020/02/21/435144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/435144.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/435144.html</trackback:ping><description><![CDATA[<br /><a target="_blank">https://www.jianshu.com/p/97f09e1648a6</a><br /><img src ="http://www.aygfsteel.com/paulwong/aggbug/435144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2020-02-21 17:08 <a href="http://www.aygfsteel.com/paulwong/archive/2020/02/21/435144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING BOOT 环境下减中间g依赖的UNIT试http://www.aygfsteel.com/paulwong/archive/2020/02/07/435067.htmlpaulwongpaulwongFri, 07 Feb 2020 02:28:00 GMThttp://www.aygfsteel.com/paulwong/archive/2020/02/07/435067.htmlhttp://www.aygfsteel.com/paulwong/comments/435067.htmlhttp://www.aygfsteel.com/paulwong/archive/2020/02/07/435067.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/435067.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/435067.htmlSPRING BOOT 环境下,试有时会依赖于外部的中间gQ如MysqlQActivemqQMongodb{,那如何能减少q种依赖呢?
SPRING BOOT其实已经实现了自动化配置?br />

Mongodb

SPRING BOOT的自动化配置文gQorg.springframework.boot.autoconfigure.mongo.embeddedEmbedded.MongoAutoConfiguration.java

在pom.xml中新增一test profileQƈd相应jar包,q样可防止对其他profile的媄响,如果是在Eclipse跑测试,需在Project的属性中指定Active Profile为testQ以覆盖pom.xml的定义?br /> q种方式即是用SPRING DATA MONGODB的REPOSITORY也是适用的?br />
    <profile>
        <id>test</id>
        <dependencies>
            <dependency>
                <groupId>de.flapdoodle.embed</groupId>
                <artifactId>de.flapdoodle.embed.mongo</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
在application-test.yaml中添加端口,其他如IP那些信息都不需?br />
spring:
   data:
      mongodb:
         port: 27017

unit test config

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;

import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.util.FileCopyUtils;

@Configuration
@Profile({"test", "integrationTest"})
@EnableMongoRepositories(
        basePackages = {"paul.com.repository"
        }
)
public class EmbeddedDataSourceConfiguration {
    
    @Value("classpath:/initdata/USER.json")
    private Resource userResource;

    @Value("classpath:/initdata/MEMBERS.json")
    private Resource membersResource;
    
    @Autowired
    private ResourceLoader resourceLoader;
    
    @Autowired
    private DataSource dataSource;
    
    @Autowired
    private MongoTemplate  mongoTemplate;
    
    @PostConstruct
    protected void initialize() throws FileNotFoundException, IOException {
        this.initializeHsqldb();
        this.initializeMongodb();
    }
    
    private void initializeHsqldb() {
        ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
        populator.addScript(resourceLoader.getResource("classpath:/org/springframework/batch/core/schema-hsqldb.sql"));
        populator.setContinueOnError(true);
        DatabasePopulatorUtils.execute(populator , dataSource);
    }
    
    private void initializeMongodb() throws FileNotFoundException, IOException {
        this.saveResource(userResource, "USER");
        
        this.saveDocumentList(membersResource, "MEMBER");
    }
    
    private void saveResource(Resource resource, String collectionName) {
        String resourceJson = this.asString(resource);
        Document resourceDocument = Document.parse(resourceJson);
        this.mongoTemplate.save(resourceDocument, collectionName);
    }
    
    private void saveDocumentList(Resource resource, String collectionName) {
        String resourceJson = this.asString(resource);
        Document resourceDocument = Document.parse("{ \"list\":" + resourceJson + "}");
        List<Document> documentList = resourceDocument.get("list", List.class);
        documentList.forEach(document -> this.mongoTemplate.save(document, collectionName));
    }
    
    private String asString(Resource resource) {
        try (Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)) {
            return FileCopyUtils.copyToString(reader);
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
    
//    @Bean(destroyMethod="close")
//    public DataSource dataSource() {
//        BasicDataSource dataSource = new BasicDataSource();
//        dataSource.setDriverClassName(environment.getProperty("batch.jdbc.driver"));
//        dataSource.setUrl(environment.getProperty("batch.jdbc.url"));
//        dataSource.setUsername(environment.getProperty("batch.jdbc.user"));
//        dataSource.setPassword(environment.getProperty("batch.jdbc.password"));
//        return dataSource;
//    }
}

ActiveMQ

只需更改application-test.yml中的brokerUrl为vm://embedded卛_
spring:
   activemq:
      broker-url: vm://embedded?broker.persistent=false,useShutdownHook=false
      in-memory: true
      non-blocking-redelivery: true
      #packages:
        #trust-all: false
        #trusted: com.memorynotfound
      pool:
        block-if-full: true
        block-if-full-timeout: -1
        create-connection-on-startup: true
        enabled: false
        expiry-timeout: 0
        idle-timeout: 30000
        max-connections: 1
        maximum-active-session-per-connection: 500
        reconnect-on-exception: true
        time-between-expiration-check: -1
        use-anonymous-producers: true
        user: admin
        #password: ENC(hWJHuMyhydTqyF32neasTw==)
        password: admin

关系型数据库

在application-test.yml中的数据库信息删除,同时在pom.xml中添加jar包依赖,q边是采用HSQL数据?br />
    <profile>
        <id>test</id>
        <dependencies>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>

非SPRING BOOT/SPRING的纯JDK环境可参?br /> https://github.com/yandex-qatools/embedded-services

https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo

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

ActiveMQ:
https://memorynotfound.com/spring-boot-embedded-activemq-configuration-example/

paulwong 2020-02-07 10:28 发表评论
]]>
Z么开发与试老掐架呢http://www.aygfsteel.com/paulwong/archive/2016/04/12/430050.htmlpaulwongpaulwongTue, 12 Apr 2016 03:01:00 GMThttp://www.aygfsteel.com/paulwong/archive/2016/04/12/430050.htmlhttp://www.aygfsteel.com/paulwong/comments/430050.htmlhttp://www.aygfsteel.com/paulwong/archive/2016/04/12/430050.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/430050.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/430050.html

让我们思考几个常见的问题Q?/p>

  • 软g试的目的是什么?

  • 开发h员能否构建出没有Bug的完YӞ

  • h人员和开发h员是什么关p?

  • 软g试能否保证软g质量Q?/p>

先闭目冥想五分钟吧,然后可以试着回答上面的问题?/p>

计算机先?Maurice Wikes 回忆?1949 q他在英国剑桥工作的情ŞQ在拖着打孔U带上楼l雏形计机 EDASC 装蝲E序Ӟ他看C自己的未来:

我强烈的意识刎ͼ生命中剩下的好日子,都将耗费在给自己的程序找错误上头?/p>

Maurice Wikes告诉我们Q没有完的软g?/p>

我曾l写q一荐书文Q推荐了温伯格技术思想三部曲中的?a color:="" text-decoration:="" box-sizing:="" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;">颠覆完美软gQY件测试必ȝ道的几g?/strong>》。在q本书里Q温伯格也告诉我们,没有完美的Y件。所有的开发和试人员都应该读读那本书?/p>

温伯格在《颠覆完Y件》中几乎讨论所有常见的与Y件测试相关的概念、问题和指导思想Q所以,在这文章里Q我只能来吐槽啦Q我从以下几方面列一些常见的现象Q希望能引v大家的思考?/p>

  • 试和开发的关系

  • 程与标?/p>

  • 资源

  • 态度

试和开发的关系

试和开发是对立的吗Q?/p>

从处理Bug的角度看Q似乎可以这么说?strong box-sizing:="" style="margin: 0px; padding: 0px;">开发h员既生代码Q也生Bug。因为开发h员不可避免地会生产BugQ所以测试h员必d在,以便在Y件交付之前尽可能多地出BugQ保证交付给客户的Y件质量更好一些。一个BugQ一个挑B(ti)ugQ看hg是对立的?/p>

在现实中Q很多测试团队和开发团队也正是因ؓq一点而搞得关pM和,甚至真的对立h。请回想一下你周围发生的与开发和试相关的事儿,看看有没有遇到过下面的情景:

  • 开发说Q测试净N烦,客户跟本不可能像他们那样使用软g

  • 试_问题L会在看似极端的条件下产生Q用hL会不l意触碰到看似极端的不可能出现的条g

  • 开发说Q测试花在异常情况下的精力比试LE还多,不知道轻重缓?/p>

  • 试_开发从来不考虑试的感受,q测都不就扔给我们

  • 开发说Q我都测了,q要试人员q什?/p>

  • 试_q么明显的问题你们都不测一下,把我们测试当垃圾桶啊

  • ……

许许多多cM的问题,让开发和试的关pM扑朔qL、相q杀走向对立。我见过开发和试搞冷战某人遇见某Z脸而过Q也见过试l理和开发经理打Ӟq见q高层领导故意让试团队和开发团队关pȝ张以样可以提高测试效率也能给开发压力最l会产出更高质量的Y?#8230;…

实际上,试和开发拥有同一个目的:让Y件更完美。测试和开发的关系Q是一个问题的两面Q应该是相辅相成和^共处的。测试不是ؓ了挑刺儿Q他提出的问题也不针对生产Y件的开发h员,而仅仅是在努力想让开发h员的产出物看h更好用。只要开发不测试提Bugq个行ؓ看成针对个h的行为,一切就有了好的前提?/p>

否定软gQƈ不是否定开发Y件的?/strong>。这是开发和试都需要明的一个原则和前提?/p>

q有的h认ؓ开发和试之关pȝ似皮与毛Q皮之不存毛焉附?所以有的开发也会因此而有优越感:没我们写软gQ你们测试早下岗了!可是Q开发不写YӞ开发也下岗了Ӟ

感谢开发的不完,让测试可以有事可做ƈl就慧眼?/p>

感谢试的认真细致和耐心体脓(chung)Q让开发可以发现自q不完ƈ有机会提升自?#8212;—那些说我软g不好的,都是Z我好?/p>

资源

别动我们试的服务器Q你们自己搭一个!

我们没环境,不用你们的用谁的Q?/p>

谁把我们的测试手机拿CQ你们申请一个嘛Q老来占我们设备?/p>

谁在用我们的账号Q招呼都不打Q我要用Q赶紧退出来Q?/p>

有时开发和试之间也会有资源上的冲H,要有努力的有创造性的解决Q我可以负责d_装黑Ҏ(gu)不是好办法)Q?strong box-sizing:="" style="margin: 0px; padding: 0px;">不要让大家伙的工作卡在环境上Q这是管理者要解决的基本问?/strong>。我见过很多非常的一U经理,在现实制U下Q主动把自己的手机、iPad都A献出来当做测试设备。这也是解决资源问题的一U办法哦?/p>

程与标?/h3>

你n边的人员会这么抱怨吗Q?/p>

  • 开发根本不看我们的试用例Q评审邮件从来就不回?/p>

  • 我们一报BugQ开发就说用h本不可能q么用,q说不知道我们怎么会这么测

  • 送测单里Ҏ(gu)不写试范围或者寥寥几句跟没写一?/p>

  • 开发调整设计从来也不告诉我?/p>

  • Z么品经理和UI只和开发讨论需求变_

  • Z么发布计划里不给试预留试旉Q?/p>

  • Z么开发写完代码测都不就扔给我们Q?/p>

  • Z么客户那里发C问题老问是谁的、ؓ什么没出来?

  • 试老是一C吭就把Bug优先U设|ؓMajor

  • 试L把大量时间花在用h本不可能用到的功能上

  • 试分不清哪些什么是重点Q你l他说他q老是一堆道理这了那?/p>

  • 试提的BugQ现象描qC不准,重现步骤也没有,有的Ҏ(gu)q道是不是误操?/p>

  • 试老来打断我,一会儿叫一下一会儿叫一下,Ҏ(gu)没办法专注开?/p>

  • jira上的Bug重复率太高,一个问题提N遍,N׃能合q一下?

  • 试发现BugQ一声招呼都不打q接告诉老板了,搞得我很被动

  • 试是专门挑刺儿的Q有劲不往正地儿Q你倒是测用户常用的功能啊

  • 那么单的Bug都能出到用户那里,真不知道试怎么的

  • 开发老嫌试报告数据不漂亮,逼着我们调整

OkQ如果你w边的开发和试从来没有q类似的问题Q那很好Q恭喜你Q看来你们的团队人nice协作也很畅Q棒哒?/p>

假如你n边充斥着q样嘈杂的抱怨,那说明什么呢Q开发、测试、发布这一套流E有问题Q还是团队缺乏明的指向来引导大家向U极、有效的行ؓ靠近Q?/p>

程和标准L有待解释的,再好的规则,歪嘴和尚也能把它忉|……

我们随便挑一个问题吧Q?strong box-sizing:="" style="margin: 0px; padding: 0px;">Z么开发写完代码测都不就扔给我们Q这个问题普遍存在,它反映出的是E序员和试人员的工作边界难以界定的矛盾?/p>

E序员会_我都一遍,q要你们试做什么?

试会说Q你都不测Q冒烟都q不了,有没有责dQ?/p>

E序员说Q要我写试用例Q搭各种环境Q遍历各U正常、异帔R辑Q我q有没有旉写代码了Q?/p>

试会说Q我们测试是垃圾桶吗Q什么烂玩意儉K直接扔给我们Q我们的旉那么不值钱Q?/p>

开发会_试本来是q这个的Q你不测谁测Q?/p>

……

像这L问题Q能制定一个标准,说明什么样的逻辑开发要自测覆盖什么样的逻辑可以交给试来测Q能M条三八线吗?

不能。所以,q个时候,靠谱的一U管理者就昑־很重要。如何创造性的发现适合团队的方法来让大安畅地协同工作Q比标准、制度更重要Q这往往依赖于技术管理者的能力和团队成员的意识。没有普适的Ҏ(gu)Q只有适合q个l织的、此时此地的{略Q加油吧Q在战斗中摸索出最适合当下的道路?/p>

那什么是靠谱的一U管理者呢Q?/p>

温伯根{成为技术领D》一书中寚wD责的定义如下Q?/p>

领导的职责就是创造这样一个环境,每个人都能在其中发挥出更多的能力?/p>

如果一个技术领导带领的团队Q大部分人都能专心做与其能力适配的事情而不用整天在与本节前面所列类似的问题里,那他基本上就是比较靠谱了?/p>

至于像给试预留多长的测试周期、调整设计要不要通知试、需求调整要不要试参与{问题,合理的流E和标准可以起到很大的辅助作用,技术领D只要依据合理的制度Q引导大家有效参与,可以化解?/p>

态度

场景一Q?/p>

试MM寚w猿说发现了一个Bug? 阿猿矢口否认Q不可能Q绝对不可能Q? MMQ真的有BugQ你q来看一下!  阿猿Q我都不用看Q在我这儿好好儿的? MMQ你来看一下嘛……  阿猿Q看什么看Q肯定你环境问题Q动什么东西了吗?重启了吗Q?/pre>

场景二:

试MM惛_jira上提个BugQ先在QQ上对阿猿_有个BugQ你q来看下Q? 阿猿Q忙着呢,焦头烂额的? MMQ一分钟都用不了Q你来看下吧? 阿猿Q思\一打断׃好恢复了Q等会儿Q? MMQ你不看我提到jira上了啊? 阿猿Q随便,你不是爱提Bug嘛?/pre>

场景三:

试MM呼叫阿猿Q阿猉K猿,E序又崩溃了Q快来看看!  阿猿慢腾腑֜赯nq来Q鼠标点几下Q看不出来什么问题,你怎么操作的?  MMQ这L一下,那样Q这P……回R……? 阿猿Q重C了啊Q你惛_法重玎ͼ重现了再叫我Q我忙着呢? MMQ?#8230;…

我曾l画q一张暴漫,?#8220;她发C一个Bug”为题发布在微信订阅号“E序视界”里,再现cM的场景,感兴的可以在订阅号内回?0019查看Q点击订阅号底部的帮助菜单里?#8220;所有文?#8221;子菜单也能找刎ͼ?/p>

开发和试的日常工作中Q上面的情景不断上演Q这其中有一部分原因来自态度。我们有时还能听到类g面的话:

  • 你Bug里的现象描述Ҏ(gu)没用

  • 你根本就没理解这个逻辑Q给你说不清?/p>

  • 试什么都不懂……

  • 你听我的Q我让你怎么你怎么?/p>

  • 你这U测法儿Q再好的软g都经不v你折?/p>

  • 用户Ҏ(gu)不可能这LQ你们整来整d瞎耽误工夫

  • 一轮都没测完,你们q老板说可以按期交付没问题Q?/p>

  • 你们安排计划时根本不考虑试Q三天,三天怎么可能得完!

  • ……

有时Q有一些开发h员会用技术优势藐视测试,认ؓ试工作技术含量低Q内心认为测试是附属没地位,说话׃太客?#8230;…试会感觉到Q反q来也会对开发有意见……p么,从相敬如宑ּ始走向嫌怨丛?#8230;…

有个朋友的QQ{֐档是Q?strong box-sizing:="" style="margin: 0px; padding: 0px;">没有自我Q只有大?/strong>。我琢磨Q放在Y仉目里Q也挺适用的?/p>

其实Q开发和试拥有共同的目的:生高质量Y件。具体说Q每一个品、项目、版本都有明的目标Q这些目标是属于开发和试的,是大家的。我们把共同的目标牢记在心,摆在首位Q我们还要想着别h所做的一切,都是针对软g本nQ都是在为目标而努力,q样心qx和多了,容易从当下的惔g脱出来Q求同存异共同前q?/p>

    作者:foruok 微信订阅?#8220;E序视界”(programmer_sight)

    原文Q?a target="_blank" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;">CSDN



    paulwong 2016-04-12 11:01 发表评论
    ]]>性能试资源http://www.aygfsteel.com/paulwong/archive/2015/01/30/422566.htmlpaulwongpaulwongThu, 29 Jan 2015 16:20:00 GMThttp://www.aygfsteel.com/paulwong/archive/2015/01/30/422566.htmlhttp://www.aygfsteel.com/paulwong/comments/422566.htmlhttp://www.aygfsteel.com/paulwong/archive/2015/01/30/422566.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/422566.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/422566.htmlhttp://www.360doc.com/relevant/369752956_more.shtml







    paulwong 2015-01-30 00:20 发表评论
    ]]>
    վ֩ģ壺 ̩| ɼ| ¤| | ˳| ĩ| ǰ| | ɫ| Դ| ױ| ѳ| ˫Ѽɽ| | | | ٷ| | ˮ| | | | | | Ͷ| | Ͳ| | ®| | Ϫ| | ƽɽ| Ϫ| ʯɽ| | Ͻ| | | е| ϼ|