整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

自动化测试之HTML测试报告

载地址HTMLTestRunner.py文件:

http://tungwaiyip.info/software/HTMLTestRunner.html

下载的适合python2,如果python3要修改一些内容

首先吧HTMLTestRunner文件添加到环境变量里,可以直接放到python的Lib目录下

HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,用于生成HTML测试报告


生成HTML测试报告

#coding:utf-8
import unittest, HTMLTestRunner

class Testcase(unittest.TestCase): # 测试用例类
# 具体的测试用例,一定要以test开头
def test1(self):
self.assertEqual(1, 1)

def test2(self):
self.assertEqual(2, 2)

if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Testcase)) # 执行该测试类所有用例

# 定义报告的存放路径,以二进制写的形式打开文件
f = open('test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果(测试报告详情):

--stream :存放报告写入文件的存入区域

--title :测试报告的主题

--description :测试报告的描述


报告用例类和用例方法加备注

为了生成带有中文描述的测试用例类和测试用例

在用例类和用例方法下,通过’’’ ‘’’或””” “””来添加备注

#coding:utf-8
import unittest, HTMLTestRunner

class Testcase(unittest.TestCase): # 测试用例类
u'''类名后加备注'''

def test1(self):
u'''用例后面加备注1'''
self.assertEqual(1, 1)

def test2(self):
u'''用例后面加备注2'''
self.assertEqual(2, 2)

if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Testcase))

# 定义报告的存放路径,以二进制写的形式打开文件
f = open('test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果:

测试报告文件名

#coding:utf-8
import unittest, HTMLTestRunner, time
from unittest.loader import makeSuite

class Testcase(unittest.TestCase): # 测试用例类
# 具体的测试用例,一定要以test开头
def test1(self):
self.assertEqual(1, 1)

def test2(self):
self.assertEqual(2, 2)

if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(makeSuite(Testcase)) # 执行该测试类所有用例

# 定义报告的存放路径,以二进制写的形式打开文件
now = time.strftime("%y-%m-%d %H_%M_%S")
f = open('./' + now + 'test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果:


测试报告乱码问题


将红框里的内容注释掉改成uo = o.decode('utf-8')

DF文档的打印在很多应用场景中都会被使用到,最为常见的就是实验室信息管理的应用场景,期间涉及到大量的报告呈现及打印的需求。

LIMS背景介绍

实验室信息管理系统(Laboratory Information Management System 英文缩写LIMS)是将以数据库为核心的信息化技术与实验室管理需求相结合的信息化管理工具。以ISO/IEC17025:2017 CNAS-CL01《检测和校准实验室能力的通用要求》(国标为GB/T 27025:2008)规范为基础,结合网络化技术,将实验室的业务流程和一切资源以及行政管理等以合理方式进行管理。

通过LIMS系统,配合分析数据的自动采集和分析,大大提高了实验室的检测效率;降低了实验室运行成本并且体现了快速溯源和痕迹,使传统实验室手工作业中存在的各种弊端得以顺利解决。目前实验室信息管理系统在西方发达国家的应用相对比较成熟,我们国家经过多年发展,很多实验室也开始逐渐认识到信息化在管理中的作用,纷纷开始引入LIMS。

LIMS系统需求及解决思路

在LIMS系统构建的过程中,实验模板设计、实验数据填报、导出完整的PDF实验报告并且实现检测过程无纸化、系统化,检测报告电子化是LIMS系统的主要需求。那么如何快速又高质量的输出PDF实验报告呢?

借助SpreadJS表格技术及GcExcel仅仅需要三步就可以完成整个功能的开发:

  1. 将SpreadJS集成到系统中,快速实现数据的在线录入
  2. 在系统中配置导出PDF文档所需要的参数
  3. 通过GcExcel将实验报告导出为PDF文件

具体的操作步骤

用SpreadJS完成实现模板设计和实验数据填报

利用SpreadJS的在线表格编辑器,实验人员就可以通过类Excel的操作完成实验报告的设计。

通过以下代码就可以将SpreadJS快速集成到现有的系统中:

创建一个JavaScript应用程序:

注意 SpreadJS是无依赖的,仅仅需要以下文件: gc.spread.sheets.xx.x.x.css, gc.spread.sheets.all.xx.x.x.min.js即可.

<!DOCTYPE html><html lang="zh"><head>
<meta charset="utf-8" />
<script src="gc.spread.sheets.all.xx.x.x.min.js"><link rel="stylesheet" href="gc.spread.sheets.xx.x.x.css"type="text/css"/></head>
<body></body></html>

添加SpreadJS容器元素 - 在页面的body元素中添加一个DOM元素作为它的容器。

<div id="ss"></div>

初始化SpreadJS JavaScript控件。 - SpreadJS控件通过使用new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 })来进行初始化。

window.onload = function () {// Initialize a workbookvar workbook = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });// get workbook object// var workbook = GC.Spread.Sheets.findControl(document.getElementById('ss'));
};

在完成嵌入之后,通过SpreadJS的数据绑定的功能,某些默认数据可以从数据库加载,显示到实验模板中,实验人员填报的实验数据也可以通过数据绑定轻松获取到

用SpreadJS完成导出PDF(打印)的配置

使用SpreadJS的在线表格编辑器可以完成导出PDF的配置,可配置导出区域,重复区域,页眉,页脚,水印等,对导出PDF报告进行自定义。

用GCExcel将实验报告导出

在SpreadJS中完成模板设计,实验数据填报,以及各种打印配置后,可以将整个实验模板文件导出为一个json,发给后端,后端就可以用GCExcel加载,GCExcel可以完美兼容SpreadJS的特性,在SpreadJS中对模板的配置,以及对导出的PDF的配置,在GCExcel中都完美兼容,当然也可以在GCExcel完成对模板的配置以及PDF导出的配置。

Java
Workbook workbook = new Workbook();
//打开SpreadJS导出的模板
workbook.open("template.ssjson");
// 导出PDF配置
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
// 配置支持换行缩小
pdfSaveOptions.getShrinkToFitSettings().setCanShrinkToFitWrappedText(true);
// 导出PDF
workbook.save("ExportPdf.pdf");

至此,就完成PDF文档的打印。

使用SpreadJS和GCExcel搭建LIMS系统的优势

  • SpreadJS能够帮助LIMS系统快速实现数据的绑定功能,实现数据自动提取,如委托单位信息、例行监测任务等首次录入后可直接调用,且支持调用历史任务时对监测项目进行修改并生成新的任务单,无须重复录入,大大减少了人工成本和降低出错率。
  • 使用 SpreadJS 设计模板,系统获取仪器测试数据后填入原始记录单(预置计算公式、修约等)可直接生成 Excel 记录表,通过选择报告模板生成完整的监测报告,全过程无需手写原始记录,无需反复录入监测数据,方便快捷,准确率高。
  • SpreadJS 提供权限控制的方法,可以规范修改流程,严格控制报告修改。
  • 使用Spread可以对导出的PDF进行精确配置。
  • GCExcel完美兼容SpreadJS特性,在后端批量导出完整的PDF实验报告,既美观又高效。

活中我们经常会碰到空间领红包“中毒”自动发不良信息的现象,或者是不知不觉的被人盗取了信息的情况。通常这种情况都是XSS漏洞导致的,我们今天就来讲解一下关于XSS漏洞的原理。

XSS种类:

反射型

存储型

Dom-based型

这里面反射型跟持久型都是很常见的,也是用的最广泛的一种攻击方式。

它的主要利用原理是:

给受害者发送带有恶意代码或脚本的链接,如果你点击了链接,只要是被HTML所解析并且执行了,那无论你是否快速关闭了点开的页面,都白瞎了。

Dom这种XSS漏洞是基于文档对象模型的一种漏洞,它的特点是通过url传入参数去控制触发的。

下面我们主要来说一下反射型跟存储型XSS的原理,并附上代码。

反射型XSS:

我们平时常见XSS地方很多都是搜索框(一般网站上都会有搜索文章什么的),我们可以在这种搜索框里面输入:

<script>alert('XSS')</script>

来验证XSS的漏洞存在与否,如果存在会弹出一个编辑框“XSS”,下面我们自己构建一个这样的搜索框:

先新搭建好PHP环境,在站点新建一个xss.php文件,输入以下的代码。

代码的意思很简单:

  1. 先创建一个form表单,提交方式设置为GET,提交给本页面(也就是交给下面的PHP代码去执行)
  2. 定义一个$xss变量
  3. 如果变量不为空的话,输出$xss的内容。

然后在浏览器上访问的效果应该是这样的:

这个时候我们就可以输入常规的信息去搜索,输入“im liuse”显示效果如下:

现在我们改变策略,输入我们上面说的xss测试代码<script>alert('XSS')</script>然后执行,你会看到下图的效果:

事实证明,没有进行过滤,如果我们把这个地方的<script>alert('XSS')</script>改成其它的代码,如:

<script>alert(document.cookie)</script>

就可以获取用户的cookie(cookie记录了用户的登录信息),拿到cookie有什么用呢?

举个例子,比如说拿到你的QQ空间的cookie就可以不需要用户名密码登录你的空间,我们经常见到空间好友自动转发一些乱七八糟的东西的图片文字的,基本都是通过xss漏洞搞的。

说完反射型XSS我们再来说说存储型XSS。

存储型XSS:

相对于反射型XSS,存储型XSS的档次确实高了不少,不过利用难度也相对提高了。

什么是存储型XSS呢?没错就跟它的名字一样,是可以储存起恶意代码的方式。这种漏洞利用多出现在论坛评论,后台上传这些地方,可以是图片也可以是文字。相对于反射型XSS不同的是,存储型XSS可以保存在服务器端(存到数据库)下面我们用代码举例:

我们在上面的xss.php文件的基础上修改一下:

同样的代码还是很容易理解:

  1. 先通过mysql_connect()函数来连接mysql
  2. 然后自己在mysql中建一个XSS_test数据库
  3. 创建一个XssValue字段来收录一会提交进的恶意代码
  4. 如果有数据过来,保存到数据库。

下面,我们来实验一下。

在搜索框同样输入我们的XSS代码:

你会发现貌似前台没有显示,但去mysql数据库看已经存储到数据库了,以后任何人去访问某个调用这个数据库的页面都会受影响!

以上就是简单的演示说明,下面我们讲讲防范过滤。

过滤实现:

重点对象:

<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)

过滤函数:

(1)htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

(2)htmlentities() 函数,用于转义处理在页面上显示的文本。

(3)strip_tags() 函数,过滤掉输入、输出里面的恶意标签。

(4)header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。

(5)urlencode() 函数,用于输出处理字符型参数带入页面链接中。

(6)intval() 函数用于处理数值型参数输出页面中。

好,今天XSS就先介绍到这里了,希望各位一定要认识到网安的重要性!