背景

软件测试的最后有一道比较繁琐的工作,就是编写测试报告。手写测试报告在数据统计和分析上面要耗费比较大的事件和精力。之前工作室使用mantis管理bug缺陷。公司有内部有个系统,可以直接从mantis上面获取数据并进行统计,生成一份测试报告。后来换了一个工作室,bug缺陷管理平台也从原来的mantis 换成了redmine (http://www.redmine.org/ )。 然后走上了一条手写测试报告的不归路(测试人员前期还是推荐手写测试报告的)。搞游戏的都知道,平时加班加点压力就够大的。急需一个接redmine的测试报告系统。

至此,交代完毕为啥要写这么一个简单的测试报告系统。

要求或者需求:

  • 操作要足够简单
  • 尽量独立系统

开发技术:java/jsp

设计思路

数据来源:

照理来说,由于工作室内部自己搭的redmine,所以数据获取应该可以直接读取redmine 的数据库就好了。我觉得这样系统的依赖性较高,不够独立。而且问过接mantis 的测试报告系统的开发,他们是直接从mantis 上面爬取数据的。所以最终,我也是直接从redmine上爬取数据的。

数据存储:

由于测试报告系统一般就测试人员使用(特别是动态网页),其他人顶多也就查看静态的测试报告也没而已。所以系统对性能要求不高。所以没有使用数据库软件,我是直接用文本文件来记录数据。有一个原因是因为我觉得用了数据库,需要配置、部署数据库,万事都相对比较麻烦。反正没啥性能要求,直接就用文本吧。

简单架构

系统从远端redmine爬取数据,根据用户选择爬取某一个版本的数据。并且读取测试报告模板和数据生成一份测试报告。并将测试报告发送给相应的人员和保存测试报告的静态文件(用户查看历史测试报告)。

几个核心问题和技术

  • http请求——HttpClient
  • 数据统计及图片生成——JFreeChart
  • 前端展示数据统计结果——Charts.js
  • mail库——mail
  • 数据存储——gson

爬取和过滤

爬取回来的是一个html文件,需要从html文件里面提取出需要的数据,这里使用正则表达式提取。

数据统计

数据统计前端主要用Charts.js 来即时展示数据的结果。由于邮件里面的js是无效的。所以最终的统计结果用JFreeChart第三方库转换成图片。

数据存储

其实用的是文本存储,所以用的就是java的文件的读写操作而已。使用到了gson是因为存储的数据用了json格式。gson很好用。

mail

发送邮件用的是mail.jar这个库。至于这个库为啥我不用密码就能够发生出去,我也不太清楚。这可能跟邮件供应商有关系。

另外由于发生邮件需要发送图片,这里纠结了一番。如果图片存储在服务器,一旦服务器不正常(停电、断网什么的),测试报告就显示不了图片了。那么可以考虑使用附件发送出去。但发送附件可能会被定为垃圾邮件。最后选择将图片转换成数据,直接写入到html里面,解决噻~。下面是将图片转换成数据的源代码。

 /*
* Convert PNG to Base64
* path the PNG path
* */
public static String getBase64Png(String path) throws Exception {
String msg=”";
try{
BufferedImage image = ImageIO.read(new File(path));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, ”png”, baos);
msg = Base64.encode(baos.toByteArray()); }catch(IOException e){
e.printStackTrace();
}
return msg;
}

一个小问题

我直接将redmine 地址改成redmine官方地址http://www.redmine.org ,结果爬取数据的时候报错了。是因为我爬取一个表的时候,表结构不一样。官方的remine 比我们工作室使用的redmine 在某个表少了一个字段。如果你也遇到了,可能需要改一下源代码才能正常允许了。

例子

项目和版本选择界面

测试报告编写页面

一个静态的测试报告例子。直接点击:http://www.veiyn.com/study/TestReport.html 可以查看。(点击查看源代码可以发现图片是保存在html里面的)

题外

源代码:https://github.com/rondsny/TestReport/

记得使用的时候一定要先配置config.properties 文件:

PT_URL =http://www.redmine.org                              #redmine平台地址    必需
MAIL_HOST =mail.test.com #邮件服务器地址 必需
MAIL_FROM =name1@test.com #默认发件人 非必需
MAIL_TOS =name2@test.com|name3@test.com #默认收件人 非必需

共勉之!

个人小博客原文地址:http://www.veiyn.com/?p=66

开源一个爬取redmine数据的测试报告系统的更多相关文章

  1. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  2. Golang+chromedp+goquery 简单爬取动态数据

    目录 Golang+chromedp+goquery 简单爬取动态数据 Golang的安装 下载golang软件 解压golang 配置golang 重新导入配置 chromedp框架的使用 实际的代 ...

  3. Node.js爬取豆瓣数据

    一直自以为自己vue还可以,一直自以为webpack还可以,今天在慕课逛node的时候,才发现,自己还差的很远.众所周知,vue-cli基于webpack,而webpack基于node,对node不了 ...

  4. Python爬取房产数据,在地图上展现!

    小伙伴,我又来了,这次我们写的是用python爬虫爬取乌鲁木齐的房产数据并展示在地图上,地图工具我用的是 BDP个人版-免费在线数据分析软件,数据可视化软件 ,这个可以导入csv或者excel数据. ...

  5. 利用linux curl爬取网站数据

    看到一个看球网站的以下截图红色框数据,想爬取下来,通常爬取网站数据一般都会从java或者python爬取,但本人这两个都不会,只会shell脚本,于是硬着头皮试一下用shell爬取,方法很笨重,但旨在 ...

  6. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  7. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  8. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  9. 安居客scrapy房产信息爬取到数据可视化(下)-可视化代码

    接上篇:安居客scrapy房产信息爬取到数据可视化(下)-可视化代码,可视化的实现~ 先看看保存的数据吧~ 本人之前都是习惯把爬到的数据保存到本地json文件, 这次保存到数据库后发现使用mongod ...

随机推荐

  1. 禁用gridview,listview回弹或下拉悬停

    不同的安卓厂商对ListView或ScrollView都做了一些动画效果,比如下拉时为了产生弹性美感而有大幅度回弹效果,再比如魅族的下拉悬停,有时做了一个下拉刷新的功能会与之冲突.其实该美化实为多此一 ...

  2. Innodb的内存结构

    1.缓冲池从1.0.x版本开始,允许有多个缓冲池实例. mysql> show variables like 'innodb_buffer_pool_size'\G ************** ...

  3. 还没被玩坏的robobrowser(3)——简单的spider

    背景 做一个简单的spider用来获取python selenium实战教程的一些基本信息.因为python selenium每年滚动开课,所以做这样一个爬虫随时更新最新的开课信息是很有必要的. 预备 ...

  4. Eclipse设置项目默认编码和换行符类型

    为了实现不同操作系统间的Eclipse项目移植的一致性. 一.建议设置如下: 1. 默认的项目编码统一用UTF-8 2. 默认的换行符用UNIX类型 二.具体的配置点见下图:

  5. [转]使用spring中的@Transactional注解时,可能需要注意的地方

    前情提要 在编写业务层方法时,会遇到很多需要事务提交的操作,spring框架为我们提供很方便的做法,就是在需要事务提交的方法上添加@Transactional注解,比起我们自己开启事务.提交以及控制回 ...

  6. Docker容器进入的4种方式(转)

    在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...

  7. Matlab中classperf对象各属性解释[原创]

    1.ClassLabels:类型标识.第一个label作为pos,第二次label作为neg. 2.GroundTruth:各次实验的观察值,也就是真实值. 3.ValidationCounter: ...

  8. centos 7 下图形验证码乱码

    工作中遇到一个问题:同样的代码在centos 6.5下图形验证码是正常的 但是在centos 7下面是乱码 centos 6.5 的系统字体库目录 [wwwad@P2P-test2 fonts]$ p ...

  9. andorid 直接解压后的xml的解密

    1.首先可以去看看这个gitHub: https://github.com/tracer0tong/axmlprinter 2.把apk.py 和 axmlprinter.py下载下来. 2.1(如果 ...

  10. CodeBlocks 17.12 工程如何引用其他文件夹的头文件和源程序

    假设你的工程名为project,目录为F:\test.但是你想在project中使用文件夹F:\library下面的一些头文件和源程序.由于这些头文件和源程序与工程project不在同一目录下面,所以 ...