python+pytest自动化测试函数测试类测试方法的封装

news2024/12/27 12:03:38

今天呢,想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行。

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

import requests
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://mp.toutiao.com/profile_v4/"
res = requests.get(url=h_url, headers=headers)

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

需要将代码封装成单元测试框架 (pytest或unittest) 能识别的测试函数或测试类,否则将不会被识别执行。需要加上断言,即结果与期望之间的对比,单元测试框架才能判定该用例执行结果是否通过,结果==期望则说明通过,否则失败。

python中函数以及类的封装这里不做过多说明,这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码。

一、测试用例封装的一般规则

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

一个测试函数对应一条测试用例。测试类中可定义多个测试方法,一个测试方法对应一条测试用例,测试类可以看作是一个测试用例集。pytest中测试函数或测试方法的命名必须以test开头,测试类名必须以Test开头。具体命名规则可以参考我之前的文章pytest(3)-测试命名规则。对于单接口的测试校验,一个单接口的测试用例只包含一个接口请求,即将一个接口请求封装成一个测试函数或测试方法。对于场景(多接口) 的测试校验,一条场景测试用例需请求多个接口,因此需要将多个接口请求封装在同一个测试函数或方法中。一般封装一个接口的正向校验、异常校验封装成不同的方法,并封装在同一个测试类中。如定义一个登陆的测试类,正确用户名、密码请求封装成一个方法 (即一条测试用例),正确用户名、错误密码请求封装成另一个方法 (即另一条测试用例)。也可以将某个功能点或功能相关联的接口用例封装在同一个测试类中。比如个人中心涉及到的接口,可以封装在同一个测试类中二、测试函数的封装

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

在这里插入图片描述
强调,pytest中测试函数命名必须以test开头,如test_get_home。

三、测试类/方法的封装

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


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

四、示例代码

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

完整的示例代码如下:

import requests
import pytest
import json
def 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 == 200
 
class 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 == 200
        assert 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 == 200
        assert not json.loads(res.text)["token"]
if __name__ == '__main__':
    pytest.main()

总结

  • 测试函数、测试类/测试方法的封装,其实不管是什么单元测试框架,遵循的方式都一样。
  • 而在命名方式上各有自己的要求,比如pytest与unittest中测试命名方法有一定的区别。
  • 把一个有自己断言的函数或方法看成是一条测试用例,那么测试类其实就是一个含有一条或者多条测试用例的测试用例集,类中的每个方法对应一条测试用例。
  • 一个测试类中放置哪些测试方法,换句话说一个测试用例集中应该包含哪些测试用例,这个可以按照项目自身情况而定,也可按照测试人员自己的想法而定,主旨就是要清晰明了

到此这篇关于python+pytest自动化测试函数测试类测试方法的封装的文章就介绍到这了

福利分享

为了回馈铁杆粉丝们,我给大家整理了完整的【软件测试学习教程】,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

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

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

相关文章

如何高效优雅地管理接口文档

目录 前言 什么是Apifox 为什么选Apifox Apifox初体验 安装注册 接口文档管理 在线接口文档 接口调试 数据模型 环境管理 Mock功能 测试用例 测试套件 参数化 持续集成 团队管理 生成代码 前言 管理接口文档是一个重要的任务,它能够帮助团队成员更…

直接插入排序到底有多“直男”

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《算法详解》专栏,本专栏是针对于大学生,编程小白精心…

JavaScript中的垃圾回收和内存泄漏

垃圾回收 JavaScript 中的内存管理是自动执行的,而且是不可见的。我们创建基本类型、对象、函数……所有这些都需要内存。 当不再需要某样东西时会发生什么? JavaScript 引擎是如何发现并清理它? 垃圾回收有两种方法:标记清除、引用计数。引用计数不…

95后很狂阿里P7晒出工资单:狠补了两眼泪汪汪,真香...

最近一哥们跟我聊天装逼,说他最近从阿里跳槽了,我问他跳出来拿了多少?哥们表示很得意,说跳槽到新公司一个月后发了工资,月入5万多,表示很满足!这样的高薪资着实让人羡慕,我猜这是税后…

便携式AIS接收机dAI01

1.设备简介 AIS是指船舶自动识别系统(Automatic Identification System),船舶上有AIS收发机,AIS收发机会把船舶通过GPS定位获取到的本船的位置、速度等动态信息和船舶自己的船号、长宽等静态信息广播发射出去,其他用户…

雷达人体感应器成品,家居办公场景探测联动,智能化雷达感知技术应用

随着智能数据和人工智能的日益普及,越来越多的智能硬件设备得以推广和应用到日常生活中。 智能人体存在感应器是这一类智能硬件设备中非常有代表性的一种,它可以被应用在家居、办公等场景中,在很大程度上,它为我们的生活提供了很…

Liunx 安装、卸载Mysql,远程连接

Liunx 安装、卸载Mysql 一、 卸载mysql 查看mysql安装情况 rpm -qa | grep -i mysql删除上图中所有信息 rpm -ev mysql-community-release-el7-5.noarch --nodeps再次查询,没有数据,则为删除干净 find / -name mysqlrm -rf /var/lib/mysql 将机器上…

Java版企业工程管理系统源代码Spring Boot + 二次开发 + 前后端分离

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

使用python编程数学建模-常见excel数据使用python以行的方式按需读取

读取原始数据 首先导入pandas库   接着使用pandas库里面的read_csv方法来读取我们的文件,由于数据文件和程序文件是在统一目录下,因此无需使用绝对路径 import pandas as pd data1 pd.read_csv("data1.csv")读取数据的前20行数据 这里我们…

RTC time和Local time区别以及Linux 设置时区和修改时间

RTC time和Local time 在Linux系统中存在两个时钟时间,分别是 硬件时钟RTC(Real Time Clock) 系统时钟(System Clock)硬件时钟是指的在主板上的时钟设备,也就是通常可以在BIOS画面设置的时钟,即…

魏副业而战:怎么提升自己做项目的能力?

我是魏哥,与其在家躺平,不如魏副业而战! 昨天分享了老李做的拉新项目,很多小伙伴留言。 有人说,制作100个视频蛮难的; 有人说,发布100个视频最后留下4个,这对人的考验蛮大的&…

JDK8新特性之lambda表达式

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于lambda表达式的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.是什么 二.为什么要用 三.底层…

【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板,处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源,通过工业级B2B连接器引出千兆网口、USB、CAN、UA…

Linux发展史和Linux系统安装

Linux发展史和Linux系统安装 Linux发展史Linux前身-UnixLinux诞生开源文化Linux系统特点Linux分支 Linux系统的安装安装方式虚拟机软件虚拟机的安装VMware Workstation的安装Virtual Box的安装 Linux版本的选择新建虚拟机选择镜像文件安装使用VMware Workstation Linux操作系统…

【总结】yarn ResourceManager 宕机重启总是失败解决排查

目录 Yarn ResourceManager 莫名奇妙宕机重启Yarn ResourceManager 报错1重启Yarn ResourceManager 报错2成功解决 Yarn ResourceManager 莫名奇妙宕机 接到同事反馈,说yarn RM 端口总是访问超时。但是查看日志,又没有发现任务蛛丝马迹,且RM…

ChatGPT扇动翅膀后带来的蝴蝶效应

对于蝴蝶效应最常见的阐述是:“一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国得克萨斯州的一场龙卷风。” 简介肯尼亚essay 正文论文代写之都为什么是肯尼亚?蝴蝶效应 简介 在印象中贫穷且落后的东非国家…

小航助学2023年6月GESP_C++一级试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 删除编辑附件图文 答案:A 第1题以下不属于计算机输出设备的有( )。 A、麦克风B、音箱C、打印机D、显示器 答…

【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.27.0版本

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装并配置cri-dockerd插件四、安装kubeadm(所有节点同步操作)五、初始化集群六、Node节点添加到集群七、安装网络组件Calico八、测试CoreDNS解析可用性 一、集群规划及架构 官方文档: 二进制…

低代码开发平台魔笔,评测火热征集!

阿里云低代码开发平台魔笔是一款面向全端(Web、H5、全平台小程序、App)场景,模型驱动的低代码开发平台, 具有集成开放、一云多端、多云部署等优势,助力客户在数字化转型进程中真正实现降本增效。 即日起至7月31日&…

自学网络安全遇到问题怎么解决?

趁着今天下班,我花了几个小时整理了下,非常不易,希望大家可以点赞收藏支持一波,谢谢。 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在象牙塔里都很迷茫,到了大三大…