web自动化框架之四测试报告的搭建

news2024/12/30 3:27:06

现状:

看过前面的文章,楼主用的是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 MySQLdb
from 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,webTest
except 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)
pass
conn.close
 
 
 
insertData.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 sql
 
def 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)
 
#初始化时间插入sql
 
 
 
def runtimeData(startTime,endTime):
data = "insert into runTime(startTime,endTime) values ('"+startTime+"','"+endTime+"');"
return data
 
3.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.coloradmin.cn/o/1204210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPU Microarch 学习笔记【2】Unified Memory

目录 1. M3 Dynamic Caching 2. Unified Memory 3. Unified Memory是如何处理page fault的 4. Unified Memory Page Fault的相关论文 M3 Dynamic Caching 最新的Apple M3 芯片最亮眼的可能是支持dynamic caching&#xff0c;如下图所示。 具体说来就是传统的GPU分配内存时&…

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(1)实现带同步复位功能、采用上升沿触发的D触发器

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.顶层模块的书写 二.两种验证方法 2.1使用…

美国BGP服务器有哪些优势?

​  在当今数字化时代&#xff0c;网络连接的性能和可靠性对于企业和个人来说至关重要。而美国作为全球互联网的中心之一&#xff0c;其地区BGP服务器拥有许多优势。  网络性能和可靠性&#xff1a;美国BGP专线服务器采用BGP协议&#xff0c;一种高级动态路由协议&#xff…

线性表->栈

文章目录 前言概述栈的初始化销毁压栈出栈判断栈为不为空栈的有效个数 前言 栈相对于链表&#xff0c;稍微简单一点&#xff0c;但是栈的难点在于通过栈去理解递归算法。 概述 **栈&#xff1a;**一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。…

FreeRTOS知识梳理

一、RTOS:Real time operating system,中文意思为 实时操作系统&#xff0c;它是一类操作系统&#xff0c;比如uc/OS、FreeRTOS、RTX、RT-Thread 这些都是实时操作系统。 二、移植FreeRTOS到STM32F103C8T6上 interface选择CMSIS_V1,RCC选择Crystal Ceramic Resonator 。 …

【2012年数据结构真题】

41题 &#xff08;1&#xff09; 最坏情况下比较的总次数 对于长度分别为 m&#xff0c;n 的两个有序表的合并过程&#xff0c;最坏情况下需要一直比较到两个表的表尾元素&#xff0c;比较次数为 mn-1 次。已知需要 5 次两两合并&#xff0c;故设总比较次数为 X-5, X 就是以 N…

Django(四、路由层)

文章目录 一、路由层1.路由匹配url方法第一个是参数 的正则表达式 二、正则无名分组与有名分组无名分组有名分组 三、反向解析1.概念无名分组动态路由解析有名分组动态路由解析 四、路由分发为什么要用路由分发&#xff1f; 1.总路由分发配置名称空间 五、伪静态的概念六、虚拟…

【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程

STM32G47x 单片机FDCAN作为普通CAN外设使用教程 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是世界上应用最广泛的现场总线之一。CAN协议用于汽…

基于SSM+Vue的网上购物商城

基于SSMVue的网上购物商城的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 商品详情 登录界面 管理员界面 用户界面 可视化图标 摘要 基于SSM&#xff0…

vcomp120.dll丢失怎么办?vcomp120.dll丢失的解决方法分享

vcomp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何修复呢&#xff1f;下面我将为大家介绍四个修复vcomp120.dll丢失的方法。 一、使用dll修复程序修复 可以通过百度或许…

Knife4j在springboot3中如何集成呢(如果大家阅读能力好的话,建议直接看作者写的博客。当然,在下面也会附上作者的博客)

一.为什么会写这篇博客呢&#xff1f; 因为本作者在使用springboot2的时候还好好的&#xff0c;将springbooot2升到springboot3的时候&#xff0c;发现我天&#xff0c;knife4j好像出问题了&#xff0c;找了好久才发现时knife4j的版本问题。 二.说一下knife4j的版本问题吧&…

力扣刷题-二叉树-二叉树的层序遍历(相关题目总结)

思路 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的…

力扣刷题-二叉树-翻转二叉树

226.翻转二叉树 翻转一棵二叉树。 思路 参考&#xff1a; https://www.programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E6%80%9D%E8%B7%AF 如果要从整个树来看&#xff0c;翻转还真的挺复杂&#xff0c;整个树以中间分割线进行翻转&#xf…

【CUDA编程--编程模型简介算子开发流程】

官方文档&#xff1a;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 什么是CUDA CUDA全称&#xff08;Compute Unified Device Architecture&#xff09;统一计算架构&#xff0c;是NVIDIA推出的并行计算平台深度学习加速&#xff1a;对于神经网络&…

超级干货:光纤知识总结最全的文章

你们好&#xff0c;我的网工朋友。 光纤已经是远距离有线信号传输的主要手段&#xff0c;而安装、维护光纤也是很多人网络布线的基本功。 在网络布线中&#xff0c;通常室外楼宇间幢与幢之间使用的是光缆&#xff0c;室内楼宇内部大都使用的是以太网双绞线&#xff0c;也有使用…

前端案例-css实现ul中对li进行换行

场景描述&#xff1a; 我想要实现&#xff0c;在展示的item个数少于4个的时候&#xff0c;则排成一行&#xff0c;并且均分&#xff08;比如说有3个&#xff0c;则每个的宽度为33.3%&#xff09;&#xff0c;如果item 个数大于4&#xff0c;则进行换行。 效果如下&#xff1a…

冰点还原精灵_Deep Freeze Standard v8.60.020.5592中文版

eep Freeze&#xff08;又被成为冰点还原精灵&#xff09;是Faronics公司出品的一款简单易用的系统还原软件&#xff0c;使用能够帮助用户轻松将系统还原到安装该款软件之后状态&#xff0c;避免因为病毒的入侵以及人为的对系统无意或无意的破坏&#xff0c;让你的系统始终完美…

HTTP——

HTTP 请求报文的构成 如下图: 第一行:HTTP请求的方法,具体是POST方法还是GET方法,或是其它方法;URI就是你的HTTP请求的路径;后面是HTTP协议的版本; 第二行往下连续多行:这些是请求头部分,也就是请求的首部设置的一些信息,相当于对HTTP请求的一些设置; 空格行:在…

【PIE-Engine 数据资源】全球250米LAI产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球250米LAI产品时间范围2015年空间范围全球数据来源北京师范大学肖志强教授团队代码片段var images pie.ImageCollection(“BNU/LAI/GLOBAL-250”) 二、描述 全球 250 米叶面指数产品由北京师范…