目录
前言:
一、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的使用技巧,我们可以编写更高质量、更稳定、更有效的接口自动化测试。
【自动化测试交流】:574737577http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=POyiUtn1WmZ1mqQ0-QCVKk4v0ZaRxYel&authKey=oCQ13j212b4nl%2BGxagkWVDUMUwFeM0jV%2BId6X%2BEc6OguEZpRCScAdwLZbIm5pBEe&noverify=0&group_code=574737577接口自动化测试:
自动化测试福利: