您现在的位置是:首页 >学无止境 >Pytest技巧大揭秘:编写高质量接口自动化测试网站首页学无止境

Pytest技巧大揭秘:编写高质量接口自动化测试

自动化测试码元 2024-06-17 10:47:11
简介Pytest技巧大揭秘:编写高质量接口自动化测试

 目录

前言:

一、Pytest测试框架简介

二、安装Pytest测试框架

三、编写Pytest测试用例

四、Pytest参数化(Parameterization)

五、Pytest插件的使用

六、总结


前言:

在软件开发中,接口的测试是非常重要的一环。接口自动化测试可以帮助开发人员快速地发现问题,提高测试效率,减少任务重复性的操作。而在众多的测试框架中,Pytest是一款开源的、功能强大的测试框架,被广泛地应用在接口自动化测试中。本篇文章将带你深入了解 Pytest测试框架的使用,帮助你入门接口自动化测试。

一、Pytest测试框架简介

Pytest是一款基于Python语言的、简单易用的、开源的测试框架。它可以在Python基础上扩展出更多的测试功能,支持运行单元测试、多个测试模块、非常丰富的断言语法、参数化、测试内存消耗和性能测试等。因为它具有优秀的扩展性和灵活性,在测试界广受欢迎。

Pytest可以支持不同的测试类型,包括单元测试、功能测试、性能测试、接口测试等等。Pytest不仅兼容unittest模块,而且还在测试过程中为测试人员提供了更便利的操作,例如断言语法,参数化,覆盖率等。

二、安装Pytest测试框架

在开始使用Pytest测试框架之前,需要先安装Pytest。通过以下命令进行安装:

pip install -U pytest

通过上述命令可以安装最新版本的Pytest。如果需要安装指定版本的Pytest,则可以使用以下命令:

pip install pytest==版本号

例如,要安装1.0.1版本的Pytest,则可以输入以下命令:

pip install pytest==1.0.1

三、编写Pytest测试用例

接下来我们将介绍如何编写Pytest测试用例,首先我们需要建立一个测试文件,将测试用例写在该文件中。

在本文中,我们以一个简单的接口测试来举例,假设我们需要通过接口验证用户信息。在这个用例中,我们将使用requests模块来发送HTTP请求,然后使用Pytest断言语法来对接口响应结果进行验证。接下来我们将逐步讲解这个测试用例的编写过程。

第一步,导入requests模块和Pytest测试框架,代码如下:

import requests
import pytest

第二步,编写测试用例,代码如下:

def test_user_info():

    url = "http://www.example.com/user_info"
    data = {'username': 'testuser', 'password': '123456'}

    res = requests.post(url, data=data)
    assert res.status_code == 200, "接口响应状态错误"
    assert res.json()['username'] == 'testuser', "用户名不正确"

上述代码意思是我们在定义了一个名为 test_user_info 的测试函数,该函数会调用发送HTTP请求来获取接口响应结果,并且使用Pytest的断言语法来验证接口响应是否正确。其中,我们使用了requests模块来发送POST请求,将用户名和密码发送给接口,然后使用assert断言语法验证了接口的响应状态是否正确,以及接口返回的用户名是否正确。

第三步,运行测试用例。我们可以使用以下命令来运行所有的测试用例:

pytest

通过命令行运行后,Pytest会自动运行 test_user_info 测试函数,如下所示:

==================================== test session starts ====================================
platform darwin -- Python 3.8.9, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /Users/chatAI/test_pytest
collected 1 item                                                                              

test_userinfo.py .                                                                    [100%]

===================================== 

第四步,查看测试结果。运行完测试用例之后,可以查看测试结果是否通过。如果通过,终端会输出“.”;如果未通过,则会输出“F”和一些错误信息,如下所示:

====================================== FAILURES =======================================
__________________________ test_user_info __________________________

    def test_user_info():

        url = "http://www.example.com/user_info"
        data = {'username': 'testuser', 'password': '123456'}

        res = requests.post(url, data=data)
        assert res.status_code == 200, "接口响应状态错误"
        assert res.json()['username'] == 'test', "用户名不正确"
>       assert res.json()['email'] == 'test@example.com', "Email不正确"
E       AssertionError: Email不正确
E       assert 'test@exaple.com' == 'test@example.com'
E         - test@exaple.com
E         + test@example.com

test_userinfo.py:12: AssertionError
==================================== 1 failed in 0.25 seconds ====================================

从上述测试结果可以看出,测试用例未通过。具体原因是,在第三个assert断言语法中,期望值与实际值不一致。实际返回的邮箱是test@exaple.com,期望值应该是'test@example.com'。

总的来说,编写Pytest测试用例非常简单,只需要按照上述步骤来进行,即可快速验证接口是否正常工作。

四、Pytest参数化(Parameterization)

在编写大量参数类似、接口url变化的测试用例时,使用Pytest参数化功能可以大大提高测试效率,避免编写大量类似的测试用例。(注意:参数化功能需要Pytest 2.0以上版本的支持)

以下是一个简单的Pytest参数化的示例,假设我们有一个接口查询当前城市的天气情况。因为城市有很多,我们可以使用参数化构造多组测试用例,代码如下:

import requests
import pytest

@pytest.mark.parametrize('city', ['beijing', 'shanghai', 'shenzhen'])
def test_weather(city):

    url = f"http://www.example.com/weather?city={city}"
    res = requests.get(url)

    assert res.status_code == 200, f"{city}接口请求失败"
    assert 'temperature' in res.json()['weather'], f"{city}接口响应数据缺失' temperature'字段"

由于使用了“@pytest.mark.parametrize('city', ['beijing', 'shanghai', 'shenzhen'])”来定义参数化的变量'city',所以pytest会循环执行三次test_weather测试函数,每次传入city参数,完成测试。

五、Pytest插件的使用

Pytest是一个开源的测试框架,可以通过安装插件来扩展其功能。下面列举几个常用的Pytest插件:

1. pytest-html:此插件可以帮助将测试报告转换成HTML格式,以便于浏览器查看。

2. pytest-xdist:此插件可以实现多线程运行测试用例,提高测试执行效率。

3. pytest-cov:此插件可以帮助我们统计代码覆盖率,可根据需要设定最低代码覆盖率要求。

使用这些插件只需要安装即可,通过以下命令进行安装:

pip install pytest-htmlpytest-xdistpytest-cov

六、总结

在本篇文章中,我们介绍了什么是Pytest测试框架以及其优势。我们演示了编写一个基本的接口测试用例,并使用了参数化的方式执行多组测试用例。此外,我们还介绍了使用Pytest插件来增强测试框架的能力。

Pytest是一款功能强大的Python测试框架,除了能处理接口自动化测试,也可以进行单元测试、功能测试和性能测试等。通过本文所示的方法,您可以开始用Pytest测试框架进行接口自动化测试,增强测试效率,提高软件质量,加速软件开发流程。

需要注意的是,在编写测试用例时,我们需要考虑到接口返回的所有情况,包括正常响应、异常响应、超时、请求重复等。同时,我们也需要对代码进行充分的异常处理和日志输出,以便于运维和维护。

最后,Pytest测试框架的学习需要循序渐进,需要仔细阅读Pytest文档并多进行实践。掌握了Pytest的使用技巧,我们可以编写更高质量、更稳定、更有效的接口自动化测试。


【自动化测试交流】:574737577icon-default.png?t=N4HBhttp://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=POyiUtn1WmZ1mqQ0-QCVKk4v0ZaRxYel&authKey=oCQ13j212b4nl%2BGxagkWVDUMUwFeM0jV%2BId6X%2BEc6OguEZpRCScAdwLZbIm5pBEe&noverify=0&group_code=574737577接口自动化测试:

 自动化测试福利:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。