PyCharts 简介

PyCharts 是一个基于 Python 的数据可视化库,它支持多种图表类型,如折线图、柱状图、饼图等。PyCharts 提供了简洁的 API,使得用户能够轻松地创建各种图表,同时支持个性化的配置,以满足不同需求。PyCharts 的底层依赖于 ECharts,这使得它在功能和性能上都具有很高的优势。

PyCharts 的安装

PyCharts 的安装非常简单,只需在命令行中输入以下命令:

pip install pyecharts

安装完成后,即可在 Python 代码中导入 PyCharts 库并开始使用。

作为软件测试工程师,我们经常需要处理测试过程中的数据。文不如表、表不如图,通过 PyCharts,我们可以轻松的将这些数据以直观的形式展示出来,从而更好地分析问题、汇报进度。

缺陷统计

在软件测试过程中,我们需要对发现的缺陷进行统计和分析。以下代码演示了如何使用 PyCharts 创建一个饼图,展示各个严重级别的缺陷数量:

from pyecharts.charts import Pie
from pyecharts import options as opts pie = Pie()
pie.add("", [("建议", 33), ("一般", 45), ("严重", 20), ("致命", 2)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="缺陷严重级别统计"))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
pie.render()

执行上面的代码会自动的在同级目录生成一个 render.xml 文件,使用浏览器打开就可以看到展示了不同严重级别的缺陷数量及其占比的饼图。我们可以依据这个图更好地制定测试策略和优先级。

当然,我们也可以在 render 之前加上下面这段代码来指定颜色,得到下面这张图:

# 指定颜色
colors = ["#0000FF", "#4169E1", "#1E90FF", "#00BFFF"]
pie.set_colors(colors)

测试用例执行情况

在执行测试用例时,我们需要关注测试用例的执行情况,如通过率、失败率等。以下代码演示了如何使用 PyCharts 创建一个堆叠柱状图,展示各个模块的测试用例执行情况:

from pyecharts.charts import Bar
from pyecharts import options as opts bar = Bar()
bar.add_xaxis(["模块A", "模块B", "模块C", "模块D", "模块E"]) # 添加通过和失败的数据,并设置为堆叠模式
bar.add_yaxis("通过", [90, 80, 70, 60, 50], stack="总量")
bar.add_yaxis("失败", [10, 20, 30, 40, 50], stack="总量") # 设置全局选项,包括标题
bar.set_global_opts(title_opts=opts.TitleOpts(title="测试用例执行情况"),) # 设置系列选项,包括标签格式
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="outside", formatter="{c}%")) # 显示百分比的标签格式 bar.render()

这段代码创建了一个堆叠柱状图,展示了各个模块的测试用例通过和失败数量。通过这样的图表,我们可以直观地了解到各个模块的测试情况,从而更好地调整测试计划和资源分配。

使用JavaScript情况

因为pycharts 底层基于 ECharts,所以 JavaScript代码也可以在脚本中使用。

在 Python 中调用 JavaScript 代码:

from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode bar = Bar()
bar.add_xaxis(["模块A", "模块B", "模块C", "模块D", "模块E"]) passed_cases = [90, 75, 76, 69, 58] # 添加通过和失败的数据,并设置为堆叠模式
bar.add_yaxis(
"通过",
passed_cases,
stack="总量",
label_opts=opts.LabelOpts(is_show=False) # 隐藏通过用例的标签
) # 使用回调函数计算失败用例的百分比
failure_percentage = f"""
function(params) {{
var passed_cases = {passed_cases};
var total = params.value + passed_cases[params.dataIndex];
var percentage = (params.value / total) * 100;
return percentage.toFixed(2) + '%';
}}
""" bar.add_yaxis(
"失败",
[10, 20, 30, 40, 50],
stack="总量",
label_opts=opts.LabelOpts(
is_show=True, position="inside", formatter=JsCode(failure_percentage)
) # 显示失败用例的标签
) # 设置全局选项,包括标题
bar.set_global_opts(
title_opts=opts.TitleOpts(title="测试用例执行情况"),
) bar.render()

缺陷趋势分析

在项目进展过程中,我们需要关注缺陷的趋势,以评估项目质量和进度。以下代码演示了如何使用 PyCharts 创建一个折线图,展示项目中缺陷的趋势变化:

from pyecharts.charts import Line
from pyecharts import options as opts # 创建 Line 对象
line = Line() # 添加 x 轴数据
line.add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"]) # 新增问题单和已修复问题单的数据
new_defects = [50, 35, 28, 20, 5]
fixed_defects = [5, 20, 30, 33, 50] # 计算剩余未修复的问题单
remaining_defects = []
cumulative_new_defects = 0
cumulative_fixed_defects = 0 # 遍历新增问题单和已修复问题单的数据
for new, fixed in zip(new_defects, fixed_defects):
# 累积计算新增问题单和已修复问题单的数量
cumulative_new_defects += new
cumulative_fixed_defects += fixed # 计算剩余未修复的问题单,并将结果添加到 remaining_defects 列表中
remaining_defects.append(cumulative_new_defects - cumulative_fixed_defects) # 向图表中添加 y 轴数据系列
line.add_yaxis("新增缺陷", new_defects)
line.add_yaxis("已修复缺陷", fixed_defects)
line.add_yaxis("剩余未修复问题单", remaining_defects) # 设置全局选项,包括标题
line.set_global_opts(title_opts=opts.TitleOpts(title="缺陷趋势分析")) # 渲染图表
line.render()

这段代码创建了一个折线图,展示了项目中新增缺陷和已修复缺陷的数量变化。通过这样的图表,我们可以直观地了解到项目的质量趋势,从而更好地制定测试策略和计划。

将两张图放在一个组合里(grid)

体现随着时间的变化,执行用例和 bug 情况的变化:

from pyecharts.charts import Line, Bar, Grid
from pyecharts import options as opts # 创建 Line 对象 new_defects = [50, 35, 28, 20, 5]
fixed_defects = [5, 20, 30, 33, 50] remaining_defects = []
cumulative_new_defects = 0
cumulative_fixed_defects = 0 for new, fixed in zip(new_defects, fixed_defects):
cumulative_new_defects += new
cumulative_fixed_defects += fixed
remaining_defects.append(cumulative_new_defects - cumulative_fixed_defects) line = (Line().add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"]).add_yaxis("新增缺陷", new_defects)
.add_yaxis("已修复缺陷", fixed_defects)
.add_yaxis("剩余未修复问题单", remaining_defects)
# 设置全局选项,包括标题
.set_global_opts(title_opts=opts.TitleOpts(title="缺陷趋势分析"),
legend_opts=opts.LegendOpts(pos_top="48%"),) )
# 添加执行用例数的数据
executed_cases = [150, 170, 195, 110, 86] # 创建 Bar 对象
bar = (Bar().add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"])
.add_yaxis("执行用例数", executed_cases)
) # 创建 Grid 对象,并添加 Line 和 Bar 图表
grid = (Grid().
add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).
add(line, grid_opts=opts.GridOpts(pos_top="60%"))) # 渲染图表
grid.render()

将两张图重叠成一张图(overlap)

from pyecharts.charts import Line, Bar
from pyecharts import options as opts # 创建 Bar 对象
bar = Bar()
bar.add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"]) # 添加执行用例数的数据
executed_cases = [15, 17, 19.5, 11, 3]
bar.add_yaxis("执行用例数(/百条)", executed_cases) # 创建 Line 对象
line = Line()
line.add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"]) new_defects = [50, 35, 28, 20, 5]
fixed_defects = [5, 20, 30, 33, 40] remaining_defects = []
cumulative_new_defects = 0
cumulative_fixed_defects = 0 for new, fixed in zip(new_defects, fixed_defects):
cumulative_new_defects += new
cumulative_fixed_defects += fixed
remaining_defects.append(cumulative_new_defects - cumulative_fixed_defects) # 设置 is_smooth=True 参数使折线平滑显示
line.add_yaxis("新增缺陷", new_defects)
line.add_yaxis("已修复缺陷", fixed_defects)
line.add_yaxis("剩余未修复问题单", remaining_defects) # 使用 overlap() 方法将 Line 图表叠加到 Bar 图表中
bar.overlap(line) # 设置全局选项,包括标题
bar.set_global_opts(title_opts=opts.TitleOpts(title="缺陷趋势分析")) # 渲染图表
bar.render()

将多张图组合在一个page 中(page)

from pyecharts.charts import Line, Bar, Page, Pie, Grid
from pyecharts import options as opts # 创建 Line 对象
new_defects = [50, 35, 28, 20, 5]
fixed_defects = [5, 20, 30, 33, 50] remaining_defects = []
cumulative_new_defects = 0
cumulative_fixed_defects = 0 for new, fixed in zip(new_defects, fixed_defects):
cumulative_new_defects += new
cumulative_fixed_defects += fixed
remaining_defects.append(cumulative_new_defects - cumulative_fixed_defects) line = (Line().add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"]).add_yaxis("新增缺陷", new_defects)
.add_yaxis("已修复缺陷", fixed_defects)
.add_yaxis("剩余未修复问题单", remaining_defects)
# 设置全局选项,包括标题
.set_global_opts(title_opts=opts.TitleOpts(title="趋势分析(缺陷/用例)"),
legend_opts=opts.LegendOpts(pos_top="48%"),) )
# 添加执行用例数的数据
executed_cases = [150, 170, 195, 110, 86] # 创建 Bar 对象
bar = (Bar().add_xaxis(["第一周", "第二周", "第三周", "第四周", "第五周"])
.add_yaxis("执行用例数", executed_cases)
) # 创建 Grid 对象,并添加 Line 和 Bar 图表
grid = (Grid().
add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).
add(line, grid_opts=opts.GridOpts(pos_top="60%"))
) # 渲染图表
grid.render() pie = Pie()
pie.add("", [("建议", 33), ("一般", 45), ("严重", 20), ("致命", 2)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="缺陷严重级别统计"))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
# 指定颜色
colors = ["#0000FF", "#4169E1", "#1E90FF", "#00BFFF"]
pie.set_colors(colors) # 创建 Page 对象,并添加图表
page = Page()
page.add(grid)
page.add(pie) # 渲染图表
page.render()

实际应用:常态化性能压测数据统计

import random
from pyecharts.charts import Line, Bar, Grid, Pie, Page
from pyecharts import options as opts
# 查询过去 8 次数据
time_range = 8 interface = ['充值', '赠送', '支付', '支付回退', '预授权']
bar = (
Bar()
.add_xaxis(interface)
.add_yaxis("支付", [113, 106, 122, 128, 128, 55, 45])
.add_yaxis("券", [75, 46, 75, 65, 118, 15, 70])
.add_yaxis("限额限频", [173, 146, 175, 165, 218, 115, 170])
.add_yaxis("全流程", [65, 46, 70, 65, 108, 45, 40])
.set_global_opts(title_opts=opts.TitleOpts(title="TPS(当前版本)"))
)
line = Line().add_xaxis([f"2023-07-0{i} 05:04:2{i}" for i in range(1, time_range)]). \
add_yaxis(interface[0], [random.randint(100, 150) for _ in range(time_range)]) for i, inter in enumerate(interface):
line.add_yaxis(inter, [random.randint(10 * (i + 1), 100) for _ in range(time_range)],
label_opts=opts.LabelOpts(is_show=False))
line.set_global_opts(
title_opts=opts.TitleOpts(title="性能趋势(支付)", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
yaxis_opts=opts.AxisOpts(
name="TPS",
axislabel_opts=opts.LabelOpts(is_show=False), # 设置label_opts参数
)
) grid = Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add(line, grid_opts=opts.GridOpts(pos_top="60%")) pie = Pie()
pie.add("-", [("已剔除", 2), ("梳理中", 2), ("已完成", 15), ("优化中", 13), ("时间规划中", 13)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="摸底系统统计"), )
# - `{a}`:表示系列名称。`{b}`:表示数据类别 `{c}`:表示数据值(如10、25、50和15)。`{d}`:表示数据所占的百分比。- `{@[index]}`:表示数据数组中索引为`index`的值。
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{a}{b}: {c} ({d}%)")) page = Page()
page.add(grid)
page.add(pie)
page.render()

总结

PyCharts 是一个功能强大、易于使用的 Python 数据可视化库。本文以测试工程师的日常工作中的一些数据举例,演示了如何展示测试数据,从而提高工作效率,更好地服务于项目进展。本文仅介绍了 PyCharts 的基本使用和一些常见的应用场景,实际上 PyCharts 还有更多的功能等待我们去探索。希望本文能对大家的工作带来帮助。

【Python】数据可视化利器PyCharts在测试工作中的应用的更多相关文章

  1. 【python可视化系列】python数据可视化利器--pyecharts

    学可视化就跟学弹吉他一样,刚开始你会觉得自己弹出来的是噪音,也就有了在使用python可视化的时候,总说,我擦,为啥别人画的图那么溜: [python可视化系列]python数据可视化利器--pyec ...

  2. Python数据可视化利器Matplotlib,绘图入门篇,Pyplot介绍

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在 ...

  3. python数据可视化-matplotlib入门(6)-从文件中加载数据

    前几篇都是手动录入或随机函数产生的数据.实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化. 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数 ...

  4. Python数据可视化编程实战——导入数据

    1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...

  5. Python数据可视化——使用Matplotlib创建散点图

    Python数据可视化——使用Matplotlib创建散点图 2017-12-27 作者:淡水化合物 Matplotlib简述: Matplotlib是一个用于创建出高质量图表的桌面绘图包(主要是2D ...

  6. Python数据可视化编程实战pdf

    Python数据可视化编程实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1vAvKwCry4P4QeofW-RqZ_A 提取码:9pcd 复制这段内容后打开百度 ...

  7. python --数据可视化(一)

    python --数据可视化 一.python -- pyecharts库的使用 pyecharts--> 生成Echarts图标的类库 1.安装: pip install pyecharts ...

  8. Python数据可视化基础讲解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:爱数据学习社 首先,要知道我们用哪些库来画图? matplotlib ...

  9. 《数据可视化之美》高清PDF全彩版|百度网盘免费下载|Python数据可视化

    <数据可视化之美>高清PDF全彩版|百度网盘免费下载|Python数据可视化 提取码:i0il 内容简介 <数据可视化之美>内容简介:可视化是数据描述的图形表示,旨在一目了然地 ...

  10. python数据可视化编程实战PDF高清电子书

    点击获取提取码:3l5m 内容简介 <Python数据可视化编程实战>是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python最流行的库,通过60余种方法创建美观的数 ...

随机推荐

  1. Android View的事件分发机制-源码解析

    为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志: 然后把我们自定义的按钮加到主布局文件中: public clas ...

  2. 如何在 .NET Core WebApi 中处理 MultipartFormDataContent

    最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码.这些地方从 .NET Framework 迁移到 .NET C ...

  3. 搭建CTF动态靶场

    前言 本文借鉴文章:https://www.yuque.com/dengfenglai-esbap/kb/mc4k41?#xOxNG 在此基础上修改了一点(照着原来的做没成功),感谢这位师傅给的资源. ...

  4. JVM调优笔记(一)--Nacos GC引发的服务批量下线问题

    故障背景 线上批量发服务下线的告警邮件,偶发nacos连接超时.采用了spring boot admin(以下称sba)进行服务监控. 原因分析 因为sba服务是基于nacos对其它服务进行监控,所以 ...

  5. vue3.0

    https://www.yuque.com/gdnnth/vue-v3 http://www.liulongbin.top:8085/#/ https://www.yuque.com/woniuppp ...

  6. AGC061 F Perfect String

    毒瘤出题人,史诗加强 AGC 的 F-- 然而我连原题都不会,所以只学了原题做法. 翻译一下题意就是给定一张循环网格图,求经过 \((0,0)\) 的闭合回路条数. 由于网格图中每一个位置都等价,所以 ...

  7. Unity开发Hololens2—交互发布配置

    Unity开发Hololens2-交互发布配置 环境配置 unity2021.3.15f visual studio 2019 pro MRTK 2.8.3 OpenXR 1.8.0 Hololens ...

  8. Solon 统一的返回结果调整

    使用 "统一的渲染控制" 可以对输出做统一的控制外...还可以借助路由拦截器 RouterInterceptor ,对 mvc 返回结果做提交确认机制(即可修改)进行控制(相对来讲 ...

  9. Jupyter Notebook(或vscode插件) 一个cell有多个输出

    方法一 在文件的开头加上如下代码,该方法仅对当前文件有效 from IPython.core.interativeshell import InteractiveShell InteractiveSh ...

  10. 大家都在用-神奇的Markdown格式

    概述 Markdown 是一种轻量级标记语言,它可以使我们专注于写作内容,而不用过多关注排版,很多博主.作家等都用它来撰写文章~ 本文将给各位小伙伴介绍 Markdown 语法的使用,本篇文章索奇就是 ...