• 0
  • 0
分享

  现状:

  看过前面的文章,楼主用的是python,所以在搭建测试报告这块的时候使用的是unittest+htmlTestRunner;然后发现生成出来的报告,总是有那么不完美的地方,比如想增加图片,比如显示风格改变下;然后尝试性的去修改了一个htmlTestRunner源码,虽然图片出来了,显示风格修改不了...so...萌生的弃意...

  问题:

  1.unittest

  unittest当案例异常或脚本执行异常时,无法继续执行下个案例~,比如登录时,后台服务异常、登录用户无菜单权限异常、新增用户状态导致无法登录异常等等;

  unittest.assertEqual、assertRaises等断言方法对复杂的功能逻辑难以处理~~,比如需要if/else、or、and组合用的逻辑判断。

  2.htmlTestrunner

  case测试数据输出信息不全,关键不能做一些炫酷的事,自动对接缺陷管理系统、自动验证缺陷(重点);

  历史数据信息无法保存;

  样式总有那么不满意的地方。

  方案:

  a.结果验证、测试参数输出、测试参数输出自己封装;

  b.测试数据信息保存在mysql;

  c.界面,jsp读取mysql数据展示。

  技术实现:

  a.略,后面专题介绍

  b.数据库数据的插入与相关初始化

  MySQLdb.py
  #coding=utf-8
  import MySQLdbfrom com.iapppay.test.loginfo.loginfoobject 
  import *# reload(sys)# reload(sys).setdefaultencoding('gbk')
  # def printStr(**kwargs):# return kwargs[0][3]'''runTime CREATE TABLE `runTime` (`startTime` datetime DEFAULT NULL,`endTime` datetime DEFAULT NULL,`id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;casedata CREATE TABLE `casedata` (`id` int(11) NOT NULL AUTO_INCREMENT,`casedata` varchar(2000) DEFAULT NULL COMMENT '案例参数',`caseinfo` varchar(2000) DEFAULT NULL COMMENT '案例输出信息',`status` varchar(6) DEFAULT NULL COMMENT '验证结果',`casebank` varchar(2000) DEFAULT NULL COMMENT '备注',`casetime` datetime DEFAULT NULL COMMENT '执行时间',`system` varchar(12) DEFAULT NULL COMMENT '系统',`action` varchar(12) DEFAULT NULL COMMENT '功能',`imageinfo` varchar(2000) DEFAULT NULL COMMENT '图片信息',`caseR` int(11) DEFAULT NULL COMMENT '案例点',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1159 DEFAULT CHARSET=utf8;'''insert = "insert into `casedata` (`casedata`, `caseinfo`, `status`, `casebank`, `casetime`, `system`, `action`) values('sasdasd','sadasd','fase','sdasd',NULL,'admin','login','caseR');
  #访问数据库try:conn =MySQLdb.connect(host="192.168.0.157",port=3306,user="root",passwd="123456",db="webTest",charset="utf8")
  #v35test_iapppay,webTestexcept MySQLdb.Error as e:logging.ERROR(e)pass#插入数据公共方法def insertData(str):cursor = conn.cursor()try:cursor.execute(str)conn.commit()except Exception as e:logging.ERROR(e)passconn.closeinsertData.py#coding=utf-8'''Created on 2014 7 17 @author: Ф肖彬'''
  import time#获取当前时间def dateTime():return time.strftime('%Y-%m-%d %H:%S',time.localtime(time.time()))
  #初始化生成insert sqldef data(casedata,caseinfo,status,casebank,casetime,system,action,imageinfo):data ="insert into `casedata`(`casedata`, `caseinfo`, `status`, `casebank`, `casetime`, `system`, `action`,`imageinfo`)values('"+casedata+"','"+caseinfo+"','"+status+"','"+casebank+"','"+casetime+"','"+system+"','"+action+"','"+imageinfo+"');"return data#对特殊字符处理def returnargs(*args):data =""for i in (range(len(args))):data += str(args[i])data = data.replace("'","\\'")return str(data)#初始化时间插入sqldef runtimeData(startTime,endTime):data = "insert into runTime(startTime,endTime) values ('"+startTime+"','"+endTime+"');"return data3.jsp页面访问<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.sql.*" %>
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html><%String par = request.getParameter("pay");%>
  <style media="screen" type="text/css">body 
  { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }table { font-size: 100%; }pre { }/* -- heading ---------------------------------------------------------------------- */h1 {font-size: 16pt;color: gray;}.heading {margin-top: 0ex;margin-bottom: 1ex;}.heading .attribute {margin-top: 1ex;margin-bottom: 0;}.heading .description {margin-top: 4ex;margin-bottom: 6ex;}.overflow{overflow:auto;}#show_detail_line {margin-top: 3ex;margin-bottom: 1ex;}</style><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>爱贝自动化监控界面</title></head><body><script language="javascript" type="text/javascript">alert(<%=par%>);/* level - 0:pass; 1:false; 2:error 3:all */function showCase(level){if (level == 0){par = "hello1";alert(<%=par%>);}if (level == 1){par = "hello2";alert(<%=par%>);}if (level == 2){par = "hello3";alert(<%=par%>);}if (level == 3){par = "hello4";alert(<%=par%>);}}</script><div class='heading'><h1>爱贝自动化测试监控</h1><p class='attribute'><strong>Start Time:</strong> 2014-07-16 16:17:45</p><p class='attribute'><strong>Duration:</strong> 0:00:00.027000</p>
  <p class='attribute'><strong>Status:</strong> pass 1 false 1 error 1</p></div>
  <p id='show_detail_line'>测试结果:<a href='javascript:showCase(0)'>Pass</a>
  <a href='javascript:showCase(1)'>false</a>
  <a href='javascript:showCase(2)'>Error</a>
  <a href='javascript:showCase(3)'>All</a></p>
  <div class = 'heading'>
  <table border=1 style="table-layout:fixed;word-wrap:break-word;" width="100%" id = 'overflow' >
  <tr><td width ="3%">ID</td>
  <td width ="20%">测试数据</td>
  <td width ="20%">测试输出</td>
  <td width ="5%">测试结果</td>
  <td width ="10%">测试备注</td>
  <td width ="10%">执行时间</td>
  <td width ="5%">系统</td>
  <td width ="5%">action</td>
  <td width ="5%">图片</td></tr>
  <%Class.forName("com.mysql.jdbc.Driver").newInstance();
  Connection con=java.sql.DriverManager.getConnection("jdbc:mysql://192.168.0.157/webTest?useUnicode=true&characterEncoding=utf-8","root","123456");
  Statement stmt=con.createStatement();ResultSet rst=stmt.executeQuery("select id,casedata,caseinfo,status,casebank,casetime,system,action,imageinfo from casedata order by id desc");while(rst.next()){out.println("<tr>");
  out.println("<td>"+rst.getString("id")+"</td>");out.println("<td>"+rst.getString("casedata")+"</td>");
  out.println("<td>"+rst.getString("caseinfo")+"</td>");out.println("<td>"+rst.getString("status")+"</td>");
  out.println("<td>"+rst.getString("casebank")+"</td>");
  out.println("<td>"+rst.getString("casetime")+"</td>");out.println("<td>"+rst.getString("system")+"</td>");
  out.println("<td>"+rst.getString("action")+"</td>");//out.println("<td>"+rst.getString("imageinfo")+"</td>");
  out.println("<td>"+"<img src="+"/data/201407212947_1.jpg"+">"+"</img>"+"</td>");out.println("</tr>");}//关闭连接、释放资源rst.close();stmt.close();con.close();%>
  </table>
  </div>
  </body>
  </html>

  注意:需要导入com.mysql.jdbc.Driver lib包。

  最后:到这里,一套测试报告搭建完毕,最后是往数据表里面插入测试的相关数据就哦了。


作者:自动化测试冰茶    

来源:http://www.51testing.com/html/06/n-7792606.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   乔梁在MTSC大会上分享了主题为《一致性是研效提升的必经之路》的演讲,演讲内容主要是如何提高软件研发效率。他从香农在信息论中的熵增定律出发,讲到像软件这样的复杂系统,必须尽可能减少不确定性因素的影响,努力提高软件研发的一致性,从而达到提高软件研发效率的目的。本文主要基于熵增定律,探讨该定律对软件测试行业是否存在指导作用。  首先,我们回顾一下什么是熵增定律。这原本是热力学中的概念,一个孤立系统总是趋向于熵增,最终达到熵的最大状态,也就是系统的最混乱无序状态。1948年,香农将热力学的熵,引入到信息论。  对于一个信息系统,如果没有外力作用,最终也会达到信息熵最大的状态,信息系统会越来越混乱...
            0 0 1395
            分享
          •   你的免费礼品还有一个月就要失效了,速来领取吧!链接:http://vote.51testing.com/    测试一个项目,流程图起到至关重要的作用。流程图画对了,测的就好,流程图画错了,测的就不好。流程图可以梳理思路,区分角色。不同的角色功能也不一样。  比如:美团分为四个角色:买家,卖家,平台,骑手。  滴滴打车的角色有3个:车主,平台,乘客,而司机也可以细拆,专车司机,快车司机,代驾,拼车,机场接送,顺风车等,司机的车不同,APP上的功能也不同。  电商的角色一般有3个,卖家,平台,买家。卖家又分为官方自营和品牌进驻这个平台。卖东西的方式又可以分成单独购买、批量...
            0 0 1107
            分享
          •   如题,产生 BUG 测试人员需要自己去分析原因吗?大田说说自己的想法:如果说到分析,最终肯定是开发查代码去分析,但是测试人员可以根据问题先做一个初步的定位。  总体思路是:由测试人员初步定位,再协助开发复现,由开发分析代码,解决。  1、如果是测试人员发现的 BUG  可以利用 F12 抓包、Linux看日志 log、查库对比等手段先分析报错情况,这几步基本能发现大部分问题。测试人员把具体报错原因给到开发,也能提升开发的工作效率;  2、如果是客户发现的 BUG  先由测试人员复现,复现出来后,按照上述第 1 点所说,继续后续操作;  3、如果测试时间实在不够  测试人员需要将问题提到缺陷...
            0 0 1199
            分享
          •   据报道,当地时间周四,谷歌宣布,将在其加拿大平台上封锁加拿大新闻。在此之前,Facebook也采取了类似的措施,以此对抗该国强制要求互联网平台向当地新闻机构付费的新规。  当该法律大约6个月后生效时,谷歌将在其加拿大搜索结果及其他产品中删除指向加拿大新闻的网络链接。  Facebook母公司Meta上周也宣布了类似的声明,以此抗议加拿大刚刚通过的C-18法案,即《在线新闻法案》。  加拿大媒体行业呼吁对互联网巨头加强监管,以使新闻机构能够挽回多年来因为Facebook和谷歌等在广告市场攻城拔寨而遭受的损失。  加拿大独立预算监管机构去年估计,新闻企业每年可以从该法律强制的交易中获得3.3亿...
            0 0 1223
            分享
          •   技术永远不会停滞不前,因此,尽管 5G 通信让人感觉非常新颖和炫目,但业界已经在为下一代技术做准备了。LG 电子和弗劳恩霍夫海因里希-赫兹研究所(Fraunhofer Heinrich-Hertz Institute)现在进行了一项测试,利用 6G 技术创造了新的数据传输距离记录。  正如大家所期待的那样,6G 的功能预计将与 5G 及其前代产品类似,但速度更快,效率更高。这是因为它首次扩展到了太赫兹(THz)频率,使其数据传输速率比 5G 快 50 倍,而延迟仅为 5G 的 10%。  几年来,三星和 LG 等公司一直在测试和改进这项技术,不断刷新 6G 数据传输的距离记录。现在,在新的...
            0 0 964
            分享
      • 51testing软件测试圈微信