欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Pytest自动化测试框架入门指南:必备基础知识第一弹

最编程 2024-01-15 22:16:57
...

pytest 是一个使构建简单和可伸缩的测试变得容易的框架。测试具有表达性和可读性,不需要样板代码。几分钟后就可以开始对应用程序或库进行小的单元测试或复杂的功能测试。

安装 pytest

  1. 在命令行中运行以下命令:
pip install -U pytest
  1. 检查是否安装了正确的版本:
$ pytest --version
pytest 6.2.1

第一个测试用例

# --*-- conding:utf-8 --*--
# @Time : 2023/4/3 下午8:55
# @Author : lw
# @File : test_one.py
# @Software : PyCharm

def test_passing():
    assert (1,2,3) == (1,2,3)

$ pytest test_one.py
================ test session starts =====================
platform darwin – Python 3.8.3, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /test-for-pytest/ch1
plugins: xdist-2.3.0, allure-pytest-2.9.43, rerunfailures-10.1, repeat-0.9.1, forked-1.3.0
collected 1 item

test_one.py . [100%]

=============== 1 passed in 0.04s ===========================================

test_one.py后面的一个点(.)表示:运行了一个测试案例,且测试通过。如果想查看详情可以在后面加上-v或者 --verbose选项。

test_one.py .                                                                                                                                                        [ 50%]
test_tow.py F                                                                                                                                                        [100%]

====================================== FAILURES =================================================================================
_______________________________________________________________________________ test_passing _______________________________________________________________________________

    def test_passing():
>       assert (1,2,3) == (1,2,4)
E       assert (1, 2, 3) == (1, 2, 4)
E         At index 2 diff: 3 != 4
E         Use -v to get the full diff

test_tow.py:8: AssertionError
================================ short test summary info =====================================
FAILED test_tow.py::test_passing - assert (1, 2, 3) == (1, 2, 4)
======================================================================= 1 failed, 1 passed in 0.16s ========================================================================

第一次测试通过,第二次失败。您可以很容易地看到断言中的中间值,以帮助您理解失败的原因。

Pytest -v 命令可以展示详细的成功案例与失败案例信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5cn4Ecj7-1680529782656)(/Users/liwei/Library/Application Support/typora-user-images/image-20230403210610429.png)]

1.1资源获取

通过pip可以获取资源。pip应用见写的另一篇pip总结。

1.2运行pytest

使用pytest可以指定测试路径和文件,如果不指定pytest会搜索当前目录及子目录中以test_开头_或者以_test结尾的测试函数。

我们把pytest搜索测试文件和测试用例的过程称为测试搜索。只要遵循pytest的命名规则,pytest就能自动搜索所有待执行的测试用例。

以下几条是主要的命名规则:xxx为可以替换为随意字符

  • 测试文件 test_xxx.py 或者 xxx_test.py
  • 测试函数test_xxx命名
  • 测试类以 Testxxx命名

测试搜索规则可以配置,后续会有梳理如何更改配置。

运行测试案例时可能会出现的几种状态:

  • PASSED(.) 测试通过
  • FAILED(F) 测试失败
  • SKIPPED(s)测试跳过
  • xfail(x) 预期测试失败并且确实失败了
  • XPASS(X)预期测试失败,实际上成功通过了
  • ERROR(E)触发异常

1.3运行单个案例

见上两条没啥好说的。

1.4使用命令行

  • pytest --help 帮助
  • –collect-only 仅仅展示哪些测试用例会被执行但是不执行测试,可以很方便的在测试运行前知道有哪些测试案例。

=========================================================================== test session starts ============================================================================
platform darwin – Python 3.8.3, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /test-for-pytest/ch1
plugins: xdist-2.3.0, allure-pytest-2.9.43, rerunfailures-10.1, repeat-0.9.1, forked-1.3.0
collected 2 items

  • -k 指定运行的测试用例 pytest -k ‘asdict or default’ asdict或者default名字的测试用例会被运行。
  • -m 指定测试分组 使用@pytest.mark.xxx 标记

​ 例如:使用 @pyest.mar.run_these_place 标记测试方法

运行时 :pyest -m run_these_place

​ -m选项可以使用多个条件或者且的条件: pytest -m “mark1 and mark2” pytest -m “mark1 or mark2”

  • -x 选项 遇到失败就停止不允许后续的测试案例。多用于debug时节省时间,否则全部用例都运行完毕才停止。

  • –maxfail=num 运行失败多少个再停止,比-x区别就是指定了失败次数停止。

  • -s 运行向终端输入,比如案例里写了print,如果终端运行的话加-s就可以捕获显示print的东西。

  • -v展示详细信息
    在这里插入图片描述

  • -q 展示简要信息 我喜欢 用 -q和–tb=no一起使用。非常简介加上–tb=no

  • –showlocals 字面意思显示局部变量,有时候报错了想查询变量都赋了何值,这个方式非常好。

  • –tb=style 这个style有以下几个类型:

    • short 只显示assert基本上
    • line 用一行显示
    • no 不显示只显示简单信息 上面说了和 -q合起来用非常好用。
  • –duaration=N 这个命令可以加快测试节奏,他不关心如何测试,只统计测试哪个阶段最慢。

  • –version 最没啥用就是看pytest版本号的