写点什么

软件测试丨 Pytest- 运行用例、常用参数、执行 pytest、异常处理

作者:测试人
  • 2023-05-10
    北京
  • 本文字数:1334 字

    阅读完需:约 4 分钟

本文为霍格沃兹测试开发学社学员笔记分享

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

1、pytest 运行用例

运行用例

运行多条用例

  • 运行 某个/多个 用例包

  • 运行 某个/多个 用例模块

  • 运行 某个/多个 用例类

  • 运行 某个/多个 用例方法

运行多条用例方式

  • 执行包下所有的用例:pytest/py.test [包名]

  • 执行单独一个 pytest 模块:pytest 文件名.py

  • 运行某个模块里面某个类:pytest 文件名.py::类名

  • 运行某个模块里面某个类里面的方法:pytest 文件名.py::类名::方法名


pytest 执行当前目录及子目录下所有符合条件的测试用例


执行单独一个 pytest 模块


执行某个类,加-v 展示具体执行的哪个


运行结果分析

  • 常用的:fail/error/pass

  • 特殊的结果:warning/deselect(后面会讲)

2、pytest 测试用例调度与运行

命令行参数-使用缓存状态

  • --lf(--last-failed) 只重新运行故障。

  • --ff(--failed-first) 先运行故障然后再运行其余的测试


只运行上次失败的用例,如果上次没有失败的就全部运行


失败的在中间


先执行失败的,在执行其他的


3、常用命令行参数

命令行参数 - 常用命令行参数

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



有失败的,其他不执行就加-x


发现失败的就停止执行了,第二条失败了,后面都不执行了


最多可以有几个错误用例数,达到后就停止执行了


运行名字中包含 str 的用例


其他用例未被命中



只收集不运行

4、python 执行 pytest

Python 代码执行 pytest

  • 使用 main 函数

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

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 `
复制代码



在 main 里面设置完后,直接用 python 执行对应模块,相当于在命令行中执行 pytest


另一种执行方式,命令行中在 pytest 前面输入 python -m

5、pytest 异常处理

常用的异常处理方法

  • try…except

  • pytest.raises()

异常处理方法 try …except

try:    可能产生异常的代码块except [ (Error1, Error2, ... ) [as e] ]:    处理异常的代码块1except [ (Error3, Error4, ... ) [as e] ]:    处理异常的代码块2except  [Exception]:    处理其它异常
复制代码



异常处理方法 pytest.raise()

  • 可以捕获特定的异常

  • 获取捕获的异常的细节(异常类型,异常信息)

  • 发生异常,后面的代码将不会被执行

pytest.raise() 用法

异常处理方法 pytest.raise()

def test_raise():    with pytest.raises(ValueError, match='must be 0 or None'):        raise ValueError("value must be 0 or None")
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"
复制代码


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

测试人

关注

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

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

评论

发布
暂无评论
软件测试丨Pytest-运行用例、常用参数、执行pytest、异常处理_软件测试_测试人_InfoQ写作社区