【自动化测试】接口自动化01

文章目录

  • 一、熟悉若requests库以及底层方法的调用逻辑
  • 二、接口自动化以及正则和Jsonpath提取器的应用
    • 6. 高频面试题:
    • 9. 示例:接口关联
    • 13. 文件上传示例
    • 14. cookie关联的接口


努力经营当下 直至未来明朗

一、熟悉若requests库以及底层方法的调用逻辑

  1. 接口自动化主要包括:基于工具的接口自动化以及基于代码的接口自动化。

  2. 在pycharm上安装requests库:在控制台中输入pip install requests
    在这里插入图片描述

  3. pycharm常用的requests库相关函数,按住ctrl+点击可以进入函数进行详细查看

requests.get(url, params=None, **kwargs)    # 发送get请求,**kwargs是可变长度的字典
requests.post(url, data=None, json=None, **kwargs)   # 发送post请求
# post中data和json的区别:取决于需要传递的参数的类型
# files:文件上传requests.put(url, data=None, **kwargs)    # 发送put请求
requests.delete(url, **kwargs)    # 发送delete请求requests.request(method, url, **kwargs)   # request可以替换以上四种,以上四种函数的底层调用的都是request方法# **kwargs参数其实就是以上四种函数中的如params、data、json等参数# request方法其实调用的是下面的方法:   # session.request(method=method, url=url, **kwargs)# 区别在于:session的方法能够自动的关联有cookie关联的接口# method=method  这是请求方式# url=url  请求路径# **kwargs 其实就可以是以下内容:# params=None,  get请求传参# data=None,  post或put请求传参# headers=None,  请求头# cookies=None,  cookie# files=None,  文件上传-------# auth=None,  鉴权# timeout=None,  超时处理# allow_redirects=True,  是否允许重定向# proxies=None,    设置代理# hooks=None,  钩子# stream=None,  文件下载# verify=None,  证书验证# cert=None,  CA证书# json=None,  post请求传参requests.session()    # 生成session对象,可以自动关联带有cookie的接口
  1. 接口自动化测试框架的封装是面试必问的!!
  2. 发送请求就会有响应,接收请求是由response对象来进行接收的,也是在requests库中。
  3. response对象经常使用的属性方法:
res = requests.get(url, params=None, **kwargs)print(res.text)  # 返回的文本信息
print(res.json())  # 返回的json格式
print(res.content)  # 返回的字节内容
print(res.status_code)  # 返回的状态码
print(res.reason)  # 返回的状态信息
print(res.cookies)  # 返回的cookie
print(res.encoding)  # 返回的编码格式
print(res.headers)  # 返回的响应头
print(res.request.请求数据)  # 返回的请求数据(请求数据可以根据提示来进行选择)

二、接口自动化以及正则和Jsonpath提取器的应用

  1. 查看接口文档,需要了解以下内容
    ① 请求:请求方式、请求路径、请求参数、请求头
    ② 响应:响应码、响应信息、响应内容、响应头

  2. 在查看接口文档时,如果有接口约定的要先查看接口约定,有说明的先看说明。

  3. 说明是JSON:由 {键值对} 和 [数组] 组成的一组数据。

  4. 示例:

import requests
class TestApi:# 1. 测试csdn用户主页获取def test_get_token(self):url = "https://blog.csdn.net/weixin_54150521"   # 只是传递网址,问号之后的内容不同传递data = {"spm": "'Dream是普通小孩耶"# 如果多个参数,使用,进行分隔;一定要给key和value都加上"",中间用:# 注意和参数值的一个对应}res = requests.get(url, params=data)  # 没有使用**kwargs则直接删除就行print(res.text)  # 返回的文本信息# print(res.json())  # 返回的json格式,请求返回的数据不是完整的json数据格式print(res.content)  # 返回的字节内容print(res.reason)  # 返回的状态信息if __name__ == '__main__':     # 使用main来运行,但是注意一定是顶格的!! 空俩行TestApi().test_get_token()    # 初始化对象并调用其方法
  1. 下一个接口的参数需要使用上一个接口的返回值,这就是接口关联

6. 高频面试题:

接口自动化实现接口关联的三种方式以及提取变量的两种方式:

1)实现接口关联的三种方式:

① 通过类变量(全局变量)保存中间变量实现接口关联
② 通过
单独的文件
保存中间变量实现接口关联
极限封装成和工具一样只需要通过表达式就可以实现接口关联

2)提取变量的两种方式:

① 正则表达式提取:适用于提取文本结果
② JsonPath提取:适用于提取Json结果,返回的是列表[ ]
jsonpath.jsonpath(obj,expr) # obj提取的对象 expr是jsonpath的表达式

  1. 补充:python中自动导包:alt + enter
  2. jsonpath表达式的规则:
    ① $ 根结点,即{起始位置
    ② . 子结点 如: .access_token,即子结点其实就相当于其中的key
    ③ … 递归取子结点 说明可以将所有的key都获取到
    ④ [] 代表取列表中的值,下标从0开始

9. 示例:接口关联

import jsonpath
import requestsclass TestApi:# 创建类变量,注意创建的方式,同样是需要使用""access_token = ""# 1. 获取鉴权码access token接口def test_get_token(self):url = "https://api.weixin.qq.com/cgi-bin/token"datas = {# 注意一定是{}的形式"grant_type": "client_credential","appid": "wx74a8627810cfa308","secret": "e40a02f9d79a8097df497e6aaf93ab80"}res = requests.get(url, params=datas)result = res.json()# 提取access_tokenvalue = jsonpath.jsonpath(result, "$.access_token")# 返回的是一个列表[],可以使用下标指定TestApi.access_token = value[0]  # 获取第一个数据并保存到全局变量中# 2. 获取公众号已创建的标签接口# 注意格式位置一定要正确,否则是不能被正确识别到的def test_select_flag(self):url = "https://api.weixin.qq.com/cgi-bin/tags/get"# 这里的参数其实就是之前返回的参数datas = {# 注意一定是{}的形式"access_token": TestApi.access_token}res = requests.get(url, params=datas)print(res.json())if __name__ == '__main__':TestApi().test_get_token()TestApi().test_select_flag()
  1. requests.post(url, data=None, json=None, **kwargs) # 发送post请求
    1) post中data和json的区别:取决于需要传递的参数的类型
    2)使用postman中body的参数类型进行对标:
    11
    ① form-data:表单和文件
    ② x-www-form-urlencoded:纯表单
    ③ raw:有很多这种,最主要的是json
    ④ binary:把文件转换为二进制传输
    3)so:参数为json的使用json传参,参数为文件的使用files来传参,其他的都是用data来进行传参。

  2. post请求方式传递json参数 示例:

    # 3. 创建标签接口(post请求方式)def test_create_flag(self):url = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token=" + TestApi.access_tokendatas = {"tag": {"name": "广东" + str(random.randint(10000, 99999))}# 可以进行随机数转字符串的拼接:str(random.randint(10000,99999))}res = requests.post(url, json=datas)print(json.loads(json.dumps(res.json()).replace("\\\\","\\")))  # unicode编码转为正常编码

13. 文件上传示例

1)代码示例

    # 4. 文件上传def test_file_upload(self):url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" + TestApi.access_tokendatas = {"media": open("C:/Users/lenovo/Desktop/栈帧.png", "rb")# 后面是文件的路径,注意接口文档的要求是文件or字节流# 文件模式为字节处理 rb}res = requests.post(url, files=datas)print(res.json())

2) 可能会报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xf0 in position 19: illegal multibyte sequence

这是因为文件在转成字节流的时候文件模式没有按照字节流处理,此时就需要修改为open(“文件路径”,“rb”)。可以参考:python报错:文件模式处理
13

14. cookie关联的接口

  1. 正则表达式适用于提取文本结果
  1. re.search() 提取一个值,通过下标取值
    2)re.findall() 提取多个值,通过下标取值
    15
  1. 一般由cookie关联的我们不会单独去使用get、post方法发送请求;而是直接先全局初始化一个session对象,然后使用request方法发送请求。
    # cookie关联的接口# 1. 访问首页def test_start(self):url = "http://47.107.116.139/phpwind/"# 使用session对象发送请求res = TestApi.sess.request(method='get', url=url)# res = requests.get(url)result = res.text# print(res.text)  # 文本打印TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"', result).group(1)# 2. 测试登录def test_login(self):url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"datas = {"username": "baili","password": "baili123","csrf_token": TestApi.csrf_token,"back_url": "http://47.107.116.139/phpwind/","invite": ""}headers = {"Accept": "application/json, text/javascript, /; q=0.01","x-Requested-With": "XMLHttpRequest"}# 使用session对象发送请求res = TestApi.sess.request(method='post', url=url, data=datas, headers=headers)# res = requests.post(url, data=datas, headers=headers)print(res.json())
  1. 在发送请求的时候,我们不知道其是不是有cookie的关联,所以最好直接使用request来发送请求。(需要先初始化全局变量session对象)

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

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

相关文章

系统架构师---软件重用、基于架构的软件设计、软件模型

目录 软件重用 构件技术 基于架构的软件设计 ABSD方法与生命周期 抽象功能需求 用例 抽象的质量和业务需求 架构选项 质量场景 约束 基于架构的软件开发模型 架构需求 需求获取 标识构件 需求评审 架构设计 架构文档 架构复审 架构实现 架构演化 前言&…

Linux:iptables SNAT与DNAT

目录 一、SNAT 1.1 SNAT原理与应用 1.2 SNAT转换前提条件 1.3 SNAT工作原理 1.4 SNAT实例 二、DNAT 2.1DNAT原理与应用 2.2 DNAT转换前提条件 2.2实例 一、SNAT 1.1 SNAT原理与应用 SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正…

性能比较 - Spring Boot 应用程序中的线程池与虚拟线程 (Project Loom)

本文比较了 Spring Boot 应用程序中的不同请求处理方法:ThreadPool、WebFlux、协程和虚拟线程 (Project Loom)。 在本文中,我们将简要描述并粗略比较可在 Spring Boot 应用程序中使用的各种请求处理方法的性能。 高效的请求处理在开发高性能后端…

嵌入式不如CS?信了你就上当了!

在现在的互联网上,有人疯狂劝退新人进入嵌入式行业。他们认为嵌入式的工资低于计算机科学,学习难度较大,前景也不好。 首先是工资方面,你要知道,计算机科学专业也有月薪四五千的人,也有月薪六位数的人。相…

Jmeter 连接 MySQL 数据库脚本

1、创建线程组 2、创建 JDBC Connection Configuration 3、创建 JDBC Request 4、最终创建的目录 5、重点来了 5.1 在百度中下载个 MySQL-connector-Java-8.0.28.jar,放在 jmeter 的 bin 目录下 5.2 在测试计划中,将 jar 包添加到脚本中 5.3 输入参…

面试之ReentrantLock

一,ReentrantLock 1.ReentrantLock是什么? ReentrantLock实现了Lock接口,是一个可重入且独占式的锁,和Synchronized关键字类似,不过ReentrantLock更灵活,更强大,增加了轮询、超时、中断、公平锁…

不同企业如何选择合适的CRM系统?

市场上的CRM系统千差万别,如何选到适合的CRM系统?很多企业凭借感觉盲目选型,结果上线后发现CRM系统功能不符合需求。这就好比买衣服,不试穿就买回家,结果发现尺码不合适,还不能退换。下面说说企业如何进行C…

series的数据对齐功能

Series 是一种类似于 Numpy 中一维数组的对象,它由一组任意类型的数据以及一组与之相关的数据标签(即索引)组成。举个最简单的例子: 上面的代码将打印出如下内容: 左边的是数据的标签,默认从 0 开始依次递增…

Git 目录详解

一、Git目录详解 在使用Git时,有几个目录和文件在Git项目中扮演着重要的角色,下面详细介绍一下这些目录和文件的作用 1、.git目录 .git目录是Git项目的核心,包含了Git的版本库和元数据等重要信息。在该目录中,有一些重要的子目录和…

嵌入式:ARM Day6

作业:完成cortex-A7核UART总线实验 目的:1.输入a,显示b,将输入的字符的ASCII码下一位字符输出 2.原样输出输入的字符串 源码: uart4.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #incl…

excel条件格式:不同组对应位置对比标记

问题描述 下图中有两组数据,想要对比两个对应位置的数据并标记 条件格式 选中其中一个单元格,条件格式->新建规则 使用公式确定要设置格式的单元格,自定义需求 格式化剩余同样标准的单元格

QT中资源文件resourcefile的使用

QT中资源文件resourcefile的使用 之前添加图标的方法使用资源文件的方法创建资源文件资源文件添加前缀资源文件添加资源使用资源文件中的资源 在Qt中引入资源文件好处在于他能提高应用程序的部署效率并且减少一些错误的发生。 在程序编译过程中, 添加到资源文件中的…

安全学习DAY17_信息打点-语言框架组件识别

信息打点-WEB打点-语言框架&开发组件 文章目录 信息打点-WEB打点-语言框架&开发组件本节涉及链接&工具本节知识&思维导图基础概念介绍框架:组件:Web架构 对应Web测试手法后端:前端组件:java居多,框架&…

广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用

3D数字孪生开发编辑器是一种新兴的技术,它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化,从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术,它可以…

点亮一颗LED灯

TOC LED0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能APB2的外设时钟GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode GPIO_Mode_Out_PP;//通用推挽输出GPIO_Initstructure.GPIO_Pin GPIO_Pin_5;GPIO_Initstructure.GPIO_Speed GPIO_S…

Midjourney API 申请及使用

在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧! Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…

Java请求Http接口-OkHttp(超详细-附带工具类)

简介:OkHttp是一个默认有效的HTTP客户端,有效地执行HTTP可以加快您的负载并节省带宽,如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 IPv6和冗余数据中心中托管的服务是必需的。OkHt…

LVS 负载均衡集群

集群 集群(Cluster)是一组相互连接的计算机或服务器,它们通过网络一起工作以完成共同的任务或提供服务。集群的目标是通过将多台计算机协同工作,提高计算能力、可用性、性能和可伸缩性,适用于大量高并发的场景。 集群…

【HBZ分享】java中的BitSet 与 Redis中的BitMap 与 布隆过滤器

BitMap的存储原理 bitMap他会标识出某个整数是否存在,存在即为1,不存在对应位即为0bitMap是存储int类型的,int 4byte, 1byte 8bit,因此bitMap数组中的每个下标可以标识出32个数字是否存在bitMap相当于一个个小格子&…

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…