软件测试入门到精通-第9周-接口自动化测试-fixture实现测试控制+集成allure

🔧《Pytest跳过测试的艺术:让测试用例学会"偷懒"的正确姿势》幽默指南


在这里插入图片描述

🌟 核心原理:测试界的"请假条"系统
想偷懒
批准
条件批准
测试用例
举手申请
HR审批(@pytest.mark)
带薪休假skip
弹性办公skipif
提交证明文件

在这里插入图片描述

🎭 技术剧场:两幕喜剧

第一幕:《霸道测试不想跑》

import pytest

@pytest.mark.skip(reason="今天心情不好")  # 测试届的"姨妈假"
def test_import_data():
    """数据导入测试(其实只是不想干活)"""
    assert 1 + 1 == 3  # 故意写错反正也不会执行
    
# 执行效果:
# test_lazy.py::test_import_data SKIPPED (今天心情不好)

在这里插入图片描述

编剧笔记:

  • 🚨 紧急制动按钮:比Ctrl+C更优雅的终止方式
  • 📜 请假必备:没有reason就像请假不写原因(等着被HR追查吧)
  • 🤖 钢铁直男:说跳就跳,不带任何商量余地

第二幕:《看人下菜碟的测试》

@pytest.mark.skipif(
    not user_is_vip(),  # 检测是不是尊贵的VIP
    reason="穷X勿扰,VIP专属通道"  # 这理由写出来容易挨打
)
def test_exclusive_feature():
    """测试只有充钱才能变强的功能"""
    assert make_magic() == "pay_to_win"

参数黑话词典:

装X参数真实含义社畜示例生存技巧
条件表达式找借口的能力time.localtime().tm_hour < 9(上午9点前不起床)能用lambda绝不用if
reason请假演技“生产环境着火啦”(其实只是忘写代码)字数越多显得越真实

在这里插入图片描述

💼 职场生存对照表
摸鱼场景对应代码专业话术实际心理
不想改祖传代码@pytest.mark.skip“保持历史稳定性”“动一下可能会炸”
环境配置太麻烦skipif(not has_docker())“确保环境一致性”“装docker好累啊”
新功能还没写完skipif(True, reason="设计评审中")“遵循开发流程”“产品经理又改需求”
躲避性能测试skipif(not is_benchmark_day())“专注功能验证”“我的代码像蜗牛”

💣 作死行为大赏
  1. 语法迷惑行为

    • 💥 作死写法:@pytest.jump(你以为在玩超级玛丽?)
    • 🧠 正确咒语:"mark.skip"才是正经请假流程
  2. 条件翻车现场

    # 年度迷惑行为大奖
    @pytest.mark.skipif(1 == 1, reason="因为数学真理")  # 这条件永远成立!
    
    # 高情商写法
    @pytest.mark.skipif(not is_my_birthday(), reason="寿星最大")
    
  3. 作用域认知误区

    • 试图用装饰器跳过整个模块(醒醒,得每个用例单独写)
    • 在fixture里用skip(应该用pytest.skip()动态跳楼…哦不,跳过)

在这里插入图片描述

🕵️ 侦探技巧:抓出假条伪造者

1. 查看请假记录

pytest -rs  # 'r'=查看理由(reason),'s'=抓偷懒(skipped)

2. 集体旷工模板

# conftest.py里的黑暗兵法
def pytest_runtest_setup(item):
    if "stress" in item.name and not has_coffee():
        pytest.skip("咖啡因不足,拒绝压力测试") 

3. 智能偷懒系统

# 自动检测老板距离
def boss_is_near():
    return wifi_ssid() == "Boss_5G_Hotspot"

@pytest.mark.skipif(boss_is_near(), reason="老板靠近中,假装在测试")
def test_important():
    print("正在努力工作...(假装)")

在这里插入图片描述

📅 版本更新生存手册
Pytest年代重大变革摸鱼适应策略
远古时期(3.0前)需要额外装请假条插件要么升级要么多装个包
工业革命(5.0)取消直接@pytest.skip记住一定要走mark人力资源部
赛博时代(7.0+)reason变成必填项请假理由要编得更认真

💡 专业建议:把这套"偷懒"技术写到pytest.ini里,让你的测试代码拥有带薪年假般的优雅~

🤖 当Allure遇上Fixture:测试报告的艺术与科学

作为一名曾因测试报告被项目经理"追杀"的程序员,我想分享如何用Allure和Fixture打造让老板点头的自动化测试报告——毕竟,好看的报告是通往加薪的捷径!

🛠️ 环境搭建:从"秃头"到"秀发"

1. Allure安装:优雅如喝下午茶

# 先确保你安装了pytest和allure-pytest
pip install pytest allure-pytest

# 验证安装是否成功(别像我第一次输错命令)
pytest --version  # 应该输出类似 7.1.2
allure --version  # 应该输出类似 2.18.1

避坑指南

  • 如果报"allure不是内部命令",可能是你把环境变量配到了"用户变量"而不是"系统变量"(别问我怎么知道的)
  • 路径中有空格?比如"C:\Program Files\allure"?恭喜你获得一个周末debug大礼包!

2. Java环境:老古董也有春天

# 假装这是一段检查Java版本的代码
import subprocess

def check_java():
    try:
        result = subprocess.run(['java', '-version'], 
                              stderr=subprocess.PIPE, 
                              text=True)
        print("你的Java版本是:", result.stderr.split('\n')[0])
    except FileNotFoundError:
        print("Java未安装!快去Oracle官网下载JDK8")

职场生存技巧
当项目经理问"为什么环境还没好"时,你可以优雅地说:“我在等待Oracle的注册验证邮件”(实际上你正在刷微博)

🎨 Fixture与Allure的"罗曼史"

在这里插入图片描述

基础版Fixture - 像写情书一样写测试

import pytest
import allure

@pytest.fixture
def login_setup():
    with allure.step("准备登录数据"):
        user = {"username": "test_user", "password": "123456"}
    yield user
    with allure.step("清理登录痕迹"):
        print("假装这里清理了cookie")

@allure.feature("登录模块")
def test_login(login_setup):
    with allure.step("输入用户名密码"):
        print(f"正在使用{login_setup['username']}登录")
    
    with allure.step("点击登录按钮"):
        # 假装点击了登录按钮
        assert True
        
    with allure.step("验证登录成功"):
        allure.attach("登录成功截图", "假装这是截图二进制数据", allure.attachment_type.PNG)

高阶玩法 - 给你的报告加点"特效"

import random

@pytest.fixture(scope="module")
def db_connection():
    with allure.step("建立数据库连接"):
        print("假装连接了数据库")
        yield "active_connection"
        with allure.step("关闭数据库连接"):
            print("假装关闭了连接")

@allure.feature("数据库测试")
@allure.story("CRUD操作")
class TestDatabase:

    @allure.severity(allure.severity_level.CRITICAL)
    @allure.title("测试数据插入")
    def test_insert(self, db_connection):
        with allure.step("生成测试数据"):
            test_data = {"id": random.randint(1000, 9999)}
            
        with allure.step("执行插入操作"):
            allure.attach(str(test_data), "插入的数据", allure.attachment_type.TEXT)
            assert db_connection == "active_connection"
            
    @allure.severity(allure.severity_level.NORMAL)
    @allure.title("测试数据查询")
    def test_query(self, db_connection):
        with allure.step("执行查询操作"):
            result = ["数据1", "数据2"]
            allure.attach('\n'.join(result), "查询结果", allure.attachment_type.TEXT)
            assert len(result) > 0

📊 生成报告:让数据讲故事

运行测试并生成报告:

pytest --alluredir=./allure_results
allure serve ./allure_results

报告解读技巧

  • 绿色的勾:发给老板看
  • 红色的叉:凌晨3点偷偷修复
  • 黄色的感叹号:假装是测试环境问题

💡 职场加分项

  1. 给报告加点"人情味"

    @allure.epic("电商系统测试")
    @allure.feature("购物车模块")
    @allure.story("用户添加商品到购物车")
    @allure.description("""
    这是一个非常复杂的测试案例,涉及到:
    - 用户登录状态检查
    - 商品库存验证
    - 购物车容量限制
    我花了3天时间才写出这个测试,求加薪!
    """)
    def test_add_to_cart():
        pass
    
  2. 失败时自动截图(需要配合Selenium等UI自动化工具):

    @pytest.fixture
    def browser(request):
        driver = webdriver.Chrome()
        yield driver
        if request.node.rep_call.failed:
            allure.attach(driver.get_screenshot_as_png(),
                         name="失败截图",
                         attachment_type=allure.attachment_type.PNG)
        driver.quit()
    

🎯 考试重点(老板关心啥)

  1. Allure报告三要素

    • 步骤清晰(用with allure.step
    • 附件丰富(截图、日志、数据)
    • 分类明确(Feature/Story/Epic)
  2. Fixture使用原则

    • 作用域越小越好(function < class < module < session)
    • 不要在一个fixture里做太多事(像极了不要把所有功能写在一个函数里)
  3. 环境问题终极甩锅指南

    try:
        执行测试()
    except Exception as e:
        allure.attach("错误日志", str(e), allure.attachment_type.TEXT)
        pytest.skip(f"跳过测试,因为环境问题:{str(e)}")
    

记住,好的测试报告就像好的简历——要让看的人快速找到重点,同时隐藏你的不足(比如那个凌晨3点偷偷修复的bug)。现在,去生成让团队惊艳的Allure报告吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝花楹下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值