自动抓error log并发送邮件通知

日志表很是具有参考价值,有时候UI上风平浪静,看似正常,后台日志表里风起云涌error一堆堆。测试人员在验证某个功能时有时候会忘记去查对应的日志表。

所以TruView核心工程组组的Delivery Lead要求测试人员每天查询固定的5张log表,将各个表的error log汇总(绘制成5个表格)然后邮件给团队。由于每天的error log会有重复,并且今天查到某个ID(截止到某个ID)要记录下来,明天接着这个ID往后查。我觉得是个挺繁琐的活儿,于是花了两天时间写了个工具(java + maven)来做这些事儿。

首先,我设计了一个Excel表格形式的配置文件

  • SQL Query: 第一个sheet里定义各个表的query语句(不接受select * from…写明具体要看哪些column),并且定义基于哪个column来排除重复的记录。Query的where子句第一个条件就是[datetime] > dateadd(d, [dateadd], getdate()),其中**[dateadd]**是一个关键字,代码会根据今天是礼拜一还是别的来将它替换成-3或者-1,也就是说礼拜一查询前3天的,别的工作日查询前一天的
  • DB Conn:第二个sheet里定义要连接的DB及用户名和密码(加密后的密码)
  • 收件人列表

工具的构成大概如下:

  • apache poi读配置文件,构建ToolConfig对象
  • JDBC连接数据库,查询error log
  • 根据ToolConfig对象的某些属性构建EmailUtil对象,然后基于EmailTemplate.html + DB查询结果来生成html格式的邮件内容,并且在这里利用Set.add()来排除重复记录。实际上,现在我觉得在第二步DB查询时就应该排除重复记录,更加节约内存。

为了生成格式好看的邮件出来,可是费了一番功夫。我司用的outlook邮箱客户端。我先将QA发出来的很好看的邮件转存成html文件,然后将里面表格实际内容全部删掉,作为邮件模板。由于自己的机器调用我司SMTP服务器会被拒绝(产品服务器在白名单里,可以通过SMTP服务器发送邮件),所以没办法在调试代码时从自己的机器上发邮件出来。想了又想了,有招儿了,将生成的Html内容写入到一个.html文件里,IE打开文件预览格式。尽管如此我发觉,IE里看到的效果和最后邮箱收到的还是有差异。

最后用Maven把工具打包成jar文件,写了个.bat导入脚本执行这个jar包,在服务器上增加了一个task schedule, 每个工作日的上午九点执行。

工具做好后运行起来,效果很好。TruView二把手知道后,要我把别的4张日志表也加进去,并且邮件要发给全员。然后,又要我写个详细的说明文档,把工具部署到UAT环境里去。

很开心能将繁琐的手工活儿用工具来替代。这大概就是自动化的部分意义所在吧。

[本篇博文不包含源代码,仅涉及自动化日常工作的思路,工具大致构成]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章