python+requests的接口自动化测试框架实例详解教程

前言

Python是一种简单易学、功能强大的编程语言,广泛应用于各种软件开发和测试场景中。requests是Python中流行的HTTP库,支持发送HTTP请求和处理HTTP响应,它也是开发API自动化测试框架的重要组件之一。在本文中,我们将介绍如何使用Python和requests构建一个简单的接口自动化测试框架,并通过实例来详细说明其具体实现方法。

一、环境准备

在开始构建接口自动化测试框架之前,我们需要安装必要的工具和库,包括Python、requests、pytest等。以下是几个基本步骤:

  1. 下载并安装Python3.x版本。

  2. 使用pip命令安装requests和pytest库,例如:

  3. pip install requests

  4. pip install pytest

  5. 安装其他必需的库和插件,例如pytest-html、pytest-xdist等。
二、设计框架结构

接口自动化测试框架的设计需要考虑多种因素,例如测试目标、测试需求、测试用例设计、代码复用性等。以下是一个简单的框架结构示例:

  1. - api_tests/

  2. - base.py

  3. - conftest.py

  4. - testcases/

  5. - test_login.py

  6. - test_order.py

  7. - utils/

  8. - config.py

  9. - logger.py

  10. - request.py

其中,api_tests是项目的根目录,base.py是基础测试用例类,conftest.py是Pytest的配置文件,testcases是测试用例目录,utils是工具类目录。

三、实现框架功能

接下来,我们将使用Python和requests等库实现框架的具体功能,包括配置管理、日志记录、请求封装、测试用例设计等。以下是一些关键的实现步骤:

配置管理:我们可以创建一个config.py文件,定义应用程序的配置信息,例如URL、用户名、密码等。同时,我们可以使用Python中的configparser库来读取配置信息,并在测试用例中进行引用。例如:

  1. import configparser

  2. config = configparser.ConfigParser()

  3. config.read('config.ini')

  4. url = config.get('app', 'url')

  5. username = config.get('app', 'username')

  6. password = config.get('app', 'password')

  1. 日志记录:我们可以创建一个logger.py文件,定义日志记录器,以记录测试过程中的关键事件和错误信息。例如:
  2. import logging

  3. logging.basicConfig(level=logging.DEBUG,

  4. format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

  5. logger = logging.getLogger(__name__)

  6. 请求封装:我们可以创建一个request.py文件,封装requests库的HTTP方法,提供统一的请求接口和响应处理。例如:
  7. import requests

  8. def get(url, params=None, headers=None):

  9. response = requests.get(url, params=params, headers=headers)

  10. return response

  11. def post(url, data=None, json=None, headers=None):

  12. response = requests.post(url, data=data, json=json, headers=headers)

  13. return response

  14. 测试用例设计:我们可以创建多个测试用例,并使用Pytest进行管理和执行。例如:
  15. import pytest

  16. from utils.config import url, username, password

  17. from utils.request import post

  18. @pytest.mark.order

  19. def test_login():

  20. data = {'username': username, 'password': password}

  21. response = post(url+'/api/login', json=data)

  22. assert response.status_code == 200

  23. @pytest.mark.order

  24. def test_order():

  25. headers = {'Authorization': 'Bearer '+token}

  26. response = get(url+'/api/order/123', headers=headers)

  27. assert response.status_code == 200

四、执行测试用例

完成了接口自动化测试框架的开发后,我们可以使用以下命令来执行测试用例:

pytest -s -v --html=report.html --self-contained-html --workers=4

其中,-s选项表示输出所有print语句;-v选项表示详

细输出测试结果;--html选项表示生成HTML格式的测试报告;--self-contained-html选项表示将测试报告中的所有资源文件都包含在一个文件中,方便查看和分享;--workers选项表示使用多线程运行测试用例。

执行完测试用例后,我们可以在测试报告中查看测试结果和日志信息,以评估接口的正确性和性能等指标。同时,我们也可以对测试框架进行优化和扩展,例如添加数据驱动、参数化测试、前置条件等功能,以提高测试效率和质量。

五、总结

Python和requests是构建接口自动化测试框架的重要组件之一,它们具有易于学习和使用、功能强大和灵活等优点。通过合理设计框架结构和实现关键功能,我们可以快速搭建一个简单且高效的接口自动化测试框架。在实际应用中,我们需要根据项目需求和团队技能等因素选择适当的工具和方法,并遵循最佳实践来确保测试质量和可持续性。同时,我们也可以在测试过程中添加断言、异常处理、测试装置等功能,以提高测试用例的可靠性和稳定性。例如,在实际应用中,我们通常需要验证HTTP响应状态码、响应头、响应内容等指标,通过使用Pytest框架提供的assert语句,可以方便地进行断言操作,例如:

  1. response = requests.get('https://api.github.com')

  2. assert response.status_code == 200

  3. assert response.headers['content-type'] == 'application/json; charset=utf-8'

此外,在编写测试用例时,我们还可以使用数据驱动和参数化测试等技术来快速生成多个测试用例,并对测试用例进行组合和分组。例如,我们可以创建一个data.csv文件,定义多个测试数据,并通过pytest.mark.parametrize注解来引用数据,并自动生成多个测试用例。例如:

  1. import pytest

  2. import csv

  3. from utils.request import post

  4. @pytest.mark.parametrize('username, password', csv.reader(open('data.csv')))

  5. def test_login(username, password):

  6. data = {'username': username, 'password': password}

  7. response = post(url+'/api/login', json=data)

  8. assert response.status_code == 200

总之,Python和requests提供了强大而灵活的工具和库,可以帮助我们构建简单且高效的接口自动化测试框架。通过合理设计框架结构和实现关键功能,我们可以快速编写测试用例、执行测试过程,并生成高质量的测试报告,以评估接口的正确性和性能等指标。同时,我们也可以使用最佳实践和常见技巧来优化测试过程和提高测试效率和质量。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥集训之游戏

蓝桥集训之游戏 核心思想:博弈论 区间dp 设玩家1的最优解为A 玩家2的最优解为B 1的目标就是使A-B最大 2的目标就是使B-A最大 当玩家1取L左端点时 右边子区间结果就是玩家2的最优解B-A 即当前结果为w[L] – (B-A) 当玩家1取R右端点时 左边子区间结果就是玩家2的最…

【豫都故郡·领航新篇】Springer独立出版 |第二届先进无人飞行系统国际会议(ICAUAS 2024)

会议简介 Brief Introduction 2024年第二届先进无人飞行系统国际会议(ICAUAS 2024) 会议时间:2024年6月14日-16日 召开地点:中国南昌 大会官网:ICAUAS 2024-2024 2nd International Conference on Advanced Unmanned Aerial Systems2024 2nd …

大模型融合方法-DARE

LLM在SFT之后会产生大量的冗余参数(delta参数),阿里团队提出DARE方法来消除delta参数,并将其合并到PRE模型中,从而实现多源模型能力的吸收。 DARE无需GPU重新训练,其思路非常简单,就跟dropout类似: m t ∼…

视频素材大全无水印哪里有?7个高清视频素材app推荐

在视频创作的领域里,获取可用的高质量素材是每位创作者追求的目标。全球各地的视频素材网站以其独特的资源和视角,为我们提供了丰富的选择。下面是一系列精选的网站,不仅提供可以自由使用的素材,还涵盖了从动态城市风光到壮丽自然…

知识竞赛中加时赛环节如何设计较好

加时赛是知识竞赛活动中要考虑的一个环节,尽管它很多时候可能用不到,但一般一定要有,除非你要其他方法再对重分的选手进行排名。下面介绍加时赛环节设计注意事项及具体方法。 第一:加赛题环节要干净利落 主办者一定要明白&#…

leetcode二叉树相关题目

目录 二叉树的建立整数数组转二叉树Object数组转二叉树 二叉树的遍历leetcode94.二叉树的中序遍历leetcode144.二叉树的前序遍历 二叉树的建立 整数数组转二叉树 下面只是一个简单的示例,没考虑某个子树为空的情况。把{1, 2, 3, 21, 22, 31, 32} 转变为一个二叉树…

如何制作Word模板并用Java导出自定义的内容

1前言 在做项目时会按照指定模板导出word文档,本文讲解分析需求后,制作word模板、修改模板内容,最终通过Java代码实现按照模板自定义内容的导出。 2制作word模板 2.1 新建word文档 新建word文档,根据需求进行编写模板内容,调整行间距和段落格式后将指定替换位置留空。…

18.8K星开源免费的跨平台密码管理器:KeePassXC

KeePassXC:您的跨平台密码守护神,安全存储,随心所欲,无论何处皆可信手拈来! - 精选真开源,释放新价值。 概览 当你面临一堆应用需要填写各种各样的密码的时候、当你需要记忆各种各样的密码或是需要保存保密文件或私密…

全国青少年软件编程(Scratch)等级考试二级考试真题2023年12月——持续更新.....

青少年软件编程(图形化)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1.在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行(111111) 第二行(132231) 第三行(126621) 第四行( ) 第五行(152…

数独——拥有一定难度的回溯练习题,值得一看

数独相信大家都玩过,也都拥有不同的策略,那么放到C中又是怎样的呢?其实它就是回溯算法。话不多说,直接用例题来讲解: Description 数独是根据99盘面上的已知数字,推理出所有剩余空格的数字,并…

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播:保证数据一致性崩溃恢复:保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…

【js刷题:数据结构数组篇之有序数组的平方】

有序数组的平方 一、题目二、解题方法1、暴力解法2、双指针思路代码 一、题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 二、解题方法 1、暴力解法 class Solution {sortedSquares(…

数据结构与算法 双链表有序排列运算与循环单链表基本运算

一、实验内容 1.有一个带头结点的双链表L(至少有一个数据结点),设计一个算法使其元素递增有序排列。 2. 编写一个程序clinklist.cpp,实现循环单链表的各种基本运算和整体建表算法(假设循环单链表的元素类型ElemType为char&#…

OSCP靶场--Zipper

OSCP靶场–Zipper 考点(php zip:// rce[文件上传] CVE-2021-4034提权7z 通配符提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.249.229 -sV -sC -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 07:40 EDT …

11-设计模式:Go常用设计模式概述

设计模式是啥呢?简单来说,就是将软件开发中需要重复性解决的编码场景,按最佳实践的方式抽象成一个模型,模型描述的解决方法就是设计模式。使用设计模式,可以使代码更易于理解,保证代码的重用性和可靠性。 …

RIP环境下的MGRE 综合实验

实验题目及要求: 1.R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证,R5为主认证方; R2于R5之间使用PPP的chap认证,R5为主认证方; R3于R5之间使用HDLC封装。 3.R1/…

基于javaweb宠物领养平台管理系统设计和实现

基于javaweb宠物领养平台管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

媒体偏见从何而来?--- 美国MRC(媒体评级委员会)为何而生?

每天当我们打开淘宝,京东,步入超市,逛街或者逛展会,各种广告铺天盖地而来。从原来的平面广告,到多媒体广告,到今天融合AR和VR技术的数字广告,还有元宇宙虚拟世界,还有大模型加持的智…

SpringBoot使用Redis

1.Spring是如何集成Redis的&#xff1f; Spring Data Redis 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId&…

第十四届蓝桥杯JavaA组省赛真题 - 棋盘

解题思路&#xff1a; 暴力 棋盘类题目取反操作&#xff1a; f[a][b]^1; 或者f[a][b] 1 - f[a][b]; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();int m scan.nex…