【设想】
在做selenium前端页面测试时,想到生成html报告,需要编写个类,实现在Python内编辑html,具体思路如下:
1、编写各种tag类型,如head、title、body;
2、重载 + 运算,实现类似html + head的功能;
想到第一点,当时就觉得繁琐,要定义如此多个类(原谅我当时傻傻的),后来发现个开源项目:https://pypi.python.org/pypi/PyH/0.1
【PyH工厂模式解析】
PyH就一个源码pyh.py,很简单,以下截取部分代码分析,请尊重原作者,不要直接使用
定义一个基础类,并重载+操作符,重载<<重载符
[python] view plaincopy
class Tag(list):
tagname = ''
def __init__(self, *arg, **kw):
self.attributes = kw
if self.tagname :
name = self.tagname
self.isSeq = False
else:
name = 'sequence'
self.isSeq = True
self.id = kw.get('id', name)
#self.extend(arg)
for a in arg: self.addObj(a)
def __iadd__(self, obj):
if isinstance(obj, Tag) and obj.isSeq:
for o in obj: self.addObj(o)
else: self.addObj(obj)
return self
def addObj(self, obj):
if not isinstance(obj, Tag): obj = str(obj)
id=self.setID(obj)
setattr(self, id, obj)
self.append(obj)
def setID(self, obj):
if isinstance(obj, Tag):
id = obj.id
n = len([t for t in self if isinstance(t, Tag) and t.id.startswith(id)])
else:
id = 'content'
n = len([t for t in self if not isinstance(t, Tag)])
if n: id = '%s_%03i' % (id, n)
if isinstance(obj, Tag): obj.id = id
return id
def __add__(self, obj):
if self.tagname: return Tag(self, obj)
self.addObj(obj)
return self
def __lshift__(self, obj):
self += obj
if isinstance(obj, Tag): return obj
def render(self):
result = ''
if self.tagname:
result = '<%s%s%s>' % (self.tagname, self.renderAtt(), self.selfClose()*' /')
if not self.selfClose():
for c in self:
if isinstance(c, Tag):
result += c.render()
else: result += c
if self.tagname:
result += '</%s>' % self.tagname
result += '\n'
return result
def renderAtt(self):
result = ''
for n, v in self.attributes.iteritems():
if n != 'txt' and n != 'open':
if n == 'cl': n = 'class'
result += ' %s="%s"' % (n, v)
return result
def selfClose(self):
return self.tagname in selfClose
然后定义工厂类
[python] view plaincopy
def TagFactory(name):
class f(Tag):
tagname = name
f.__name__ = name
return f
最后实现工厂模式
[python] view plaincopy
for t in tags: setattr(thisModule, t, TagFactory(t))
【PyH生成html】
[python] view plaincopy
#生成一个page对象
report_html = PyH(ur'乐视页面测试报告')
'''''可以使用<<运算符往page类添加tag节点,可添加的如下
tags = ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend',
'input', 'select', 'span', 'b', 'i', 'option', 'img', 'script',
'table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
'fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table',
'ul', 'li', 'ol']
'''
report_html << h1(u'乐视页面测试报告',cl='header1',style='color:red; text-align:center')
#Tag对象,也可以使用<<往里面添加节点
myul = report_html << ul(cl='ul_report')
logintb = myul << table(cl='tb_login',border=2)
logintb << tr(cl='tb_tr') << td(cl='tb_login_head') << p(u'登录测试用例: 1 个',style='color:blue; text-align:center')
#最后使用printOut输出到文件或者console
report_html.printOut('result.html')
分享到:
相关推荐
python3以上版本使用的pyh模块,用于生成html文档
这将把PyH库安装到你的Python环境的全局site-packages目录下,使得在任何Python脚本中都可以通过导入`pyh`模块来使用它。 **使用PyH生成HTML** PyH库的核心是其面向对象的设计,它将HTML元素表示为Python类。例如...
Python-pyh2o是Python与H2O框架交互的一个库,它允许Python程序员利用H2O的高效机器学习算法和数据分析能力。H2O是一个开源的、并行处理的预测分析平台,专为大数据和快速预测建模而设计。通过pyh2o库,我们可以直接...
想用Python生成HTML格式,自动化测试、性能测试报告,必须神器,
实现 Python 代码以生成 siamese 网络的图像对 下周,我将向您展示如何实现和训练您自己的 Siamese 网络。最终,我们将构建图像三元组的概念,以及我们如何使用三元组损失和对比损失来训练更好、更准确的孪生网络。 ...
Pyh 是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容。在python代码中手写HTML代码非常乏味并且使代码可读性变得非常糟糕。而且,当你尝试要去看一下HTML源码的时候,可读性同样很差。PyH为...
压缩包内的文件名称看起来是PyH库的用户手册,可能是从Google Project Hosting下载的。`UserManual - pyh - User manual for the PyH library - A powerful python module to generate HTML code from a python ...
Python中的`pyh`库是一个简洁的工具,用于生成HTML文档。这个库使得开发者能够方便地构建HTML结构,而无需直接编写HTML字符串。在本文中,我们将深入探讨如何使用`pyh`库来生成HTML文档,并通过实例代码来解决一些...
在Python编程领域,Flask是一个轻量级的Web服务应用框架,它允许开发者用Python代码构建功能丰富的Web应用。HTML则是网页设计的基础语言,用于创建和构建网页结构。结合Python和Flask,我们可以动态生成HTML页面,...
Pyh 是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容。在python代码中手写HTML代码非常乏味并且使代码可读性变得非常糟糕。而且,当你尝试要去看一下HTML源码的时候,可读性同样很差。PyH为...
在本篇【Python-Pycharm实现的猴子摘桃小游戏(源代码)】中,我们讨论了一个使用Python编程语言和PyCharm集成开发环境(IDE)创建的趣味游戏。游戏是基于pygame库构建的,该库提供了图形用户界面和多媒体功能,非常适合...
Python 2.7.16 是 Python 语言的一个重要版本,尤其对于那些仍然依赖于旧版Python应用的用户来说,这个版本具有极高的价值。AMD64指的是该版本是为64位架构设计的,意味着它能在支持64位操作系统的计算机上运行,...
这是部经典在经典不过的书籍了,适合有一定 python编程经验的人使用
在“PYH:csc学习过程”这个主题下,我们可以看到标签是“Python”,这表明我们将探讨的是关于Python编程语言的学习路径。"PYH-master"可能是项目或者教程的主目录名,暗示着这是一个有关Python的系统化学习资源。...
Python库是开发者在编程时经常会使用到的重要工具,它们提供了丰富的功能,可以帮助我们更高效地完成各种任务。本文将深入探讨“tsorb-0.0.2”这个Python库,了解其基本概念、用途和使用方法。 “tsorb-0.0.2.tar....
pyH2oMojo用于H2o MOJO的非官方Python包装器H2o EasyPredictModelWrapper实例周围的轻量级python包装器实例化对象将启动捆绑的Jar文件,并在localhost上建立要与之通信的端口。 字典或JSON字符串通过套接字传递给...
非负矩阵划分matlab代码pyh2nmf 基于 Gillis 等人的 matlab 实现的分层 rank-2 非负矩阵分解的 python 端口。 2014年 原始matlab代码在这里: 论文:参见 N. Gillis、D. Kuang 和 H. Park,“使用 Rank-Two Non...
6. UDP编程:涉及如何在应用程序中使用UDP套接字API(如在C或Python中),创建和发送UDP数据报,以及如何接收和处理来自网络的数据。 7. 错误检测与容错:尽管UDP不保证数据的可靠传输,但开发者仍需要考虑如何在...
从 Python 官方网站下载 Python 3.6.1 的源码包。源码包的下载地址为: ```bash https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz ``` #### 3. 解压源码包 使用 `xz` 和 `tar` 命令解压下载的源码包:...