Python自动化实战之接口请求的实现
在前文说过,如果想要更好的做接口测试,我们要利用自己的代码基础与代码优势,所以该章节不会再介绍商业化的、通用的接口测试工具,重点介绍如何通过 python 编码来实现我们的接口测试以及通过 Pycharm 的实际应用编写一个简单接口测试。
使用 Python 发送 请求
应为从最开始写这个 Python全栈系列 一直使用的就是 python3.x (这里我使用的是 python 3.8 版本) ,实际上 python 3 本身自带的就有能够实现发送请求的模块:
http.client
urllib.request
Python 发送请求的方式
以上两个都可以实现发送 http 请求,也就是说它们都可以帮助我们完成接口测试。不过相对于来说它们更偏向于底层,需要更多的定义,所以在使用上面比较的麻烦;
在实际的工作中,使用的更多的反而是第三方库 resuests ,为什么会选择使用 resuests ?那是因为它是经过二次集成、二次封装的,它能够让我们发送请求变得更简单,支持编码、解码、会话保持、长链接、可以加载 Header等等等等。
这也是我们使用 Python 做接口测试的一个首选方式,接下来就学习一下如何安装并使用 requests 库 吧。
requests 库的配置
安装 Requests 库 其实也非常的简单,直接在 terminal 终端 执行 pip install requests , 见下图:
也可以通过设置中心去安装,在 Windows 系统,选择的是 File --> Settings... ,Mac 系统选择的是 PyCharm --> Preferences... 如下图:

如果安装失败,或者安装超时,可以换一个国内的源地址,或者考虑一下 ke xue shang wang 吧。
天行数据 - 空气质量接口
从天行数据网站可以找到公开的 空气质量接口,通过该接口,可以免费查询全国各地城市的空气质量。
API详情如下:
接口地址:http://web.juhe.cn/environment/air/cityair
**返回格式:**json
**请求方式:**get
请求示例:http://web.juhe.cn/environment/air/cityair?city=城市名称&key=您申请的APPKEY值
请求参数说明:
| 参数 | 是否必填项 | 类型 | 说明 |
|---|---|---|---|
| city | yes | string | 城市名称的中文名称或拼音,如:上海 或 shanghai |
| key | yes | string | APP key (注册之后申请该接口的使用,自动生成一个key) |
返回参数说明:
| 名称 | 类型 | 说明 |
|---|---|---|
| citynow | JSONObject | 当前城市的空气质量的最新结果 |
| lastTwoWeeks | JSONObject | 最近几周的空气质量数据(4周28天) |
| lastMoniData | JSONObject | 各监测点的数据,如果字段返回"—",可能是该监测点未监测这项数据或者有延迟 |
利用 requests 发送查询 空气质量接口 请求
实现发送请求的三步:
1、组装请求 (包含 url 、请求的参数、请求的数据、 headers、cookies等等)
2、发送请求,获取响应
3、解析响应、获取到想要的文本
代码示例如下:
# coding:utf-8import requests'''
天行空气质量接口:get:http://web.juhe.cn/environment/air/cityair?city=城市名称&key=您申请的APPKEY值
'''url = "http://web.juhe.cn/environment/air/cityair?city=shanghai&key=98a470ea50853d3e698b2dfea09ae079" # 定义urlresult = requests.get(url) # 使用 requests 包的 get 方法获取响应结果print(result.text) # 打印输出 result 的文字解析
运行结果如下:

url 还支持 param 等一些信息,所以我们在组装url的时候,还可以不用像上图中那样直接去定义;可以单独定义一个 param ,以字典的形式写入我们要传入的内容。代码示例如下:
PS:"param" 就是 get 请求方法的 "url" 问号后面的内容,示例:"http://web.juhe.cn/environment/air/cityair?city=城市名称&key=您申请的APPKEY值"
# coding:utf-8import requests'''天行空气质量接口:get:http://web.juhe.cn/environment/air/cityair?city=城市名称&key=您申请的APPKEY值'''# url = "http://web.juhe.cn/environment/air/cityair?city=shanghai&key=98a470ea50853d3e698b2dfea09ae079"url = "http://web.juhe.cn/environment/air/cityair" # 定义urlparam = {"key": "98a470ea50853d3e698b2dfea09ae079", "city": "shanghai"} # 定义paramresult = requests.get(url=url, params=param) # 使用 requests 包的 get 方法获取响应结果print(result.text) # 打印输出 result 的文字解析
运行结果如下:

接下来再尝试一下通过 psot 方法,运行的结果会怎么样。
代码示例如下:
# coding:utf-8import requests'''天行空气质量接口:get:http://web.juhe.cn/environment/air/cityair?city=城市名称&key=您申请的APPKEY值'''# url = "http://web.juhe.cn/environment/air/cityair?city=shanghai&key=98a470ea50853d3e698b2dfea09ae079"url = "http://web.juhe.cn/environment/air/cityair" # 定义url# param = {"key": "98a470ea50853d3e698b2dfea09ae079", "city": "shanghai"} # "param" 就是 get 请求方法的 "url" 问号后面的内容data = {"key": "98a470ea50853d3e698b2dfea09ae079", "city": "shanghai"} # data 的内容才是 post 方法里需要传入的参数# result = requests.get(url=url, params=param)result = requests.post(url=url, data=data) # 使用 requests 包的 post 方法获取响应结果print(result.text) # 打印输出 result 的文字解析
运行结果如下:

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

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


相关文章:
Python自动化实战之接口请求的实现
在前文说过,如果想要更好的做接口测试,我们要利用自己的代码基础与代码优势,所以该章节不会再介绍商业化的、通用的接口测试工具,重点介绍如何通过 python 编码来实现我们的接口测试以及通过 Pycharm 的实际应用编写一个简单接口测…...
react和vue的区别
一、核心思想不同 Vue的核心思想是尽可能的降低前端开发的门槛,是一个灵活易用的渐进式双向绑定的MVVM框架。 React的核心思想是声明式渲染和组件化、单向数据流,React既不属于MVC也不属于MVVM架构。 如何理解React的单向数据流? React的单…...
Spring 中有哪些方式可以把 Bean 注入到 IOC 容器?
目录 1、xml方式2、CompontScan Component3、使用 Bean方式4、使用Import 注解5、FactoryBean 工厂 bean6、使用 ImportBeanDefinitionRegistrar 向容器中注入Bean7、实现 ImportSelector 接口 1、xml方式 使用 xml 的方式来声明 Bean 的定义,Spring 容器在启动的…...
客户需求,就是项目管理中最难管的事情
对于需求控制和管理 个人的观点是:首先要向客户传递开发流程,第二必须制作原型,需求确认时确认的是原型,而不是需求文档,第三,开发阶段要快速迭代,与客户互动。管人方面我想对于项目经理来讲&am…...
条款28:避免返回 handles 指向对象的内部成分
创建一个矩形的类(Rectangle),为保持Rectangle对象较小,可以只在其对象中保存一个指针,用于指向辅助的结构体,定义其范围的点数据存放在辅助的结构体中: class Point { // 表示点的类 public:P…...
【人工智能】之深入理解 AI Agent:超越代码的智能助手(2)
人工智能(AI)正在以前所未有的速度迅猛发展,而AI Agent(智能代理)则是这一领域中备受瞩目的一环。AI Agent 不仅仅是程序的执行者,更是能够感知、学习和交互的智能实体。本文将深入探讨什么是 AI Agent&…...
如何将一个字符串转换为整数?
目录 1. 基本方法:int() 函数 2. 错误处理 3. 性能考虑 4. 实用技巧 结论 在Python中,将字符串转换为整数是一个常见且重要的操作。这种转换通常在处理用户输入、解析文本数据或在不同数据类型间进行转换时使用。以下是从几个方面对这个主题的详细介…...
【鸿蒙4.0】harmonyos Day 04
文章目录 一.Button按钮组件1.声明Button组件,label是按钮文字2.添加属性和事件 二.Slider滑动条组件 一.Button按钮组件 1.声明Button组件,label是按钮文字 Button(label?:ResourceStr) // ResourceStr:可以是普通字符串,也可以是引用定义…...
微调(fine-tuning)
目录 一、微调 1、为什么需要微调 2、微调的步骤 二、代码实现 1、获取数据集 2、读取图像 3、数据增广 4、定义和初始化模型 5、定义训练函数 三、总结 一、微调 1、为什么需要微调 Fashion-MNIST有6万张图像,学术界当下使用最广泛的大规模图像数据集Ima…...
Find My卡片正成为消费电子香饽饽,伦茨科技ST17H6x可以帮到您
今年CES许多公司发布支持苹果Find My的卡片产品,这种产品轻薄可充电,放在钱包、背包或者手提包可以防丢查找,在智能化加持下,防丢卡片使得人们日益关心自行车的去向。最新的防丢卡片与苹果Find My结合,智能防丢&#x…...
Es bulk批量导入数据(1w+以上)
最近在学习es的理论知识以及实际操作,随时更新~ 概要:首先你得有1w条数据的json,然后用java读取json文件导入 一. 创建Json数据 首先我生成1.5w条数据,是为了实践分页查询,用from-size和scroll翻页去实践 生成四个字段…...
#laravel 通过手动安装依赖PHPExcel#
场景:在使用laravel框架的时候,需要读取excel,使用 composer install XXXX 安装excel失败,根据报错提示,php不兼容。 因为PHPHExcel使用的php版本 和项目运所需要的php 版本不兼容,php8的版本 解决方法:下载手工安装&a…...
Webpack 基本使用 - 1
Webpack 是什么 webpack 的核心目的是打包,即把源代码一个一个的 js 文件,打包汇总为一个总文件 bundle.js。 基本配置包括mode指定打包模式,entry指定打包入口,output指定打包输出目录。 另外,由于 webpack默认只能打…...
要编译Android 12系统的开机Logo,你需要执行以下步骤:
目录 一、下载了AOSP 1.下载了AOSP 2. 创建一个新的设备制造商目录。 3. 在新创建的device/manufacturer目录中创建一个新的设备目录。 4. 在新创建的设备目录中,创建一个BoardConfig.mk文件。 5. 编辑BoardConfig.mk文件,添加以下内容:…...
【JS逆向学习】36kr登陆逆向案例(webpack)
在开始讲解实际案例之前,大家先了解下webpack的相关知识 WebPack打包 webpack是一个基于模块化的打包(构建)工具, 它把一切都视作模块 webpack数组形式,通过下标取值 !function(e) {var t {};// 加载器 所有的模块都是从这个…...
R语言的ggplot2绘制分组折线图?
R绘制分组折线图.R 首先看数据情况:group有3组。Time有3组,数据意思是在3组3个时间点测量了某指标,现在要绘制组1、组2、组3某指标y按时间的变化趋势 数据情况: 看看最终的效果图如下: 下面是本次使用的代码 .libPat…...
[C#]winform部署官方yolov8-obb旋转框检测的onnx模型
【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加…...
Git中config配置
文章目录 简介一、config级别二、config基本配置 简介 Git是一个开源的分布式版本控制系统,用于处理各种规模的项目版本管理。它由Linus Torvalds设计,主要用于Linux内核开发。Git的特点包括速度、简单的设计、对非线性开发模式的支持、完全的分布式能力…...
Java开发安全之:Unreleased Resource: Streams需确保流得到释放
Overview java 中的函数 getResponseBytes() 有时无法成功释放由 getInputStream() 函数分配的系统资源。 Details 程序可能无法成功释放某一项系统资源。 在这种情况下,在某些程序路径上,所分配的资源未释放。 资源泄露至少有两种常见的原因…...
【C++】文件操作
文件操作 一、文本文件(一)写文件读文件 二、二进制文件(一)写文件(二)读文件 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化ÿ…...
弯腰系鞋带:动作虽细微,脊柱 “被折得濒临损伤”!
频繁弯腰系鞋带、捡拾地面物品、整理鞋盒、照顾幼儿,颈腰椎损伤风险显著。弯腰时腰椎瞬间弯曲,椎间盘承受压力骤增;单腿站立弯腰时,身体平衡依赖腰部肌肉,受力不均易导致拉伤;反复弯腰起身动作,…...
告别官方包!手把手教你从Gitee源码编译kkFileView v4.4.0(附Maven打包避坑点)
从源码到部署:深度解析kkFileView v4.4.0全流程编译实战 在企业级文档处理场景中,kkFileView作为一款开箱即用的文件预览解决方案,其源码编译能力往往被大多数开发者忽视。本文将打破常规安装包依赖,带你深入源码编译的全链路过程…...
hostapd wpa_supplicant madwifi深度解析(十)——WPS帧格式与交互流程详解
1. WPS协议基础与交互流程全景 第一次接触WPS(Wi-Fi Protected Setup)时,很多人会被它"一键连接"的便捷性吸引。但作为开发者,我们需要拨开这层简单的外衣,看看内部精妙的协议设计。WPS本质上是通过标准化的…...
Cesium实战:手把手教你实现智慧城市中的动态流动线(附完整代码与避坑指南)
Cesium实战:打造智慧城市动态流动线的完整技术方案 在数字孪生和智慧城市可视化项目中,动态流动线是实现交通流、管网流向等动态效果的关键元素。本文将深入探讨如何基于Cesium引擎,从Shader编写到前端集成,构建高性能的动态线可视…...
Monocle2拟时基因富集分析实战:从热图模块到通路解析
1. Monocle2拟时分析基础回顾 如果你正在做单细胞转录组分析,肯定对拟时分析(Pseudotime Analysis)不陌生。简单来说,这就像给细胞拍"成长视频",把静态的细胞状态连成动态的发展轨迹。Monocle2作为这个领域的…...
Git内部原理浅析:对象、引用与分支合并策略
Git内部原理浅析:对象、引用与分支合并策略 在软件开发中,Git已成为版本控制系统的标准工具,但其强大的功能背后隐藏着精妙的设计原理。理解Git的内部机制,尤其是对象模型、引用系统以及分支合并策略,不仅能提升开发效…...
LVDS信号完整性救星:Xilinx OSERDESE2+IDELAY2配置避坑指南
LVDS信号完整性救星:Xilinx OSERDESE2IDELAY2配置避坑指南 当你在Gbps级LVDS接口设计中遇到信号抖动问题时,是否曾盯着眼图上的毛刺束手无策?作为Xilinx FPGA开发者,我们常陷入这样的困境:明明按照手册配置了OSERDESE2…...
RMBG-2.0在远程办公中的应用:Zoom虚拟背景实时抠像插件开发指南
RMBG-2.0在远程办公中的应用:Zoom虚拟背景实时抠像插件开发指南 远程办公已经成为许多人的日常,视频会议更是其中的核心环节。你是否厌倦了千篇一律的虚拟背景图片?或者因为摄像头背景杂乱而不敢开启视频?今天,我们将…...
刚学单片机的小白,聊聊我的学习目标和职业期待
大家好,我是一名智能科学与技术专业的大二学生,目前刚刚开始接触单片机,还是个实打实的小白。开这篇博客,主要是想记录自己的学习历程,也希望能和同样入门的同学一起交流、互相鼓励。一、自我介绍我目前大二࿰…...
揭秘百度技术栈:逆向分析与前沿趋势
技术栈逆向分析基础逆向工程概念与法律边界 常见技术栈识别方法(如Header分析、JS特征、框架指纹) 百度前端技术栈特征(如Baidu-AlloyTeam、San框架)百度搜索前端技术架构页面渲染模式分析(SSR/CSR混合策略)…...
