如何让领导轻松在本地查看Allure报告
如何让领导轻松在本地查看Allure报告
问题描述
当我们把精心生成的Allure报告原始文件发送给领导后,领导直接打开index.html
文件时,页面却一直处于加载状态,无法显示数据。
通过F12
开发者工具检查,我们发现这是由于浏览器跨域请求问题导致的。具体来说,当尝试通过XMLHttpRequest
对象从本地文件系统中访问文件时,现代浏览器出于安全原因,默认禁止了这种行为。
解决方案
为了解决这个问题,使用Python HTTP服务器或其他Web服务器来托管Allure报告是一个行之有效的方案(当然,还有其他方式)。通过这种方式,我们可以通过http://
或https://
协议来访问报告,从而轻松绕过CORS策略的限制。
以下是Python HTTP服务器的代码实现:
import http.server
import socketserver
import os
from functools import partial
import sys
class HttpServer:
def __init__(self, bind="127.0.0.1", port=9988, directory=os.getcwd()):
self.bind = bind
self.port = port
self.directory = directory
args = sys.argv
for i in range(1, len(args)):
if args[i] == "-port" and i + 1 < len(args):
self.port = int(args[i + 1])
if args[i] == "-dir" and i + 1 < len(args):
self.directory = args[i + 1]
if args[i] == "-bind" and i + 1 < len(args):
self.bind = args[i + 1]
def run(self):
try:
with socketserver.TCPServer((self.bind, self.port), partial(http.server.SimpleHTTPRequestHandler, directory=self.directory)) as httpd:
print(f"工作目录: {self.directory}\nServing HTTP on {self.bind} port {self.port}\nhttp://{self.bind}:{self.port}/")
httpd.serve_forever()
except KeyboardInterrupt:
print("\nKeyboard interrupt received, exiting.")
sys.exit(0)
if __name__ == '__main__':
server = HttpServer()
server.run()
操作步骤:
- 将上述脚本保存在与Allure报告的
index.html
文件相同的目录下。
- 执行脚本,并访问提供的地址。
通过这种方法,我们可以成功访问Allure报告,并且数据也能正确加载。
ok,接下来解决领导没有python环境的问题。
解决Python环境问题
考虑到领导可能没有Python环境,我们可以利用第三方库pyinstaller
对代码进行打包,生成无需Python环境即可执行的程序。
安装pyinstaller
:
pip install pyinstaller
打包脚本:
pyinstaller -F http_server.py
打包完成后,在dist
目录下会生成一个可执行文件(例如http_server.exe
)。
将生成的.exe
文件移动到index.html
文件相同的目录下。运行.exe
文件。
访问提供的地址,即可成功查看Allure报告。
http_server下载链接
对于没有Python环境的朋友,可以通过网页版阿里云盘直接下载http_server.exe
文件: https://www.alipan.com/s/QNWwFz1QKAj