1.简要说明
每日通过眼睛检查app和web的数据,耗时耗力,也不可能把所有的对象全部仔细检测一遍。所以萌生通过自动化手段,自动定时监控运营数据。
2.为什么选择运营环境
运营环境(也称为线上环境或者正式环境)出现的问题,几乎全是后端网元错误。选择运营环境而不选择测试环境,因为运营环境稳定(极少故障和重启)、数据最真实(测试环境很多垃圾数据),所以也就最能发现系统问题。
3.程序说明
3.1.原理
httpclient负责和服务器进行通讯(发送和接受数据),json-lib负责解析json报文,junit负责对解析的报文数据解析断言判断,svn是项目源码仓库,ant负责构建项目,hudson负责进行持续集成。 当junit断言出现失败的时候,触发邮件通知,根据log,反向查找问题,从而定位问题原因。
3.2.运行逻辑
根据配置文件中提供的用户名,循环检查此用户名下面的所有对象信息。同时外面有一个大循环,把登陆的用户名数组化,这样就可以实现同时检测多个用户下面的多个对象。
同时增加一个黑名单功能,把不想检测的对象,加入到黑名单中,避免因为一个对象断言失败而导致的跳出整个测试方法。
3.3.处理的事务
Json报文的发送和接受(httpclient)
Json报文的解析(json-lib)
断言(junit)
Log的处理(log4j)
字符串的截取(java.lang.String)
日期信息的处理(java.util.Date、java.text.DateFormat)
变量类型的转型
代码仓库(svn)
自动构建(ant)
持续自动集成(hudson)
...............
4.运行说明
4.1.单独运行
以juni方式,单独运行java类,可以生成log
4.2.自动构建
使用ant构建,除了生成log之外,还可以生成测试报告(html、xml形式)
4.3.持续集成
通过与hudson集成,hudson连接svn,通过ant构建,定时自动执行job(目前每半小时会分别执行一次),除了生成log、测试报告之外,还可以发送邮件。
5.遇到的问题
5.1.遍历json报文
Json报文层次多,遍历某个层次困难。
通过把返回的json报文,一层层分解组成新的json,直到需要遍历的一层。然后通过赋值给list,循环遍历
5.2.Ant构建
引用的jar包文件名错误(粗心所致);
ant构建后,无log打出(未copy不需要编译的配置文件到class文件夹);
ant构建后,log打印出的中文乱码(以juni方式运行,log打印正常,以ant方式,log却是乱码,同一个配置文件。应该是ant对log4j支持不好导致,最后在配置文件中设置了运行编码解决);
5.3.Hudson集成
执行job的时候,输出不了junit报告(配置路径错误导致)
邮件发送失败(没有配置Unstable方式也发送邮件)
6.图例
Log显示:
Hudson构建:
断言未通过或者构建失败的邮件:
7.目前通过程序发现的问题
已经发现包括API接口、网关、甚至硬件的几十个问题。以及数次服务器当机的及时检测。
8.主要断言
略