给你的Python自动化测试加个进度条~~~

在自动化测试中,实时了解测试进度对于提升测试效率和用户体验至关重要。​Python 提供了多个库来实现进度条显示,其中 pytest-sugartqdm 是最常用的两个。

自动化测试是软件开发中确保代码质量的重要环节,尤其是在使用 Python 时,pytest 是最流行的测试框架之一。为了增强测试的可视性和用户体验,可以为测试过程添加进度条。pytest-sugar 是一个为 pytest 增强输出的插件,而 tqdm 是一个通用的进度条库,适用于任何 Python 迭代器。

研究表明,进度条可以显著提高测试的可读性和监控效率,尤其是在测试用例较多或测试过程较长时。pytest-sugar 主要关注测试套件的整体进度,而 tqdm 则适合在测试函数内部显示具体任务的进度。

我们在执行自动化测试或者调试时,自动化测试用例数量过多,不清楚目前用例数执行了多少个了,还差多少个执行完成。

这时候就会猜想,如果执行过程中存在进度条,就很清楚的了解到测试用例的执行情况,今天小编通过下面两种方法简单介绍如何在自动化测试时加入进度条。

pytest-sugar

pytest-sugar是属于pytest的一个插件,想要对自动化测试用例加入进度条时,我们就可以通过该插件进行实现。

安装:pip install pytest-sugar

使用:安装完成后,正常运行程序即可。

小编通过实例进行展示下如何使用,首先编写几个简单的测试用例,方面运行程序:

# coding:utf-8

import pytest


def test_01():
    print('这是测试用例01')
def test_02():
    print('这是测试用例02')
def test_03():
    print('这是测试用例03')

通过cmd执行程序(这里小编电脑上安装的有,所有执行时加入对应参数,不调用),页面没有显示任何进度条内容。

再次通过cmd执行程序,页面上显示对应的进度条内容,且通过的测试用例处,显示对号的图标,表示用例执行通过。

当用例中存在失败时,就会显示x图标来显示用例失败。

当我们使用过程中如果不想显示进度条,可以卸载pytest-sugar或者通过命令行在执行程序时加入 pytest test01.py -p no:sugar从而达到不允许进度条的显示。

tqdm

上面小编介绍的属于pytest中插件的进度条显示,这个tqdm属于python中的第三方库,可以在python中添加一个进度条信息,属于一个快速,扩展性比较强的进度条工具库了。

接下来和小编一起认识下如何在自动化测试中使用吧。

安装:pip install tqdm

使用方法:导入库后,通过for进行循环,将其包装在tqdm中,tqdm会自动显示进度进度条,并循环结束后自动关闭。

# coding:utf-8

from tqdm import tqdm


import time
for i in tqdm(range(100)):
    time.sleep(0.1)

通过在cmd中运行程序后,会发现进度条自动执行并达到100%结束。

图片

那么如何将tqdm使用到我们的自动化测试中呢?

有的小伙伴们肯定会说直接将测试用例添加到for循环中,但是这样就导致了测试用例会根据for循环的次数,进行依次执行。这样肯定是不行的,我们需要将进度条正常运行,但是用例只执行1次。大家可以一起想想,这里小编我们使用了列表的方式,实现了这个功能。

1.首先讲测试用例编写完成;

2.创建一个列表,将测试用例依次添加到列表中;

3.通过for循环读取列表,依次执行测试用例并且将进度条打印出来。

 
 

from tqdm import tqdm
import time


# 创建一个测试集
test_cases = []
def test_01():
    print('这是测试用例01')
def test_02():
    print('这是测试用例02')
def test_03():
    print('这是测试用例03')
# 分别将对应的测试用例添加到列表中
test_cases.append(test_01)
test_cases.append(test_02)
test_cases.append(test_03)
# 通过tqdm 展示进度条显示,其中tqdm的设置次数为执行用例的总数
with tqdm(total=len(test_cases))as pbar:
    for case in test_cases:
        case()  # 执行测试用例
        time.sleep(0.1)
        pbar.update(1)  # 更新进度条显示

通过上面的思路,小编这里写了一些代码,然后我们通过cmd运行已经可以将进度条显示出来了。

功能区别与组合使用

功能对比
  • pytest-sugar:专注于测试套件的整体进度,显示测试用例的运行状态,包括通过、失败和跳过的数量。适合监控整个测试过程。
  • tqdm:专注于测试函数内部的特定任务,适合显示循环或迭代器的进度。适合需要实时反馈的耗时操作。

研究表明,两者可以一起使用,提供多层次的进度监控。例如:

  • 使用 pytest-sugar 查看测试套件的整体进度。
  • 在某些测试函数中使用 tqdm 显示内部操作的进度。
组合使用示例

假设有一个测试套件,包含多个测试函数,其中一个函数需要处理大量数据:

import time
from tqdm import trange


def test_simple():
    assert True

def test_data_processing():
    for i in trange(100):
        time.sleep(0.1)  # 模拟数据处理
    assert True

运行测试时,使用 pytest --sugar,你会看到:

  • pytest-sugar 的进度条显示整个测试套件的运行状态。
  • 在 test_data_processing 函数中,tqdm 的进度条显示数据处理的进度。

然而,证据也显示,两者一起使用可能导致输出重叠。例如,pytest-sugar 的进度条可能与 tqdm 的进度条同时显示,影响可读性。建议在 tqdm 中设置 leave=False,使进度条完成后不保留:

for i in trange(100, leave=False):
    time.sleep(0.1)

这可以保持输出整洁。

注意事项与最佳实践

输出管理
  • 在 CI/CD 环境中,进度条可能不显示或显示不完整,建议仅在本地调试时使用。
  • 如果输出重叠,考虑调整 tqdm 的参数,如 ncols 设置进度条宽度,或使用 disable=True 在不需要时禁用。
性能影响
  • tqdm 的进度条对性能影响较小,但如果测试函数中有大量快速迭代,可能会略微增加开销。
  • pytest-sugar 的性能影响通常可以忽略,但建议在测试用例较多时测试其对运行时间的影响。
适用场景
  • pytest-sugar:适合大型测试套件,需监控整体进度。
  • tqdm:适合测试函数中有耗时操作,如数据处理、文件读取或 API 调用。

功能区别

  • pytest-sugar 适合显示测试套件的整体进度,告诉你当前运行了多少测试用例。
  • tqdm 适合在测试函数内显示具体任务的进度,比如处理大量数据时的循环。

注意事项

  • 两者一起使用时,输出可能重叠,建议在 tqdm 中设置 leave=False 保持输出整洁。
  • 在 CI/CD 环境中,进度条可能不显示,适合本地调试。

综合使用建议

  • pytest-sugar 适用于使用 pytest 运行测试用例时,自动美化输出并添加进度条,无需修改现有测试代码,安装后即自动生效。​

  • tqdm 适用于自定义的测试流程,特别是在需要手动控制测试执行顺序或在非 pytest 环境下运行测试时,可通过显式调用来添加进度条。

总结

通过 pytest-sugar 和 tqdm,你可以为自动化测试添加多层次的进度条。pytest-sugar 提供测试套件的整体进度,适合监控整个测试过程;tqdm 则适合在测试函数内显示具体任务的进度。建议根据测试需求选择使用,并注意管理输出以保持可读性。

这里小编已经将关于自动化测试用例中如何添加进度条的方法已经介绍完了,当然方法不仅仅只有这2种。自动化测试中加入进度条如何添加到对应项目中,就需要小伙伴们根据公司中的项目进行结合展示。感谢您的阅读,希望对您有所帮助。