Code前端首页关于Code前端联系我们

Python 自动化练习 |使用Pytest进行API测试

terry 2年前 (2023-09-24) 阅读数 97 #后端开发

手动测试API需要重复输入相同的数据并运行多个测试用例,非常繁琐和乏味。那么有没有一种方法可以更有效地测试API呢?Pytest自动化测试!今天小编将向您展示如何使用Future进行API自动化测试。

Python自动化实战 | 使用Pytest进行API测试

什么是API测试?

API测试是一种软件测试方法,用于测试应用程序编程接口(API),以确保其功能、可靠性、性能和安全性。与其他类型的软件测试不同,API 测试主要关注 API 的功能和性能,而不是整个应用程序的功能和性能。 API测试可以帮助开发人员和测试人员快速、准确地测试API,从而提高开发效率和软件质量。

Pytest 框架

Pytest 是一个流行的 Python 测试框架,用于编写和运行测试。Pytest拥有简单易用的语法,可以轻松编写不同类型的测试,包括单元测试、集成测试和 API 测试。Pytest还提供了许多有用的功能,例如自动测试检测、测试复制、测试过滤和测试报告。

使用Future 进行API 测试

下面我将向您展示如何使用Future 框架进行API 测试。我将使用测试一个简单 API 的示例,该 API 接受两个数字并返回它们的总和。我们编写一个测试用例来测试 API。

首先我们需要安装Pytest框架。要安装Pytest,请在终端中输入以下命令:

pip install pytest

我们需要编写一个测试用例。在此测试用例中,我们使用 Python 的 requests 库向 API 发出请求,并使用断言来检查 API 的响应是否正确。以下是测试用例的源代码:

import requests

def test_addition():
    url = "http://localhost:5000/add"
    data = {"num1": 2, "num2": 3}
    response = requests.post(url, data=data)
    assert response.status_code == 200
    assert response.json() == {"result": 5}

在上面的代码中,我们首先定义了一个名为 test_addition 的测试函数。此函数使用 requests 库向 API 发送 POST 请求,并接受两个数字作为输入。然后,我们使用两个断言来检查 API 响应是否正确。第一个语句检查响应的状态代码是否为 200,而第二个语句则断言响应的 JSON 数据为 {"result": 5}。

现在我们可以使用Future来运行这个测试用例了。在终端中输入以下命令来运行测试:

pytest test_api.py

如果一切正常,Pytest 将打印测试结果并告诉您测试是否成功。如果测试失败,Pytest 会显示失败的测试用例和错误消息。

特殊用途

1.参数测试

在测试时,我们经常需要测试不同的输入数据。如果我们使用传统的测试方法,我们需要编写更多的测试用例。但借助pytest的参数化测试功能,我们可以通过一定的参数自动生成多个测试用例。这样可以大大减少我们的代码量,提高测试效率。

下面是一个示例,我们使用参数化测试来测试计算器函数的多组输入和输出。

import pytest

@pytest.mark.parametrize("a,b,expected", [
    (1, 2, 3),
    (2, 3, 5),
    (3, 4, 7),
])
def test_add(a, b, expected):
    assert a + b == expected

在这个例子中,我们使用 pytest.mark.parameterize 装饰器来指定参数化测试的参数。在参数化列表中,每个参数集都是一行,其中包含函数的参数和预期输出值。 pytest 自动将这些参数组合成多个测试用例并按顺序执行。

2。使用Fixture

在测试的时候,我们经常需要创建一些测试数据或者测试环境。在这种情况下,我们可以使用pytest的Fixture函数。 Fixture是提供测试数据或测试环境的函数。在测试用例中,我们可以通过装饰器来使用它。

下面的例子是我们使用Fixture创建测试环境然后进行测试的例子。

import pytest

@pytest.fixture
def setup_environment():
    # 创建测试环境
    env = {'name': 'test'}
    yield env
    # 清理测试环境
    del env

def test_env(setup_environment):
    assert setup_environment['name'] == 'test'

在此示例中,我们使用 @pytest.fixture 装饰器将 setup_environment 函数定义为 Fixture。在这个函数中我们可以创建测试环境并在yield语句中返回它。在测试用例中,我们可以通过参数名称使用Fixture,pytest会自动将Fixture的返回值传递给测试用例。

3。自定义插件

pytest 包含许多内置插件,可以帮助您执行一些常见的测试任务。但在实际使用中,我们往往需要更多的功能。目前,我们可以使用pytest插件,根据自己的需求定制插件。

下面的例子是我们使用pytest的插件机制来定制插件,在执行测试用例之前输出某些信息的例子。

import pytest

@pytest.hookimpl(tryfirst=True)
def pytest_runtest_logstart(nodeid):
    print(f"Running test {nodeid}...")

def test_example():
    assert 1 + 1 == 2

在这个示例中,我们使用 @pytest.hookimpl 装饰器将 pytest_runtest_logstart 函数定义为插件。在此函数中,发出测试用例的标识符。在执行测试用例之前,pytest会自动调用这个插件并输出信息。

技术总结

本文介绍了API测试的概念,并详细介绍了使用Pytest框架进行API测试的方法。我希望这篇文章可以帮助您更好地理解 API 测试以及如何使用 Python 中的自动化测试来提高测试效率和软件质量。不过,我也希望通过这个例子和对Pytest框架的简单介绍,您将学会如何编写和运行API测试用例。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门