【自动化测试】接口自动化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.rhkb.cn/news/93234.html

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

相关文章

RTT(RT-Thread)ADC设备(RTT保姆级介绍)

目录 ADC设备 前言 ADC相关参数说明 访问ADC设备 配置ADC设备 ADC实例 硬件设计 软件设计 ADC设备 前言 ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。 对于ADC的详细介绍和在STM32中的裸机应用可参考以下…

在CentOS 7上使用kubeadm部署Kubernetes集群

如有错误,敬请谅解! 此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!! 前言: Kubernetes是一个开源的容器编排平台,用于管理和自动化部署容器化的应用程序。…

软文发布问题解答:高效宣传与推广指南

以下是一秒推小编针对软文发布的20个常见问题及回答: 1. 什么是软文? 答:软文是指用文学手法、写作技巧撰写的宣传文章,以实现对特定受众的陈述、说明和推销。 2. 发布软文的目的是什么? 答:发布软文的目…

出现ffmpeg.dll丢失的修复方法分享,教你快速修复ffmpeg.dll文件

当你使用或尝试运行与FFmpeg相关的应用程序时,可能会遇到一个常见的问题,ffmpeg.dll文件丢失。这个动态链接库文件对于正常运行FFmpeg应用程序至关重要。在本文中,我们将详细探讨为什么会出现ffmpeg.dll丢失的情况,并提供一些修复…

奥威BI数据可视化工具:360度呈现数据,告别枯燥表格

随着企业数据量的不断增加,如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具,在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具,具有…

海外应用ASO优化的小技巧3

编写准确的应用程序描述,有4000个字符限制。用户可以访问应用程序的主要功能和信息,要说服并推动用户去下载我们的应用,需要使用自然流利的语言。 1、填写应用描述的方案。 我们需要知道该应用有什么用,能够解决什么问题&#xf…

在医疗行业数字孪生能做些什么?

数字孪生技术随着发展正在多行业遍地开花,在之前的文章中也为大家介绍过数字孪生的行业应用,今天带大家一起探讨一下数字孪生在医疗行业的表现。其实数字孪生在医疗行业已有很多应用案例,从医疗诊断到手术模拟,再到药物研发&#…

基于Redis实现点赞及排行榜功能

微信公众号访问地址:基于Redis实现点赞及排行榜功能 推荐文章: 1、SpringBoot整合多数据源,并支持动态新增与切换(详细教程) 2、​​​​​​Redis中使用lua脚本 3、SpringBoot统一标准响应格式及异常处理 4、Spr…

linux两台服务器互相备份文件(sshpass + crontab)

crontab crontab是linux系统自带的定时调度软件,可用于设置周期性被执行的指令,一般用在每天的非高峰负荷时间段运行作业,可在无需人工干预的情况下运行作业。支持在一周或一月中的不同时段运行。 crontab命令允许用户提交、编辑或删除相应的…

MongoDB:数据库初步应用

一.连接MongoDB 1.MongoDBCompass连接数据库 连接路径:mongodb://用户名:密码localhost:27017/ 2.创建数据库(集合) MongoDB中数据库被称为集合. MongoDBCompass连接后,点击红色框加号创建集合,点击蓝色框加号创建文档(数据表) 文档中的数据结构(相当于表中的列)设计不用管…

安装chromedriver 115,对应chrome版本115(经检验,116也可以使用)

目录 1. 查看Chrome浏览器的版本2. 找到对应的chromedriver3. 安装ChromeDriver 1. 查看Chrome浏览器的版本 点进这个网站查看:chrome://settings/help (真是的,上一秒还是115版本,更新后就是116版本了,好在chromedi…

java版本企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发

java版本企业电子招标采购系统源码Spring Cloud Spring Boot 二次开发 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草…

【JVM】JVM 调优的参数都有哪些?

文章目录 1. 设置堆空间大小2. 虚拟机栈的设置3. 年轻代中Eden区和两个Survivor区的大小比例4. 年轻代晋升老年代阈值5. 设置垃圾回收收集器 1. 设置堆空间大小 设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间&…

JVM——HotSpot的算法细节实现

一、根节点枚举 固定可作为GC Roots的节点主要在全局性的引用(如常量或类静态属性)与执行上下文(如栈帧中的本地变量表)中,尽管目标明确,但查找要做到高效很难。现在java应用越来越庞大,光方法区…

辽宁线上3D三维虚拟工厂生产仿真系统应用场景及优势

工厂虚拟仿真是一种基于计算机技术和虚拟现实技术的数字化解决方案,它可以通过模拟工厂中的设备、流程和操作,来为工程师和操作人员提供了一个沉浸式的虚拟环境,帮助他们更好地了解和优化工厂生产过程。 工厂VR三维可视化技术为工业生产提供了…

W5100S-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5100S-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么?什么是UDP Server?能干什么? UDP (User Dataqram …

什么是可视化编程?为什么它如此重要?

可视化编程,又叫可视化程序设计,一直以来就是备受讨论的“热门技术”。一方面,程序员抵触它,觉得它不如用代码开发。另一方面,对于产品经理等稍微懂点开发的业余人员,它确实能提供价值。所以,它…

tomcat服务七层搭建动态页面查看

一个服务器多实例复制完成 配置tomcat多实例的环境变量 vim /etc/profile.d/tomcat.sh配置tomcat1和tomcat2的环境变量 进入tomcat1修改配置 测试通信端口是否正常 连接正常 toncat 2 配置修改 修改这三个 端口配置修改完成 修改tomcat1 shudown 分别把启动文件指向tomcat1…

AgentBench::AI Agent 是大模型的未来

最有想象力、最有前景的方向 “Agent 是 LLM(大语言模型)的最有前景的方向。一旦技术成熟,短则几个月,长则更久,它可能就会创造出超级个体。这解释了我们为何对开源模型和 Agent 兴奋,即便投产性不高,但是我们能想象自己有了 Agent 之后就可以没日没夜地以百倍效率做现在…

mysql 8.0.20不停机主从同步

一、环境 CentOS : 7.3.1611 (Core) mysql:8.0.20 二、遇到的问题 1.查看主从同步发现下列问题 error connecting to master repl192.168.0.21:3306 - retry-time: 60 retries: 4 message: Authentication plugin caching_sha2_password reported e…