全网最新最全的自动化测试教程:python+pytest接口自动化-测试函数、测试类/测试方法的封装

本文主要是介绍全网最新最全的自动化测试教程:python+pytest接口自动化-测试函数、测试类/测试方法的封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在python+pytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行。

例如单个接口的请求代码如下:

import requestsheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}url = "https://www.cnblogs.com/lfr0123/"
res = requests.get(url=h_url, headers=headers)

假设我们需要将上面这段代码编写成测试框架能执行的测试用例,仅仅只是这样写代码显然是不够的,还需要进行如下补充:

  • 需要将代码封装成单元测试框架 (pytest或unittest) 能识别的测试函数或测试类,否则将不会被识别执行。

  • 需要加上断言,即结果与期望之间的对比,单元测试框架才能判定该用例执行结果是否通过,结果==期望则说明通过,否则失败。

python中函数以及类的封装这里不做过多说明,pytest断言大家可以参考文章pytest(5)-断言,而这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码

测试用例封装的一般规则

测试用例的封装有两种,测试函数和测试类,封装的一般规则如下:

  • 一个测试函数对应一条测试用例。

  • 测试类中可定义多个测试方法,一个测试方法对应一条测试用例,测试类可以看作是一个测试用例集。

  • pytest中测试函数或测试方法的命名必须以test开头,测试类名必须以Test开头。具体命名规则可以参考我之前的文章pytest(3)-测试命名规则。

  • 对于单接口的测试校验,一个单接口的测试用例只包含一个接口请求,即将一个接口请求封装成一个测试函数或测试方法。

  • 对于场景(多接口) 的测试校验,一条场景测试用例需请求多个接口,因此需要将多个接口请求封装在同一个测试函数或方法中。

  • 一般封装一个接口的正向校验、异常校验封装成不同的方法,并封装在同一个测试类中。如定义一个登陆的测试类,正确用户名、密码请求封装成一个方法 (即一条测试用例),正确用户名、错误密码请求封装成另一个方法 (即另一条测试用例)。

  • 也可以将某个功能点或功能相关联的接口用例封装在同一个测试类中。比如个人中心涉及到的接口,可以封装在同一个测试类中

测试函数的封装

一般而言,一个测试函数对应一条用例。上面的代码编写成一条测试用例,示例如下:

强调,pytest中测试函数命名必须以test开头,如test_get_home。

测试类/方法的封装

一个测试类相当于一个测试用例集,类中的每个方法对应一条测试用例。以登录接口为例,封装成测试类,示例如下:

强调,pytest中测试类命名需要以Test开头,如TestLogin,且测试类中不能有init方法。测试类中测试方法必须以test开头,如test_login_normal。

示例代码

pytest中可以使用命令行或者使用代码方式即 pytest.main() 执行用例,具体可参考文章pytest(1)-简介。

完整的示例代码如下:

# @time: 2022-03-24
# @author: 给你一页白纸
# 微信公众号:测试上分之路import requests
import pytest
import jsondef test_get_home():'''请求首页接口:return:'''headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"}url = "https://www.cnblogs.com/lfr0123/"res = requests.get(url=url, headers=headers)# 断言,判断返回结果的code是否等于200,当然实际接口测试中一般返回结果中还会有别的字段需要断言assert res.status_code == 200class TestLogin:'''登录接口校验'''url = "http://127.0.0.1:5000/login"headers = {"Content-Type": "application/json;charset=utf8"}def test_login_normal(self):'''正确用户名、正确密码登录'''data = {"username": "AndyLiu","password": "123456"}res = requests.post(url=self.url, json=data, headers=self.headers)# 断言assert res.status_code == 200assert json.loads(res.text)["token"]def test_login_error(self):'''正确用户名、错误密码登录'''data = {"username": "AndyLiu","password": "111111"}res = requests.post(url=self.url, json=data, headers=self.headers)# 断言assert res.status_code == 200assert not json.loads(res.text)["token"]if __name__ == '__main__':pytest.main()

总结

  • 测试函数、测试类/测试方法的封装,其实不管是什么单元测试框架,遵循的方式都一样。

  • 而在命名方式上各有自己的要求,比如pytest与unittest中测试命名方法有一定的区别。

  • 把一个有自己断言的函数或方法看成是一条测试用例,那么测试类其实就是一个含有一条或者多条测试用例的测试用例集,类中的每个方法对应一条测试用例。

  • 一个测试类中放置哪些测试方法,换句话说一个测试用例集中应该包含哪些测试用例,这个可以按照项目自身情况而定,也可按照测试人员自己的想法而定,主旨就是要清晰明了。

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

 

这篇关于全网最新最全的自动化测试教程:python+pytest接口自动化-测试函数、测试类/测试方法的封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455673

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测