写点什么

软件测试 / 测试开发丨 Pytest 测试框架学习笔记

作者:测试人
  • 2023-06-13
    北京
  • 本文字数:1188 字

    阅读完需:约 4 分钟

获取更多相关知识

本文为霍格沃兹测试开发学社学员学习笔记分享,文末附原文。

pytest 参数化用例

测试登录场景

  • 测试登录成功,登录失败(账号错误,密码错误)*

  • 创建多种账号: 中⽂文账号,英⽂文账号*


  • 普通测试用例方法

  • Copy 多份代码 or 读⼊入参数?*

  • 一次性执⾏多个输⼊入参数*

def test_param_login_ok():    # 登录成功    username = "right"    password = "right"    login(username,password)
def test_param_login_fail(): # 登录失败 username = "wrong" password = "wrong" login(username,password)
复制代码

参数化实现方案

  • pytest 参数化实现方法

  • 装饰器:@pytest.mark.parametrize

@pytest.mark.parametrize("username,password",[["right","right"], ["wrong","wrong"]])def test_param(username,password):    login(username,password)
复制代码

pytest 设置跳过、预期失败

Mark:跳过(Skip)及预期失败(xFail)

  • skip - 始终跳过该测试用例

  • 解决 1:添加装饰器 @pytest.mark.skip@pytest.mark.skipif

  • 解决 2:代码中添加跳过代码 pytest.skip(reason)

  • skipif - 遇到特定情况跳过该测试用例

  • xfail - 遇到特定情况,产生一个“期望失败”输出


    添加装饰器 @pytest.mark.xfail

pytest 命令行常用参数

—help-x 用例一旦失败(fail/error),就立刻停止执行–maxfail=num 用例达到-m 标记用例-k 执行包含某个关键字的测试用例-v 打印详细日志-s 打印输出日志(一般-vs 一块儿使用)—collect-only(测试平台,pytest 自动导入功能 )*

Python 代码执行 pytest

  • 使用 main 函数

if __name__ == '__main__':    # 1、运行当前目录下所有符合规则的用例,包括子目录(test_*.py 和 *_test.py)    pytest.main()    # 2、运行test_mark1.py::test_dkej模块中的某一条用例    pytest.main(['test_mark1.py::test_dkej','-vs'])    # 3、运行某个 标签    pytest.main(['test_mark1.py','-vs','-m','dkej'])
复制代码

运行方式 python test_*.py

  • 使用 python -m pytest 调用 pytest(jenkins 持续集成用到)

pytest 异常处理

  • 常用的异常处理方法*

  • try…except

try:    a = int(input("输入被除数:"))    b = int(input("输入除数:"))    c = a / b    print("您输入的两个数相除的结果是:", c)except (ValueError, ArithmeticError):    print("程序发生了数字格式异常、算数异常之一")except:    print("异常未知")print("程序继续运行")
复制代码
  • 异常处理方法 pytest.raise()

import pytest

def test_raise(): with pytest.raises(ZeroDivisionError, ValueError): raise ZeroDivisionError("除数为0")
def test_raise1(): with pytest.raises(ValueError) as exc_info: raise ValueError("value must be 42") assert exc_info.type is ValueError assert exc_info.value.args[0] == "value must be 42"
复制代码


原文链接:https://ceshiren.com/t/topic/24703

发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Pytest测试框架学习笔记_程序员_测试人_InfoQ写作社区