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

news2024/11/23 21:29:49

 目录

前言:

一、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接口自动化测试:

 自动化测试福利:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务器安装MYSQL

安装MYSQL 涉及到的工具及软件连接 链接:https://pan.baidu.com/s/1r577kFeuojUrMoEUn88B8w 提取码:xh93 查看是否已经安装了mariadb 检查linux是否安装了mariadb数据库,mariadb数据库是mysql的分支。是免费开源的。mariadb和msyql会有冲突…

准备半个月,面试5分钟不到就凉了,问的实在太····

从外包出来,没想到竟然死在了另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以我也就忍了。没想到12月一纸通知,所有人都不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个…

django ORM框架(操作数据库)第一章

目录 一、ORM框架介绍 二、Django配置数据库 2.1 在本地mysql中创建数据库与用户 2.2 django 连接本地mysql(安装mysqlclient及依赖环境)mac安装 三、模型类 3.1、创建模型类&生成迁移脚本&执行迁移脚本 3.2 类属性&表字段介绍 3.2.1 models.Ch…

惊人!2022年我国游戏直播用户规模高达3.82亿人,市场规模1108亿元

随着人们生活水平的提高,人们对娱乐和文化活动的需求也在日益增加,而互联网的快速发展便捷地提供了各种各样丰富多彩的文化和娱乐,也为电子竞技提供了线上直播观看功能,游戏直播逐渐成为社会重要的文化之一。 近年来,…

如何恢复被删除的文件?文件恢复,4招解决!

案例:如何恢复被删除的文件? 【我的一些非常重要的文件保存在电脑中,刚刚一不小心被我删除了!请问大家有什么比较可行的被删文件恢复方法吗?】 文件被误删了无法找回会给我们造成很多不便,尤其是重要的文…

JVM 垃圾回收器

GC 分类与性能指标 垃圾收集器概述: 垃圾收集器没有规范中进行过多的规定,可以由不同的厂商、不同版本的 JVM 来实现由于 JDK 的版本处于高速迭代过程中,因此 Java 发展至今已经衍生了众多的 GC 版本从不同角度分析垃圾收集器,可以将 GC 分…

基于语音芯片NV080C方案制作的血氧仪为何实用

随着现代生活水平的提高,人们越来越注重自身的健康状况,而检测血氧和心率数据,成为人们更加重视的健康检测手段之一。血糖仪作为现代化的健康工具,它可以帮助人们更好地了解自己的血糖水平。为方便使用,在血糖仪中加入…

渗透测试--6.1.aircrack-ng破解wifi密码

目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一:虚拟机连接实验需要用到的网卡 步骤二:设置网卡为监听模式 步骤三:使用wlan0mon网卡扫描附近wif…

Cinema 4D的最佳渲染引擎有哪些?

Cinema 4D是一款专业的3D建模、动画、模拟和渲染软件解决方案。其快速、强大、灵活和稳定的工具集使设计、动态图形、VFX、AR/MR/VR、游戏开发和所有类型的可视化专业人士更容易和高效地使用3D工作流程。除了Cinema 4D附带的标准/物理渲染引擎之外,还有许多用于C4D和…

Android实例——拼图游戏

拼图游戏 项目简介权限adapterPictureListAdapterPuzzleAdapter beanItemBean PresenterIPuzzlePresenterPuzzlePresenterImpl uiIGameCallback utilsConstantImagesUtilsScreenUtils ViewMainActivityPuzzleActivity 布局activity_main.xmlactivity_puzzle.xml 项目简介 选择…

国内 无需科学上网 免费体验 ai 语言交互平台 chatpgt替代(汇总)

ChitGPT CSDN 基于chatgpt 3.5模型 ChitGPT AI EDU - Learn AI, Use AI https://ai.aigcfun.com/ 之前有web端的 现在只有app 和桌面端 通义千问 阿里 通义千问 还没通过审核 360 智脑 360 智脑 体验名额满了 sparkDesk 讯飞 sparkDesk 还没通过审核 文心一言 百度…

行业分析| 快对讲-融合会议的应用

全球经济一体化不断加快,企业也开始注重信息化和现代化建设,无论是企业内部还是外部的沟通与协作都变得非常重要。融合会议为企业提供一种“轻模式”的信息沟通和管理服务。支持语音、视频和数据多媒体通信,实现了语音与数据的无缝融合。用户…

直播预告 | 员工在公司体验感UP,原因竟然是这个......

而随着企业数字化进程的加速,企业账号管理面临着前所未有的挑战。安全性、便捷性和管理效率成为企业管理者关注的重点。 作为公司员工,“打工人”或多或少都面临着不同系统:开发工具、版本控制系统、文档管理系统、项目管理工具......“打工…

LeetCode 637. 二叉树的层平均值

637. 二叉树的层平均值 描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^-\\^5 10−5 以内的答案可以被接受。 示例 示例1 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]…

大家都在用哪些研发协同、沟通协同、项目协同软件?

这里我们将根据需求将协同软件分为:项目管理协作沟通、研发管理协同、文档协同、会议协同、设计协同、沟通协同6个大类进行分别推荐。 随着企业对高效协同办公的需求日益增长,市场上出现了众多协同办公软件。这些软件通过提供各种实用的功能,…

ChatGPT访问互联网,不神秘了

我测试了一下,它其实调用了微软必应的api,搜索了关键词而已 比如我问它:https://twitter.com/elonmusk 马斯克最近在忙什么 它的回答是: 近期,马斯克在做的一些事情包括: 在2023年的特斯拉年度股东大会…

内网渗透(七十七)之域权限维持之ACL滥用(中)

ACL滥用(中) 3、msDS-AllowedToActOnBehalfOfOtherldentity 属性权限 如图所示是微软对于msDS-AllowedToActOnBehalfOfOtherldentity 属性的描述 jack是域中的一个普通用户。现在我们获得了域管理员的权限,并想进行权限维持,可以进行如下的操作:使用Empire下的powerview…

编译zlib

zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使用。 官网:http://www.zlib.net/ 下载zlib源码:http://www.zlib.net/zlib1213.zip 备用地址&#x…

opencv图像拼接

opencv图像拼接是一种在一系列图片中选取部分区域,通过这些区域的重叠得到一个完整的图像,并将这些图片拼接起来的方法。它与传统的方法不同,可以看作是基于拼接技术的图像处理。 opencv是一款开源的图像处理软件,主要用于计算机视…

看模型、做技术交底、做项目汇报,图新说数字化汇报平台引领交互式汇报新模式

现场汇报效果不好,导致丢了一个项目! 项目汇报平淡无奇,方案屡次被毙! 面对专家质疑,回答苍白无力! 估计大家都有过这种经历和感受。 详细分析一下,基本上有以下几个方面的原因: …