背景

软件测试的最后有一道比较繁琐的工作,就是编写测试报告。手写测试报告在数据统计和分析上面要耗费比较大的事件和精力。之前工作室使用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. cucumber java从入门到精通(2)用代码定义步骤

    cucumber java从入门到精通(2)用代码定义步骤 上一节里我们定义了feature文件,feature文件就是自然语言描述的用例文件,它有一定的章法,具体的潜规则是: 使用Feature关键 ...

  2. CListCtrl的LVN_KEYDOWN事件中怎么捕捉不到回车键?

    原文链接: http://computer-programming-forum.com/81-vc/c92ab6e6d6ac92bc.htm 楼主 How to handle the return k ...

  3. idea设置tomcat虚拟路径的两种方法

    1.使用tomcat自己的虚拟路径 1.1.在tomcat\config\server.xml中配置 path="/upload" 虚拟路径 E:\photo\upload 图片存 ...

  4. python .dcm文件读取,并转化为.jpg格式

    .dcm文件是DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信中记录医学图像和相关信息的文件,在用于医学图像处理的时候我们 ...

  5. C#基础第四天-作业答案-Hashtable-list<KeyValuePair>泛型实现名片

    .Hashtable 实现 Hashtable table = new Hashtable(); while (true) { Console.WriteLine("------------ ...

  6. .net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable

    今天客户一个附件上传的应用程序报错,服务器安装了.net 4.0 framework(还有1.0和2.0版本),因为有网站程序需要用到2.0,配置好站点后,附件程序是用的2.0,Mail程序选择版本为 ...

  7. MySQL 主外键约束与标准SQL不同的地方

    [标准SQL的外键约束条件] 1): 子表引用父表的主键 drop table if exists child,parent; create table if not exists parent( i ...

  8. CentOS下配置redis允许远程连接

    1. 目的 因为想要学习redis,因此在虚拟机中安装了redis,为了实现在物理机可以访问redis,弄了好久:因此记录下来,以免忘记. 2. 环境 虚拟机:CentOS Linux release ...

  9. [转]cubemap soft shadow

    https://community.arm.com/graphics/b/blog/posts/dynamic-soft-shadows-based-on-local-cubemap

  10. [javase学习笔记]-8.6 静态的内存载入

    之前几节我们一直在说statickeyword所修饰的静态,那么在程序执行时,内存中static是怎样体现的呢?这一节我们就来看一看. 我们还是先看一个样例.希望我们通过对这个样例的分析让我们刚開始学 ...