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. Mysql关联删除CSV中的相关数据

    问题描述:提供一个csv文件,记录的是一些不同数据库的不同表中的共同字段account_id数据,需要在A库的account表中做关联删除 解决思路:csv文件中储存的都是account_id,六位纯 ...

  2. 解决CKEditor中img标签自动添加style样式的问题-禁止自动设置width和height 帝国cms编辑器图片自动加宽高

    在使用CKEditor的过程中发现,每次上传或添加图片的时候,总会自动给img标签添加width和height的style内联样式.由于网站本身对图片有进行自适应处理(添加了自适应的CSS),所以im ...

  3. 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!

    开心一刻 中午和哥们一起喝茶 哥们说道:晚上喝酒去啊 我:不去,我女朋友过生日 哥们瞪大眼睛看着我:你有病吧,充气的过什么生日 我生气到:有特么生产日期的好吧 需求背景 系统对接了外部系统,调用外部系 ...

  4. 2022-04-26:给定一个数组componets,长度为A, componets[i] = j,代表i类型的任务需要耗时j 给定一个二维数组orders,长度为M, orders[i][0]代表i

    2022-04-26:给定一个数组componets,长度为A, componets[i] = j,代表i类型的任务需要耗时j 给定一个二维数组orders,长度为M, orders[i][0]代表i ...

  5. 2021-09-02:IP 到 CIDR。给定起始IP和整数n,返回长度最小的CIDR块。力扣751。比如:ip=255.0.0.7,n=10,输出:[“255.0.0.7/32“,“255.0.0.

    2021-09-02:IP 到 CIDR.给定起始IP和整数n,返回长度最小的CIDR块.力扣751.比如:ip=255.0.0.7,n=10,输出:["255.0.0.7/32" ...

  6. 安装Visio 2013与原本的office冲突的最终解决方案

    一. 下载office visio 2013 这个直接去网上下载一个安装包解压即可 或者直接云盘下载 https://pan.baidu.com/s/1jWGFoHAjegBBvyrL1rq4DQ 提 ...

  7. docker部署gitlab CI/CD (二)终篇:部署gitlab runner和添加gitlab-ci.yml文件 终极踩坑版

    关于gitlab部署的教程还好,有的看,但到了cicd环节,简直痛苦面具,教程虽多,但断断续续,先不说大部分都是只截取片段,让人云里雾里,不会的看不懂,懂的不需要看,根据步骤跑不起来不说,改了一堆,完 ...

  8. cv学习总结(11.14-11.20)

    本周主要完成了assignment2中的connected_layer部分的代码,跟assignment1中的two_layer_net相比,虽然整体思路都是实现全连接的网络,但是connect_la ...

  9. R 语言 download.file 的几点知识

    R 语言中,不管是安装包,还是下载数据,很多时候都会用到download.file这个函数.如果你在安装包或者下载数据过程中出现中断,或者异常,想要判断是远程源服务器的问题,还是自身服务器的问题,还是 ...

  10. 适用于Linux命令的10个R函数

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 这篇文章将介绍 10 个不同的 Linux 命令及其 R 实现方法. 如果您有兴趣学习更多 R ...