首页 > 其他分享 >接口自动化测试第三天,利用类的动态方法设置全局变量

接口自动化测试第三天,利用类的动态方法设置全局变量

时间:2023-12-28 15:34:53浏览次数:27  
标签:resp excel 第三天 接口 jsonpath dict 全局变量 data

今天的注意知识点是学会使用jsonpath,利用类的动态方法设置全局变量

我们大多数情况下,接口都需要使用到登录时获取的token,为了方便使用,我们需要将登录后的token使用jsonpath表达式提取出来然后设置为全局变量

首先提前下载好第三方库,jsonpath,这里给一个jsonpath官方地址和在线练习平台

官方地址:https://goessner.net/articles/JsonPath/

在线检验jsonpath是否正确:https://www.jsonpath.cn/

然后我们需要在我们的测试数据文档里面多加一列,用来设置全局变量以及jsonpath提取表达式。如下图。需要注意的是,这一列的填写格式是”{全局变量名:jsonpath表达式, 全局变量名:jsonpath表达式}“

 

我们先编写设置全局变量的工具脚本

```python
class GlobalData:

token = None

#设置全局变量
#setattr(GlobalData,"全局变量名称","提取全局变量的jsonpath表达式")
#获取全局变量
#getattr(GlobalData,"全局变量名称")
```

然后这里我们需要编写提取的工具脚本了

```python
import json
from jsonpath import jsonpath

from tools.handle_global_data import GlobalData


def extract_value_from_resp(excel_data,resp_dict):
"""

:param excel_data:excel中的extract列的值.字符串类型的
:param resp_dict: 响应数据,字典类型
:return: None,提取的值都设置为全局变量了
"""
#将excel中的值转换为字典格式
excel_dict = json.loads(excel_data)

#遍历这个excel的值,提取出全局变量名和提取表达式
for key,value in excel_dict.items():
print("全局变量名称是:",key)
print("jsonpath提取表达式是:",value)
#从响应结果中,根据jsonpath表达式提取出来值
#提取到的值是列表形式,没提取到就是False
result = jsonpath(resp_dict,value)
if result:
#如果有值的话,设置为全局变量
setattr(GlobalData,key,result[0])
```

准备好工具之后,就写测试用例脚本

提前导入需要的第三方库和自己的工具类方法,然后再一步步编写。

```python
import os
import json

import pytest
import requests

from tools.handle_excel import MyExcel
from tools.handle_req import Handle_req
from tools.handle_global_data import GlobalData
from tools.handle_extract import extract_value_from_resp
from tools.handle_path import basedir,testdata_dir,img_dir

 

#实例化发送请求对象
hrq = Handle_req()

#读取测试数据
me = MyExcel(os.path.join(testdata_dir,"cases.xlsx"),sheet_name="上传图片")
all_datas = me.read_all_data()


class TestUploadFile:
@pytest.mark.parametrize("case",all_datas)
def test_upload_file(self,case):
#调用封装的请求方法,会自行转换格式,不用多次处理
resp = hrq.send_req(case.get("method"),case.get("url"),json_data=case.get("req_data"),files=case.get("file"),token = getattr(GlobalData,"token"))

#有的请求返回的不是json格式,所以需要转换成字典格式
try:
resp_dict = resp.json()
except:
resp_dict = {"data":resp.text}

#excel中的extract列不是都有值的,如果有值,则提取出来设置为全局变量
if case.get("extract"):
extract_value_from_resp(case.get("extract"),resp_dict)

```

这里闹了一个乌龙,报错了告诉我,文件不存在,让我检查文件是否正常,然后我查看了一下目录下的文件,确定文件是没问题的,又去检查一下我写的handle_path工具类里面定义的图片文件路径,也没有问题,后面发现,原来是我的文件路径离我的项目路径还隔一层,于是修改img_dir路径重新发送请求。结果如下:

 

标签:resp,excel,第三天,接口,jsonpath,dict,全局变量,data
From: https://www.cnblogs.com/xuhaotest/p/17932814.html

相关文章

  • 码上放心-码上传接口开通指南
    码上放心-码上传接口开通指南(相关技术问题可进群咨询,钉钉群号:67685003096)返回文档平台技术对接支持阿里钉钉群:群号:67685003096一、什么是码上传服务?向有开发需求的经营(批发/物流)企业提供码上传接口开发包,企业通过码上接口实现码上放心平台与企业ERP、WMS等信息系统数据对接......
  • swagger接口未授权怎么玩?
    今天来分享下我是如何自动提取swagger中配置的API接口的,在此之前,先来了解下swagger是什么?下面是chatgpt的回答:总结起来就是一套方便开发人员设计、构建API的框架,国内外应用非常广泛,大家在日常信息收集的时候经常会遇到这样的系统,比如通过谷歌语法可以轻松找到:还可以......
  • c#语法JWT请求接口
    NuGet下载System.IdentityModel.Tokens.Jwt包下面是获取token,需要引用对应的jwtusingSystem.IdentityModel.Tokens.Jwt;usingMicrosoft.IdentityModel.Tokens;privatevoidbutton1_Click(objectsender,EventArgse){stringsecretId="a1bc3900b......
  • Handler接口
    typeHandlerinterface{ServeHTTP(ResponseWriter,*Request)}处理http请求的接口---相当于Java的Controller方法配合http包下的方法使用funcListenAndServe(addrstring,handlerHandler)error{server:=&Server{Addr:addr,Handler:handler}retu......
  • Jmeter —— 接口之间关联调用(获取上一个接口的返回值作为下一个接口的请求参数)
    正则表达式:具体如何操作:1.草稿保存,此请求的响应数据的id为发布总结的请求参数draft_id2.草稿保存的响应数据3.在草稿保存的请求中,添加后置处理器-正则表达式提取器,提取响应数据的id信息4.发布总结请求中,填写请求参数5.最终,可正常发布最后如果你想学习软件测......
  • 05 读写I2C接口EEPROM实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述我们知道I2C总线具备广泛的用途,比如寄存器的配置,EEPROM的使用,更重要的是I2C总线上可以挂载非常多的外......
  • 06 读写I2C接口的RTC时钟芯片
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述本节课继续利用I2C总线控制器实现对RTC时钟芯片,DS1337的读写访问,进一步验证我们设计的i2c控制器的可靠......
  • 微信小程序实现语音转文字接口,提供中文普通话转文字服务。
    进行录音initRecorderManager(){//微信自带语音初始化this.data.recorderManager=wx.getRecorderManager();//监听录音开始事件this.data.recorderManager.onStart(()=>{console.log('录音开始');});//监听录音暂停事件......
  • EasyCVR接口调用编辑通道详细步骤
    近期有用户反馈,由于是初次使用EasyCVR,不知道如何调用接口。其实对于新用户,我们配备了十分详细的用户手册,但为了用户更好地进行操作,可以参照小编以下步骤进行学习。1)首先添加设备接口:2)随后添加通道接口:3)最后编辑通道接口:......
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-7】 - 配置管理-Mvc【Plugin-Metric
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【4-6】-配置管理-Mvc【Plugin-Doc接口测试及文档】本篇继续介绍下一个内容:系统配置节点:Mvc- Plugin-Metric接口调用次数统计:配置界面如下:1、Metric.IsEnable:配置当前接口统计插件是否可用打开开关时,可以通......