You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Behave测试的长耗时等待步骤中显示彩色进度条?

解决Behave+Rich进度条在彩色模式下显示异常的问题

问题原因

当Behave启用彩色输出时,它会使用ANSI转义码格式化文本,并且在打印步骤文本后不会立即换行(以便后续更新步骤状态,如标记为通过)。此时Rich进度条开始输出时会直接追加到该步骤行末尾,导致步骤文本与进度条混在一起。而在无彩色模式下,Behave会自动在步骤文本后换行,因此进度条能正常显示在新行。

解决方案

通过以下调整可以同时实现美观的彩色效果和正常的进度条显示:

  • 在彩色模式下手动添加换行,将进度条与步骤文本分隔开
  • 使用Rich的临时进度条,完成后自动清除,保持输出整洁
  • 为进度条添加彩色样式,增强视觉效果并兼容Behave的彩色输出

修改后的步骤实现代码

from rich.progress import Progress, BarColumn, TimeRemainingColumn
from rich.console import Console
import time

def check_if_user_exists_in_iam(cn):
    # 替换为你的IAM用户存在性检查逻辑
    # 示例:模拟检查过程
    import random
    return random.random() < 0.1  # 随机返回True/False,实际需替换为真实检查

@then('Wait for user {cn} to be created in IAM')
def step_impl(context, cn):
    console = Console()
    
    # 仅在彩色模式下添加换行,避免进度条与步骤文本重叠
    if context.config.color:
        console.print()
    
    total_wait_seconds = 180  # 最长等待3分钟
    
    with Progress(
        "[bold blue]等待IAM用户创建完成[/bold blue]",
        BarColumn(bar_width=None, style="cyan", complete_style="green"),
        TimeRemainingColumn(),
        transient=True,  # 完成后自动清除进度条
        console=console
    ) as progress:
        task = progress.add_task("", total=total_wait_seconds)
        
        user_created = False
        while not user_created and progress.tasks[task].remaining > 0:
            user_created = check_if_user_exists_in_iam(cn)
            
            if not user_created:
                time.sleep(1)
                progress.update(task, advance=1)
        
        if not user_created:
            raise AssertionError(f"用户 '{cn}' 未在{total_wait_seconds//60}分钟内完成创建")

预期输出效果

启用彩色模式时,进度条会显示在步骤文本的下一行,带有彩色样式:

Scenario Outline: Create User -- @1.1
    Given Open User Creation Page
    And Create new user
    When cn is jdoe
    And id is 12345
    And last name is "Doe"
    And first name is "John"
    And middle name is "S"
    And birth date is "02292004"
    And cell phone is "800-555-1212"
    And home email is "user.jdoe@gmail.com"
    And zip is "78651"
    Then Create user
    And Wait for user jdoe to be created in IAM
      等待IAM用户创建完成 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0:02:45
   ✅ Scenario Passed!

进度条完成后会自动消失,最终仅保留步骤和场景通过的提示。

内容的提问来源于stack exchange,提问作者Albert Chin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:55:21