Pytest的入门操作使用

pytest 特点:

  1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  2. 能够支持简单的单元测试和复杂的功能测试
  3. 支持参数化
  4. 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
  5. 支持重复执行(rerun)失败的 case
  6. 支持运行由 nose, unittest 编写的测试 case
  7. 可生成html报告
  8. 方便的和持续集成工具 jenkins 集成
  9. 可支持执行部分用例
  10. 具有很多第三方插件,并且可以自定义扩展

安装

直接执行 如下命令即可安装pytest

pip install pytest 

我们还需要产生测试报表,所以要安装一个第三方插件 pytest-html ,执行如下命令安装

pip install pytest-html

快速开始

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/1/12 20:18
# @Author  : shisuiyi
# @File    : test_learn01.py
# @Software: win10 Tensorflow1.13.1 python3.9

def func(x):
    return x + 3


def test_answer():
    assert func(3) == 6


class TestClass:
    def test_01(self):
        print('\n用例01')
        assert 1 == 1

    def test_02(self):
        print('\n用例02')
        assert 2 == 2

    def test_03(self):
        print('\n用例03')
        assert 3 == 2

然后,cmd进入当前文件目录,直接执行

pytest
PS D:\Lemon\py45\webatuotest\pytest_learn> pytest .\test_learn01.py
========================================================== test session starts ==========================================================
platform win32 -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Lemon\py45\webatuotest\pytest_learn
plugins: allure-pytest-2.9.43, anyio-3.3.2, html-3.1.1, metadata-1.11.0
collected 4 items                                                                                                                        

test_learn01.py ...F                                                                                                               [100%]

=============================================================== FAILURES ================================================================
___________________________________________________________ TestClass.test_03 ___________________________________________________________

self = <test_learn01.TestClass object at 0x0000023FFB6743D0>

    def test_03(self):
        print('\n用例03')
>       assert 3 == 2
E       assert 3 == 2

test_learn01.py:27: AssertionError
--------------------------------------------------------- Captured stdout call ----------------------------------------------------------

用例03
======================================================== short test summary info ========================================================
FAILED test_learn01.py::TestClass::test_03 - assert 3 == 2
====================================================== 1 failed, 3 passed in 0.21s ======================================================
PS D:\Lemon\py45\webatuotest\pytest_learn>

注意:

  • 如果只执行pytest,会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行

  • 如果只想执行某个文件,可以pytest start.py

  • 加上-q,就是显示简单的结果: pytest -q start.py

  • 如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s

    如下

    pytest -s
    

    如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv

    如下

    pytest -sv
    

    为了防止pytest到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样

    pytest cases
    

Pytest用例的设计原则

Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的

  • 文件名以 test_*.py文件和*_test.py

  • 以 test_ 开头的函数

  • 以 Test 开头的类,不能包含__init__ 方法

  • 所有的包 package 必须要有__init__.py文件

Pytest之并发执行

在Pytest测试框架中提供了pytest-xdist可以并发执行测试用例,来提升测试用例的执行速度。通常的情况下,测试用例的执行都是依据一定的规则来按顺序进行执行,这样的结果是每次执行的时候有的资源就只能被一个测试用例占用,而达不到测试用例执行的时候资源的共享,插件pytest-xdist插件可以很好的解决这个问题,一方面资源达到共享,基于第一点的考虑,也就达到了第二点的提升了测试执行的效率。

  • 安装pytest-xdist插件 pip install pytest-xdist
  • 使用 pytest -n auto 默认自动检查系统cpu个数,然后进行并发
  • 也可以指定并发数 pytest -n 2 即并发数2执行

产生报告

前面在安装pytest,我们也安装了 pytest-html 插件,这个插件就是用来产生测试报告的。

要产生报告,在命令行加上 参数 --html=report.html --self-contained-html ,如下

pytest cases --html=report.html --self-contained-html

这样就会产生名为 report.html的测试报告文件,可以在浏览器中打开

上一篇 下一篇

评论 | 0条评论