- 博客(69)
- 资源 (10)
- 收藏
- 关注
原创 异步操作校验工具awaitility源码分析
1. 背景之前介绍了一篇awaitility快速入门的文章:异步校验工具awaitility快速入门,该工具很好地解决了校验异步操作的问题,其中封装了很多便捷的用法,重点是在规定时间内,轮询结果;本文以源码的方式,介绍一下工具内部是怎么实现的,理解开发的设计思路,对以后解决工作中的问题是有帮助的。2. 核心源码梳理2-1. 例子 // 异步任务,每隔1s, count累加1 class
2017-02-21 21:13:21
1330
原创 异步操作校验工具awaitility快速入门
1.背景在编写自动化测试用例过程中,往往会遇见被测代码有异步或者队列处理的中间过程;如果需要校验这部分结果,必须等待异步操作结束或队列消费完,而这个中间需等待的时间不确定,常常是根据经验值设定,通过Thread.sleep(经验值),而这个时间通常设置成最长的那次时间,但是可能99%都低于这个最长的时间,这就造成了每次执行这个测试用例是花费最长的时间。现介绍一款开源工具awaitility,该工具提
2017-02-12 21:00:39
3061
原创 nGrinder二次开发之监控机器性能数据
1.背景做性能测试时,统计性能数据分为被压系统的数据和被压系统所在机器的数据,被压系统所在机器的数据主要包括CPU利用率、内存使用率、网络IO、磁盘IO和负载load;nGrinder默认只收集CPU, Memory, Received Byte/s, Sent Byte Per Secode/s,同时支持自定义数据收集,之前介绍过相关内容:nGrinder对监控机器收集自定义数据及源码分析。展示自
2016-12-28 15:52:34
2864
1
原创 Jenkins BlueOcean初探
1. BlueOcean UI是什么?Jenkins是一款Java开发的跨平台持续集成和持续发布的开源系统,具有如下特征: 安装及迁移方便:安装直接部署war包,迁移只需替换JENKINS_HOME目录。 配置方便:可视化后台操作。 丰富的插件生态圈:比如git, junit, jacoco等。 可扩展:自定义插件。 分布式:支持Master-Slave。 Jenki
2016-12-14 20:07:08
15522
2
原创 代码静态分析工具Infer实践
0.背景静态代码分析可以提高代码质量和尽早的发现bugs,减少排查问题的时间。Infer是facebook开源的一款代码静态分析工具,现支持的语言有Java、Objective-C、C和C++; 对Android和Java代码可以发现null pointer exceptions和resource leaks等;对iOS、C和C++代码可以发现memory leak等。谁在使用,facebook、i
2016-12-04 18:26:26
6541
翻译 Google Testing on the Toilet系列---好的端对端测试是什么
端对端测试会从一个端到另一个端,测试你的整个系统,不同端之间处理任何数据都认为是一个黑盒。端对端测试能从你整个系统中捕获到bugs。除了单元测试和集成测试,端对端测试是一个衡量测试的关键部分,在近似生产环境下,对你的系统质量有足够的信心。不幸的是,端对端测试相比单元测试或集成测试速度更慢,更不可靠和维护成本更高。需认真考虑端对端测试是否值得,如果觉得值得,那么怎么写最佳的端对端测试呢?让我们来思考下
2016-11-27 19:08:08
1385
原创 Elastic 5.0实践---远程日志查看工具watchlog
0. 背景日常测试中,有些测试提案需要查看日志进行校验,日志往往在开发部署的机器上,而测试人员没有开发机器的登入权限,经常是要求开发给token登上开发的机器去查看日志,如果测试时间较长,中途通道机断了,经常要开发重新给token;效率较低,从而有了远程日志查看工具watchlog。watchlog是基于Elastic Stack中三个组件: Filebeat、Elasticsearch、Kiban
2016-11-17 16:23:31
6434
原创 Jenkins RESTful API定制化
api账号:jenkins_root/jenkins_pwd1.背景Jenkins具有丰富的插件生态,足以满足我们日常工作的需求;如果我们想通过具体的Jenkins任务直接对外提供服务,而我们不想将内部的具体实现对外暴露(否则,需添加对应的用户权限,通过页面执行job);可以对外直接提供接口,第三方直接调用接口(比如提供给开发,提测前回归冒烟用例集),执行相应的Jenkins任务并获取任务结果。2.
2016-10-06 00:22:02
13811
6
原创 基于Docker集群的分布式测试系统DDT(DockerDistributedTest)
1.背景当自动化用例累积的越来越多,回归自动化用例的时间越来越长。我们往往会选择使用多线程的方式来跑用例集,但是用例数量达到一定数量级(千级以上)后,在单台机器上使用多线程(千级以上)直接影响到机器性能,能不能组成并行加并发的模式跑用例,自动将用例集拆分成更细粒度的子集,将子集在单独的容器内(容器可以部署在多台机器上)内并发执行。1-1.业内工具调研Selenium grid参见:https://g
2016-08-19 17:05:59
3450
原创 解决nGrinder僵死任务的方案
1.背景ngrinder作为一款开源的性能测试工具极大地满足了日常性能测试工作,但在某些极端情况下会出现任务僵死状态,无法正常终止或删除僵死任务,这些极端情况包括:性能测试脚本有问题,未进行脚本校验就直接绑定压测场景;压测过程中agent服务变成不可用等;这种僵死任务直接导致。2.问题描述复现问题: 1. 性能脚本有问题,性能脚本并未验证通过,直接在测试场景中绑定该脚本, 执行任务无法终止。
2016-06-16 15:42:58
1387
原创 断言神器AssertJ快速入门
1.背景在设计自动化cases时,遵守的核心原则是3A(Arrange-> Actor ->Assert)原则; 断言工具的强大直接影响到用例的执行效率,本文将介绍一种流式断言神器:AssertJ。在JAVA cases中常用的断言工具有JUnit自带的Assert,还有hamcrest的assertThat(之前总结过http://blog.csdn.net/neven7/article/deta
2016-05-18 23:04:28
12771
4
原创 基于线上请求的性能测试系统CPC
1.背景测试人员在设计性能测试脚本时,HTTP请求中的参数往往根据个人经验设置,而测试人员水平参差不齐,设计往往具有局限性,不够全面,不能涵盖全线上真实的请求,故得到的性能测试结果不能够真实反映线上真实的情况。使用线上环境下的HTTP请求检查软件性能的问题,通过Gor记录线上真实的请求,作为性能测试脚本的请求池,用请求池物料进行性能测试,能真实的反映软件系统在线上环境下的性能指标和问题。2.概念2-
2016-05-06 21:31:06
4593
原创 Application Performance Management工具之pinpoint
1.背景知识Application Performance Management是什么?维基百科: In the fields of information technology and systems management, Application Performance Management (APM) is the monitoring and management of perfor
2016-04-02 12:59:00
12131
原创 数据可视化之Grafana-Table Panel
1.背景传统的可视化展示是折线图,是否有一种更直观的方式,去展示数据,本文将介绍Grafana的Table Panel展示方式,将数据用表格展示,值在不同区间,用不同颜色填充表格,超过不同阈值时,能迅速的判断当前状态。2.实现技术栈:数据可视化: Grafana:https://github.com/grafana/grafana(依赖:GO 1.5,NodeJS 需自行安装)数据源: Infl
2016-04-01 18:22:19
45752
原创 nGrinder源码分析:自动中断测试任务
1.背景在运行nGrinder任务时,会出现任务被系统中断,为什么会自动中断呢?是bug还是一种保护机制?本文通过源码分析的方式来解读。2.源码分析之前的一篇文章:性能测试工具 nGrinder 项目剖析及二次开发,介绍了nGrinder的整体架构,知道ngrinder-core/src/main/java/net/grinder/SingleConsole.java是将测试脚本发布到Agent并在
2016-03-13 10:09:45
2025
原创 nGrinder源码分析:详细报告页数据展示
0.背景当你查看nGrinder详细报告页,会展示性能数据结果和时序图,这些内部是怎么实现的呢?本文将分析源码,给你一个清晰的认识。1.源码分析当你请求http://ip/perftest/{ip}/perftest/{id}/detail_report 查看详细报告页时,Controller端将请求转给perftest/detail_report模板(ngrinder-controller/sr
2016-03-09 15:10:53
3720
原创 nGrinder对监控机器收集自定义数据及源码分析
0.背景性能测试工具nGrinder支持在无需修改源码的情况下,对目标服务器收集自定义数据,最多支持5类;在性能测试详细报告页,目标服务器->你的机器ip便签页下,默认只收集CPU, Memory, Received Byte/s, Sent Byte Per Secode/s等4类数据;可能你还需要监控其它的性能统计数据,用于分析(比如load, Full Gc);本文先介绍实现方法;再分析nGr
2016-03-02 19:31:46
4301
1
原创 性能测试工具 nGrinder 项目剖析及二次开发
0.背景组内需要一款轻量级的性能测试工具,之前考虑过LR(太笨重,单实例,当然它的地位是不容置疑的),阿里云的PTS(https://pts.aliyun.com/lite/index.htm, 仅支持阿里云内网和公网机器),Gatling(http://gatling.io/#/,无TPS数据)等等,不适合我们;nGrinderr是NAVER(韩国最大互联网公司NHN旗下搜索引擎网站)开源的性能测
2016-02-25 21:09:36
16452
20
原创 Fake API工具:interfake快速入门
1.interfake是什么? Interfake is a tool which allows developers of client-side applications of any platform to easily create dummy HTTP APIs to develop against. Interfake能简便地创建虚假的HTTP API, Interfake是Nod
2016-02-16 15:31:10
2027
原创 nGrinder工具进行接口性能测试
1.背景之前在这篇文章中性能测试初探—接口性能测试介绍过nGrinder,本文将介绍在nGrinder脚本中使用资源文件中数据作为接口参数和解析生成的CSV结果,生成TPS标准差,TPS波动率,RT 30/50/70/90百分位数(原生结果中无这些结果,这些结果更有利于性能分析)。2.实现2-1.创建脚本 如果脚本中需获取参数,可以使用Performance Test菜单下的Test Config
2016-02-15 20:16:45
7900
原创 命令行下JSON处理工具:jq
jq工具 1.背景 接口返回的数据类型基本是JSON, 在命令行获取到接口返回的数据,往往是一大堆数据,怎样在一大堆数据中只想获取到我想要的数据,就需要一个特定的工具:jq,格式化输出,方便校验。2.jq是什么 jq是轻量级和便捷的命令行JSON解析器。jq is like sed for JSON data - you can use it to slice and filter and m
2016-02-02 23:43:06
4985
2
原创 HTTP引流工具Gor快速入门
0.背景校验系统的正确性和可靠性时,仅靠用例场景无法覆盖全生产环境下的所有场景,需要一套引流工具,在系统正式上线前,用线上的请求测试待上线系统,在正常请求下,是否有报错;在数倍请求下,系统的性能瓶颈。引流工具有gor, tcpcopy等,下面介绍gor(实践较为成熟,包括亚马逊使用该工具),因为其易上手,且功能比较全。1.golang环境1-1.下载gohttps://golang.org/dl/
2016-01-30 23:13:32
8120
原创 记问题排查:java进程未正常退出
未读池重试结果无法响应1.现象运行一Java代码(工具类,执行特定JUnit失败用例),出现执行用例结束,但无法退出。2.排查问题排查工具使用:VisualVM,jstat, jstack查看gc:[root@10 WeTest]# jstat -gcutil 23726 250 30 S0 S1 E O P YGC YGCT
2016-01-23 18:52:51
3133
1
原创 自定义ant junit report报告
一.需求ant junitreport内生的报告中TestCase部分,只包含4部分:Name, Status, Type, Time(s), 分别代表方法名,运行结果,失败信息,运行时间,如下: 但是仅靠Type信息(只打印assertThat错误信息:期望和实际,错误堆栈),无法确认用例具体的失败,只能回到测试工程重新执行用例,再定位失败原因; 故新增CASEID和CASEDESC分别描述
2015-12-28 22:05:53
3633
1
原创 Java多线程笔记总结
1.线程的三种创建方式参考之前的总结: 多线程-创建线程的三种方式对比三种方式:通过继承Thread类实现通过实现Runnable接口实现Callable接口第1种方式无法继承其他类,第2,3种可以继承其他类;第2,3种方式多线程可以共享同一个target对象,多个线程处理同一个资源;一般使用第2,3种方式创建线程。2.线程的生命周期1.新建(new) 2.就绪(start) 3.运行(获得
2015-12-22 10:05:55
1940
原创 JDBC笔记总结
JDBC: Java DataBase Connectivity, Java数据库连接API,通过执行SQL语句对数据库进行查询,修改等操作。1.JDBC APIDriverManager:管理JDBC驱动的服务类,getConnection()获得数据库的连接Connection对象。 /** * @param user the database user on whose
2015-11-26 10:08:35
1058
原创 ELK日志监控
1.Elasticsearch 2.0.0 Install1-1.下载文件到本地:https://www.elastic.co/downloads/elasticsearchwget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.0
2015-11-23 17:14:18
2013
原创 maven-surefire-customresult插件
背景:自定义输出mvn surefire结果, 默认的结果只有Failed 和 Error的失败信息,并且打印的结果格式多样,不方便结果统计和正则匹配失败用例。默认surefire插件输出结果几种常见的格式: AccountUpdatePrivacyCommentTest.setUpBeforeClass:69 1 AccountUpdatePrivacyCommentTest.testAtt
2015-11-12 18:42:41
885
4
原创 Java Io 笔记总结
1.File类java.io.File类用来操作文件和目录,比如:获取文件和目录路径,属性判断,新建文件或目录,查看子文件等。File类不能访问文件本身的内容,需使用I/O流处理。通过构造函数(共有6个构造函数),创建一个File实例:File file = new File(String pathname); // pathname为文件路径字符串常用的File类方法:boolean exists
2015-11-12 10:50:25
655
原创 Mysql优化
MySQL的变量分为以下两种:1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看 2)状态变量:监控MySQL服务器的运行状态,可以用show status查看系统变量系统变量按其作用域的不同可以分为以下两种:1)分为全局(GLOBAL)级:对整个MySQL服务器有效2)会话(SESSION或LOCAL)级:只影响当前会话有些变量同时拥有以上两个级别,MySQL将
2015-11-09 15:46:24
440
原创 WeTest 接口自动化测试框架
一.简介 WeTest是处理API接口测试的轻量级自动化测试框架,java语言实现,采用JUnit4开源框架,支持Ant/Maven执行方式。 工具特点: 1.支持suite,根据JUnit4测试类名正则匹配,聚合相同模块的用例,运行单个聚合类即可实现运行一个模块所有的用例; 2.支持测试类和方法级别用例并发执行,缩短执行时间(用例间需线程安全); 3.支持失败重试,包括执行
2015-10-28 22:25:46
5518
4
原创 性能测试初探---接口性能测试
1.性能指标PV: PageView, 页面浏览量或点击量,用户每次刷新即被计算一次;用户的一次刷新,给服务器造成了一次请求。UV: UniqueVisitor, 访问你网站的一台计算机客户端为一个访客,0:00 - 24:00 内相同的客户端仅记一次。TPS: Transaction Per Second 每秒系统处理的交易或事物的数量,衡量系统处理能力的重要指标。RT: 响应时间,从客户端发送一
2015-10-07 22:07:26
17820
原创 JUnit4执行cases背后的故事(2)---默认执行器BlockJUnit4ClassRunner源码分析
(1)背景:之前《JUnit4执行cases背后的故事(1)—JUnitCore源码分析》介绍了JUnit4执行测试用例默认的执行器是BlockJUnit4ClassRunner,它内部是怎么实现的呢?本文将介绍该执行器执行流程,并会举个实例,继承BlockJUnit4ClassRunner,自定义执行器。(2)org.junit.runners.BlockJUnit4ClassRunner是什么?
2015-10-05 22:24:03
2875
3
原创 maven surefire 插件源码修改,自定义输出格式
一.背景在使用maven surefire插件命令:mvn test -Dtest=测试类进行测试时,对于stdout信息进行识别能迅速的发现问题,当你某个suite类聚合了几千个用例时,失败数往往有几十甚至上百(虽然surefire支持运行中重试,但几千个用例同时运行时,同时申请资源,比如测试账号时,资源不够;或者并发量太大,测试环境web容器扛不住等),而surefire生成的stdout Re
2015-09-09 16:45:19
2288
原创 shell中的数组操作
1.数组定义:shell使用一对括号表示数组,数组元素间用”空格”分隔# 空数组arr1arr1=()# 数组arr2,成员分别是1, 2, 3, 4, 5, 6arr2=(1 2 3 4 5 6)2.数组元素读取,格式:${数组名[下标]},下标从0开始,下标为*或@代表整个数组内容[root@10 ~]# echo ${arr2[0]}1[root@10 ~]# echo ${arr2[
2015-08-31 16:29:44
9191
1
原创 sonarQube代码质量管理
SonarQube is an open platform to manage code quality.7个维度管理源码:source code:https://github.com/SonarSource/sonarqubesonarQube组件:1.One DB to store: the configuration of the SonarQube instance the quality
2015-08-10 22:21:14
1352
原创 java正则匹配
在java.util.regex包下,包括如下:接口 MatchResultPatternSyntaxException 异常类枚举类 UnicodeProp 定义了枚举对应特定的操作ASCII 定义了一些常量Pattern 正则表达式的编译对象Matcher 实现了接口 MatchResult主要使用Pattern, Matcher1.PatternPattern类没有任何的public con
2015-07-23 10:00:29
955
原创 使用JSONObject和JSONArray
JSONObjectJSONObject是一个无序的键值对集合。值可以是任意类型:Boolean,JSONArray,JSONObject,Number,String,or the JSONObject.NULL Object.形如:“` http://maps.google.com/maps/api/geocode/json?sensor=false&address=beijing 返回如下:
2015-07-07 23:48:09
1355
原创 JUnit4执行cases背后的故事(1)---JUnitCore源码分析
JUnit执行cases背后的故事—JUnitCore源码分析(1)背景:平常我们执行JUnit用例时,可以使用命令行或在IDE中使用Run As: JUnit Test,直接得到测试结果;但是背后的执行过程是怎么样的,值得我们深思,理解框架代码逻辑,有助于更好的使用该框架(或二次开发),本文将通过分析JUnitCore.java源码一一道来。(2)org.junit.runner.JUnitCor
2015-06-28 23:58:26
3621
2
原创 浅克隆与深克隆
1.浅克隆(shallow clone)被复制对象的所有基础类型变量(byte,short,int,long,char,boolean,float,double)与原有对象中变量具有相同的值,修改其值不会影响原对象;而复制对象中引用类型(数组,类对象等)还是指向原来对象,修改其值会影响原对象。2.深克隆(deep clone)被复制对象的所有基础类型变量(byte,short,int,long,ch
2015-06-12 19:13:12
718
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人