Python写静态HTML

目录背景

灵感

技巧

扩展

背景

因为近期工作需要,常常要将测试结果/数据统计、汇总和展示,因此会有写静态HTML的需求,本文记录下python写静态HTML的小技巧

灵感

灵感时来源于unittest测试框架最常用的报告插件:HTMLTestRunner,该插件本身基于python2且已经更新了,好在@虫师一直在维护和更新这个插件,使得它能继续被大家所使用,了解详情请移步:SeldomQA/HTMLTestRunner

回到HTMLTestRunner报告插件,阅读源码发现,作者只用了一个python文件便巧妙的将写HTML、页面绘制和数据嵌入搞定了。进一步分析可以看到,作者先是在Template基类中定义了测试报告的HTML结构模板和各个模块/表格模板,然后再以格式化输入的形式给每一个模板中填充目标数据,再将填充好的模板以格式化输入的形式填充到HTML结构模板中,最后再将所有内容写成一个HTML文件即可。

class Template_mixin(object):

"""

Define a HTML template for report customerization and generation.

Overall structure of an HTML report

HTML

+------------------------+

|html |

| head |

| |

| STYLESHEET |

| +----------------+ |

| | | |

| +----------------+ |

| |

| /head |

| |

| body |

| |

| HEADING |

| +----------------+ |

| | | |

| +----------------+ |

| |

| REPORT |

| +----------------+ |

| | | |

| +----------------+ |

| |

| ENDING |

| +----------------+ |

| | | |

| +----------------+ |

| |

| /body |

|/html |

+------------------------+

"""

可以看到,这样的设计其实优点在于非常小巧和轻量,缺点在于可维护和可移植性差,数据量小还尚可,不太适合大量数据的统计和绘制。

技巧

这种设计的关键在于建模板,然后按需填充数据,最后再写HTML,通常我的做法是:

网上找到想要的页面或着表格,copy其HTML结构,将变动的部分(需要动态填充数据的部分)提取出来,并用格式化输入形式替代,如:%(style)s, %(rows)s

HTML_TMPL = r"""

!DOCTYPE html

html lang="en"

head

titleOverview/title

meta charset="UTF-8"

meta name="viewport" content="width=device-width, initial-scale=1"

%(style)s

/head

body

h1 总览 /h1

table class="pure-table pure-table-bordered"

thead

tr

th#/th

th设备/th

th环境/th

th耗时/th

th结果/th

th统计/th

th报告/th

/tr

/thead

tbody

tr

%(rows)s

/tr

tr

tdnbsp;/td

tdnbsp;/td

tdnbsp;/td

tdnbsp;/td

tdnbsp;/td

tdnbsp;/td

tdnbsp;/td

/tr

tr

%(total)s

/tr

/tbody

/table

/body

/html

""" # style, rows, total

将变动的部分单拎出来,形成模板,依然用格式化输入形式替代

TBODY_TOTAL_TMPL = """

tr

th 合计 /th

th colspan="6" 通过率: {passing_rate}% nbsp;nbsp; 失败率: {failure_rate}%

nbsp;nbsp; 错误率: {error_rate}% nbsp;nbsp; 跳过率: {skip_rate}% /th

/tr

"""

按照模板格式,组装数据并填充

total += TBODY_TOTAL_TMPL.format(

passing_rate=np.mean(p_rates).round(2),

failure_rate=np.mean(f_rates).round(2),

error_rate=np.mean(e_rates).round(2),

skip_rate=np.mean(s_rates).round(2))

最后将所有数据填充到主模板,并写HTML

# write reporter

with open(filepath, 'w', encoding='utf-8') as wf:

wf.write(HTML_TMPL % dict(rows=rows, total=total, style=STYLE_TMPL))

扩展

目前python自动化测试常用的报告插件还有,allure

除过本文介绍写HTML的方法之外,还可以使用,jinjia2

Python写静态HTML 相关文章

C++类

类内对象 静态: #include iostream#include stringusing namespace std;class Student {public: Student(const string name1, int age1) { }public: static int m_total; //静态成员变量 /* static 成员变量属于类,不属于某个具体的对象,即使创建多个对象

python数据类型(元祖tuple)

元祖 元组(tuple)就是不可更改的列表,一旦创建,便不可更改。除了表示的方式有点不一样、元组的元素不可更改,元组的其他特性与列表基本一致。一、元祖的创建 t=tuple() #创建一个空元组t1=() #创建一个空元组t2=(1,) 或 t2=1, #创建一个只有一个元素的元

Javascript 事件(静态注册和动态注册概念区分)

js中的事件 什么是事件事件是电脑输入设备与页面进行交互的响应,我们称之为事件 事件类型 鼠标单击:例如单击button、选中checkbox和radio等元素;鼠标进入、悬浮或退出页面的某个热点:例如鼠标停在一个图片上方或者进入table的范围; 键盘按键:当按下按

mac上安装 pip install Appium-Python-Client报错:ERROR: Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host=files.pythonhosted.org, port=443): Max retries exceeded with

ERROR: Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/21/ca/3261b5da5b6851ea5297f44b2dc7f3167f00a7ce3e99907b49bf69c56360/Appium-

跟光磊学Python开发-字符串基本使用

跟光磊学Python开发-字符串基本使用 跟光磊学Python开发 字符串的定义和使用 字符串是使用一对引号包含起来的若干字符 Python中支持如下四种字符串的定义方式,根据简单原则可以使用 ’‘ """字符串的定义方式@author tony 18601767221@163.com@version 2021

python 下五子棋

import mathimport tkinterfrom tkinter import *root = Tk()root.title('helloWorld')# 窗口尺寸# root.geometry('500x500')# 固定尺寸root.resizable(0, 0)# 棋盘中一格边长boxSize = 60# 横向格子数boxWidh = 8# 纵向格子数boxHigh = 9wid = boxSize * bo

linux上安装python3的方法,python2和python3共存,并设置python3为默认

1.安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2.安装gcc编译器 yum install gcc(yum命令不可用的话,需要找运维打开yum命令限制

Python3对接华三CAS平台Api-渐入佳境

--时间:2021年2月3日 --作者:飞翔的小胖猪 说明 。 环境 提前安装配置好prometheus+alertmanager+consul+node_exporter环境。 准备一台安装有python3的服务器 脚本 from http.cookiejar import CookieJar,MozillaCookieJarimport numpyimport _threadimpor

Day01— 机器学习的介绍和Python机器学习安装包的介绍与使用

第一章 机器学习介绍 1.1 什么是机器学习 1、定义:即让计算机在没有被显式编程的情况下,具备自我学习的能力。 2、白话理解:机器学习是一个计算机程序,针对某个特定任务,从经验中学习,并且越做越好。 3、机器学习最重要的内容: (1)数据:大量的经验

JSP基础知识

1.Servlet缺点 静态html与动态Java代码混在一起,难以维护; Servlet利用out.println()语句输出,开发效率低下; Eclipse调试困难,难发现错误 JSP解决了上述问题 2.JSP执行过程 JSP本身就是一种Servlet 浏览器向Tomcat发送要访问的jsp请求,Tomcat将jsp 转

python修改静态html_Python写静态HTML相关推荐

  1. python生成静态html_Python写静态HTML

    背景 因为近期工作需要,常常要将测试结果/数据统计.汇总和展示,因此会有写静态HTML的需求,本文记录下python写静态HTML的小技巧 灵感 灵感时来源于unittest测试框架最常用的报告插件: ...

  2. Python爬虫: 单网页 所有静态网页 动态网页爬取

    Python爬虫: 单网页 所有静态网页 动态网页爬取 前言:所有页代码主干均来自网上!!!感谢大佬们. 其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽 ...

  3. html写静态页面容易写错总结

    html写静态页面容易写错总结 写静态页面的注意点,避免页面崩溃 1.整个页面在写之前首先应该先把大的框架搭出来,在去写里面小的细节.保证大的框架没有问题,里面有问题,大不了删了重写.(给大的框架加上 ...

  4. python 静态网页_Python静态网页爬虫相关知识

    想要开发一个简单的Python爬虫案例,并在Python3以上的环境下运行,那么需要掌握哪些知识才能完成一个简单的Python爬虫呢? 爬虫的架构实现 爬虫包括调度器,管理器,解析器,下载器和输出器. ...

  5. python利用dominate库生成静态网页

    HTML报告:python利用dominate库生成静态网页 dominate 简介 一个生成页面的简单例子 标记的属性 如何生成复杂的文档结构 访问内容和属性 渲染 上下文管理器 装饰器 创建文档 ...

  6. arm linux设置ip地址命令,ARM Linux系统修改动态IP为静态IP地址

    # Wired or wireless interfaces auto eth0 #iface eth0 inet dhcp #        pre-up /bin/grep -v -e " ...

  7. x64 编译 静态链接_C++静态库与动态库

    这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...

  8. python是c语言写的吗-Python与C语言有什么区别?

    答题练手.手机排版不佳请谅解~ 更新2:还是关于编译和解释 二者的本质区别是在编译/解释器的总体工作方式上的,编译器是off-line,解释器是on-line.编译器把整个程序读进来,进行一系列变大变 ...

  9. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal 接口的成员默认访问修饰符是public C#修饰符-- ...

最新文章

  1. JavaScript获取时间戳与时间戳转化
  2. 16进制颜色透明_PPT | 如何快速提取图片颜色之人生太卷
  3. JavaScript 中 JSON.parse()和JSON.stringify()
  4. CM: How to get the complete url of a product attachment
  5. P4009 汽车加油行驶问题
  6. JAVA入门级教学之(对象的使用)
  7. 微课|中学生可以这样学Python(4.2节):break与continue语句
  8. synchronized锁机制 之 代码块锁
  9. 如何删除所有已合并的Git分支?
  10. MySQL定时备份并清理
  11. URPF - 单播逆向路径转发
  12. wps折线图如何画多条折线_怎么用wps制作折线图 wps制作多条折线图的步骤方法...
  13. N叉树的所有路径搜索
  14. WebBowser 实现淘宝网自动登录
  15. Flutter 本地图片加载不出来
  16. 深入浅出图神经网络~卷积神经网络(上)
  17. 【学习笔记】人工智能导论
  18. Word不熟练?掌握这些Word技巧和30个快捷键,快速提升工作效率
  19. 天野商业脚本开发第三期培训
  20. 虚幻引擎(2)-角色移动

热门文章

  1. MATLAB学习体会(来自小木虫)
  2. python类和对象基础详解
  3. 2008 go server sql 批处理_SQL Server 让你的数据来去自如——批处理-阿里云开发者社区...
  4. 搞明白这八个问题 Linux系统就好学多了
  5. 睡觉也在爬虫之二(爬一组图片)
  6. 仪酷LabVIEW AI视觉工具包及开放神经网络交互工具包常见问题解答
  7. 牛客网 2018校招真题 美团点评 K的倍数
  8. 频率分布直方图和累积频率分布图
  9. 最简单的平面制图用什么软件_视频解说不想自己录,用什么简单好用的配音软件制作?...
  10. 赛扬处理器_【推仔说新闻】英特尔发布新款奔腾、赛扬处理器