接口自动化【七】__包装响应结果的数据为key-value

news2024/12/25 8:56:27

文章目录

  • 前言

  • 一、本章学习的思路

  • 二、用接口新建商品_使用步骤

    • ​​​​​​​步骤一:先用抓包的方式拿到新建商品的接口

    • 步骤二:我们先用单接口的形式,把这个商品添加成功

  • 三、处理响应接口_(包装响应结果的数据为:key-value)

    • ​​​​​​​​​​​​​​函数:transfer_resp_text_to_dict

  • 四、新建商品的流程

    • Excel表格中的请求数据_(从登录,上传图片到新建商品)

  • 总结


前言

遇到上下接口关联,下一个接口里面的部分数据会使用到上一个接口里面的数据,上一个涉及的接口返回的不是json格式的字符串的时候。需要去处理这个数据。写一个函数专门去处理这个没有key的数据。


一、本章学习的思路

我们知道,接口关联,最低都是一个接口。那么现在要上传一个商品,就需要关联两个接口,第一个是登录获取权限的接口,第二个就是新建商品时,上传商品图片,这个图片是要依赖于上一个上传图片的接口。所以在这里就会依赖两个接口。

这里面涉及到的知识点:


1、jsonpath的用法,这个的目的就是用来提取上传图片接口的返回值


2、接口的返回值不是json格式的字符串,那么我们要把这个字符串组装成为一个json形式的字符串。


那么要核心思想就是,给这个单独的字符串添加一个key。

先使用普通的接口写法,先进行商品的新建。确认无误后,再进行封装。

二、用接口新建商品_使用步骤

先用抓包的方式拿到新建商品的接口。

我们可以看到这个接口就是商品添加成功的接口。

下面的那一个接口就是返回所有商品的接口,也就是界面上我们看到很多商品的接口。

步骤一:我们先拿取这个接口的相关信息

 

请求的URL:http://mall.lemonban.com:8108/prod/prod

请求的方法:post

请求数据:

{"t":1685543534167,"prodName":"大水杯","brief":"","video":"","prodNameEn":"大水杯","prodNameCn":"大水杯","contentEn":"","contentCn":"<p>https://img20.360buyimg.com/imgzone/jfs/t1/188624/12/24718/216131/6283adb4Ea0940517/db811f2d5728180f.jpg.avif</p>","briefEn":"","briefCn":"","pic":"2023/05/b2f01c9cb9cb4cf2abf1d69e2db85fc7.","imgs":"2023/05/b2f01c9cb9cb4cf2abf1d69e2db85fc7.","preSellStatus":0,"preSellTime":null,"categoryId":151,"skuList":[{"price":10,"oriPrice":20,"stocks":0,"skuScore":1,"properties":"","skuName":"","prodName":"","weight":0,"volume":0,"status":1,"partyCode":"qhjtest001","prodNameCn":"大水杯","prodNameEn":"大水杯"}],"tagList":[1],"content":"","deliveryTemplateId":1,"totalStocks":0,"price":10,"oriPrice":20,"deliveryModeVo":{"hasShopDelivery":true,"hasUserPickUp":false,"hasCityDelivery":false}}

从上面的请求的数据看出,这个样子并没有多么的好看,看着乱糟糟的。那么我们可以使用在线json格式化工具。

 在线json格式化之后:

{
	"t": 1685543534167,
	"prodName": "大水杯",
	"brief": "",
	"video": "",
	"prodNameEn": "大水杯",
	"prodNameCn": "大水杯",
	"contentEn": "",
	"contentCn": "<p>https://img20.360buyimg.com/imgzone/jfs/t1/188624/12/24718/216131/6283adb4Ea0940517/db811f2d5728180f.jpg.avif</p>",
	"briefEn": "",
	"briefCn": "",
	"pic": "2023/05/b2f01c9cb9cb4cf2abf1d69e2db85fc7.",
	"imgs": "2023/05/b2f01c9cb9cb4cf2abf1d69e2db85fc7.",
	"preSellStatus": 0,
	"preSellTime": null,
	"categoryId": 151,
	"skuList": [{
		"price": 10,
		"oriPrice": 20,
		"stocks": 0,
		"skuScore": 1,
		"properties": "",
		"skuName": "",
		"prodName": "",
		"weight": 0,
		"volume": 0,
		"status": 1,
		"partyCode": "qhjtest001",
		"prodNameCn": "大水杯",
		"prodNameEn": "大水杯"
	}],
	"tagList": [1],
	"content": "",
	"deliveryTemplateId": 1,
	"totalStocks": 0,
	"price": 10,
	"oriPrice": 20,
	"deliveryModeVo": {
		"hasShopDelivery": true,
		"hasUserPickUp": false,
		"hasCityDelivery": false
	}
}

字段解释:

"t": int(time.time()*1000), ,时间戳
"prodName": "测试商品2021", #商品名称:必填项,不能为空,长度小于200字节
"brief": "", #商品卖点,长度小于500字节
"video": "", #商品视频,
"prodNameEn": "测试商品2021", #商品英文名称,必填项,不能为空,长度小于200字节
"prodNameCn": "测试商品2021",#商品中文名称,必填项,不能为空,长度小于200字节
"contentEn": "", #商品英文详情
#商品中文详情,必填项
"contentCn": "<p><img src=\"https://img12.360buyimg.com/imgzone/jfs/t1/194094/17/13364/615284/60f10e24E8c1a300c/303452a9499e7821.jpg\" alt=\"\" width=\"750\" height=\"1169\" /><img src=\"https://img20.360buyimg.com/imgzone/jfs/t1/216033/37/2676/581146/617f9223E9ce066dc/2f2b743cc0698f25.jpg\" alt=\"京东图片2\" width=\"750\" height=\"1278\" /></p>",
"briefEn": "", #产品卖点英文,长度小于500字节
"briefCn": "产品卖点",#产品卖点中文,必填项,长度小于500字节
"pic": "2021/11/4141b40563b844ddb321b8d01042229c.png",  #首页展示图,必填项
# 商品图片,首页多张图片,必填项
"imgs": "2021/11/4141b40563b844ddb321b8d01042229c.png,2021/11/c1c5b33beaf94581a1071ae3213aad78.png",
"preSellStatus": 0, #预售状态 1:开启 0:未开启
"preSellTime": None, #预售发货时间
"categoryId": 148, #商品分类,填对应分类的Id号
"skuList": [{
    "price": 20, #商品价格,必填项
    "oriPrice": 20, #商品原价,必填项
    "stocks": 10, # 商品库存量
    # "skuScore": 1, #去掉,后端未接收
    # "properties": "",#去掉,后端未接收
    # "skuName": "",#去掉,后端未接收
    "prodName": "", # 商品名称,长度小于200字节
    "weight": 10, #商品重量,必填项
    "volume": 0, #商品体积,必填项,kg
    "status": 1, #商品状态,默认是1:正常状态, -1:删除, 0:下架
    "partyCode": random.randint(100,10000000),# 商品编码,,不可重复
    "prodNameCn": "测试商品2021",#商品中文名称,必填项,不能为空,长度小于200字节
    "prodNameEn": "测试商品2021" #商品英文名称,必填项,不能为空,长度小于200字节
}],
"tagList": [1], #分组标签列表,
"content": "", # 商品详情
"deliveryTemplateId": 1, #运费模板id,
"totalStocks": 10, #商品库存量
"price": 20,#商品价格,必填项
"oriPrice": 20, #商品原价,必填项
"deliveryModeVo": { #是否能够用户自提
    "hasShopDelivery": True, # 上家配送
    "hasUserPickUp": False, # 用户自提
    "hasCityDelivery": False # 同城配送

思考1:如果商品添加成功了,那么我们需要什么字段才知道是不是已经添加成功了呢?

如果从数据的方面出发:商品添加成功 -- 返回商品id,从数据库里tz_prod里的商品id。 tz_sku是库存表。

思考2:如果是就这个添加商品的接口把它做接口测试,那么我们会对字段思考哪些呢?

# 哪些字段可以不用改。。

# 哪些字段是需要去测试类型、格式是否正确的(字段校验、必传不传)

# 不同的字段组合 # 优先级 - 常用和不常用

在测试接口时,校验字段时,我们可以不传一些字段,来校验接口的返回值。从而达到断言的目的。例如:

步骤二:我们先用单接口的形式,把这个商品添加成功

注意:这里有个非常重要的一点,虽然我们前面说,可以用在线格式化的工具,进行json字符串的格式化,但是千万不要直接复制过来到Python中的字典里面,不然发送请求后就会提示莫名其妙的什么参数没有传,其实是传了的,就算去修改了参数也还是不能传成功。所以必须复制那个原始的不好看的数据,再到Python里面,手动调节

 

 附上代码:

import requests

add_product_req_data = {
    "t": 1685547292565,
    "prodName": "小狗狗1",
    "brief": "",
    "video": "",
    "prodNameEn": "小狗狗1",
    "prodNameCn": "小狗狗1",
    "contentEn": "",
    "contentCn": "<p>https://img20.360buyimg.com/imgzone/jfs/t1/188624/12/24718/216131/6283adb4Ea0940517/db811f2d5728180f.jpg.avif</p>",
    "briefEn": "",
    "briefCn": "小狗",
    "pic": "2023/03/df4c106871d14226b01190ca25d420c3.png",
    "imgs": "2023/03/df4c106871d14226b01190ca25d420c3.png",
    "preSellStatus": 0,
    "preSellTime": None,
    "categoryId": 322,
    "skuList": [{"price": 50,
                 "oriPrice": 100,
                 "stocks": 20,
                 "skuScore": 1,
                 "properties": "",
                 "skuName": "",
                 "prodName": "",
                 "weight": 1,
                 "volume": 0,
                 "status": 1,
                 "partyCode": "QHJtest005",
                 "prodNameCn": "小狗狗1",
                 "prodNameEn": "小狗狗1"}],
    "tagList": [21],
    "content": "",
    "deliveryTemplateId": 1,
    "totalStocks": 20,
    "price": 50, "oriPrice": 100,
    "deliveryModeVo": {"hasShopDelivery": True,
                       "hasUserPickUp": False,
                       "hasCityDelivery": False}}

# 登录
url = 'http://mall.lemonban.com:8108/adminLogin'
req_data = {"principal": 'student', "credentials": "123456a", "imageCode": "lemon"}
res = requests.request("post", url, json=req_data)
token = res.json()["access_token"]

# 提交产品
url = "http://mall.lemonban.com:8108/prod/prod"
header = {"Authorization": f"bearer{token}"}
resp = requests.request("post", url, json=add_product_req_data, headers=header)
print(resp.text)

步骤三:把请求数据里面的某些字段(带有随机性质的字段)用函数去生成。

暂时留个空白

三、处理响应接口__(包装响应结果的数据为:key-value)

思考:

1、返回的响应有json数据

2、返回的数据不是json就是个纯文本

对于第二点,返回的数据就是一个纯文本的数据,那么下一个接口就要用这个数据怎么办?怎么去拿到这个数据。

解决方法:我们拿取一个值,用的方法是从字典当中拿取。那么此时,纯文本数据就不是json格式的。这个时候我们就要加上一个key,key可以自由定义名称。以后就靠这个key来取值。

这里,我们定义一个函数,这个函数的作用就是专门用来处理响应。

函数:transfer_resp_text_to_dict

 

四、新建商品的流程

1、登录获取token

2、上传一张图片,作为商品图

3、用上传的图片来进行作为新建商品的图片

因此在Excel表格中,完成上面三步的接口,就需要对应的接口数据。

注意:

(1)这个请求数据里面有替换的符号,这个知识点,需要到下个章节讲解,目前这里就是先有个印象。目前Excel表格中的第三个接口,新建商品暂时不能和第二个接口关联上。

(2)除登录之外,以后的每一个接口,都要带上请求头,token。

Excel表格中的请求数据_(从登录,上传图片到新建商品)

req_data
{
    "t": 1685547292565,
    "prodName":"#cur_time#",
    "brief": "",
    "video": "",
    "prodNameEn": "小狗狗1",
    "prodNameCn": "小狗狗1",
    "contentEn": "",
    "contentCn": "<p>https://img20.360buyimg.com/imgzone/jfs/t1/188624/12/24718/216131/6283adb4Ea0940517/db811f2d5728180f.jpg.avif</p>",
    "briefEn": "",
    "briefCn": "小狗",
    "pic": "#pic#",
    "imgs": "#pic#",
    "preSellStatus": 0,
    "preSellTime": None,
    "categoryId": 322,
    "skuList": [{"price": 50,
                 "oriPrice": 100,
                 "stocks": 20,
                 "skuScore": 1,
                 "properties": "",
                 "skuName": "",
                 "prodName": "",
                 "weight": 1,
                 "volume": 0,
                 "status": 1,
                 "partyCode": "#cur_time#",
                 "prodNameCn": "小狗狗1",
                 "prodNameEn": "小狗狗1"}],
    "tagList": [21],
    "content": "",
    "deliveryTemplateId": 1,
    "totalStocks": 20,
    "price": 50, "oriPrice": 100,
    "deliveryModeVo": {"hasShopDelivery": True,
                       "hasUserPickUp": False,
                       "hasCityDelivery": False}}

这个表格里面标红的字段,是后面用正则表达式替换。

整体表格的数据展示:

idtitleurlmethodreq_datafilesextract
0前置-登录http://mall.lemonban.com:8108/adminLoginpost{"principal": 'student',"credentials": "123456a","imageCode": "lemon"}{"token":"$..access_token"}
1后台上传图片http://mall.lemonban.com:8108/admin/file/upload/imgpost{"file": ("$picture_name", "$picture_path","image/png")}
2新建商品http://mall.lemonban.com:8108/prod/prodpost{
    "t": 1685547292565,
    "prodName":"#cur_time#",
    "brief": "",
    "video": "",
    "prodNameEn": "小狗狗1",
    "prodNameCn": "小狗狗1",
    "contentEn": "",
    "contentCn": "<p>https://img20.360buyimg.com/imgzone/jfs/t1/188624/12/24718/216131/6283adb4Ea0940517/db811f2d5728180f.jpg.avif</p>",
    "briefEn": "",
    "briefCn": "小狗",
    "pic": "#pic#",
    "imgs": "#pic#",
    "preSellStatus": 0,
    "preSellTime": None,
    "categoryId": 322,
    "skuList": [{"price": 50,
                 "oriPrice": 100,
                 "stocks": 20,
                 "skuScore": 1,
                 "properties": "",
                 "skuName": "",
                 "prodName": "",
                 "weight": 1,
                 "volume": 0,
                 "status": 1,
                 "partyCode": "#cur_time#",
                 "prodNameCn": "小狗狗1",
                 "prodNameEn": "小狗狗1"}],
    "tagList": [21],
    "content": "",
    "deliveryTemplateId": 1,
    "totalStocks": 20,
    "price": 50, "oriPrice": 100,
    "deliveryModeVo": {"hasShopDelivery": True,
                       "hasUserPickUp": False,
                       "hasCityDelivery": False}}

 

 


总结

这个章节主要理解的点是:

1、对于响应的数据如果不是json格式的字符串,想办法添加一个key。

2、其次在某些字段使用正则表达式来替换。

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

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

相关文章

Flume自定义拦截器 - ETL拦截器和分类拦截器

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、拦截器&#xff08;Interceptor&#xff09;和选择器&#xff08;Selector&#xff09; 拦截器&#xff08;Interceptor&#xff09; 选择器&#xff08;Selector&#xff09; 二、自定…

【机器学习 | 深度学习】Colab是什么?以及如何使用它?

文章目录 一、介绍二、如何使用 Colaboratory 创建代码三、实例测试 一、介绍 Colaboratory&#xff08;简称为Colab&#xff09;是由Google开发的一种基于云端的交互式笔记本环境。它提供了免费的计算资源&#xff08;包括CPU、GPU和TPU&#xff09;&#xff0c;可让用户在浏…

本地部署gitlab学习git使用

文章目录 前言一、安装gitlab二、nginx反向代理三、本地配置hosts&#xff0c;自定义域名四、配置gitlab独立ngxin实现域名访问五、其他总结 前言 最近想学习git使用了&#xff0c;在本地部署一个gitlab社区版玩玩吧~ gitlab只能部署在liunx系统上面&#xff0c;可以使用云服务…

TLD2314EL-ASEMI代理英飞凌汽车芯片TLD2314EL

编辑&#xff1a;ll TLD2314EL-ASEMI代理英飞凌汽车芯片TLD2314EL 型号&#xff1a;TLD2314EL 品牌&#xff1a;Infineon(英飞凌) 封装&#xff1a;SSOP-14-EP-150mil 特性&#xff1a;LED驱动、汽车芯片 宽温度范围&#xff1a;-40C~150C 封装&#xff1a;SSOP-14&…

虚拟云网络系列 | 如何将 NSX NVDS 迁移到 VDS

1.NVDS 迁移到 VDS 的主要原因 在早期的 vsphere6.7 的版本上安装 NSX-T 采用的都是 NVDS&#xff0c;而随着 NSX 版本的升级&#xff0c;从 NSX 4.0 开始&#xff0c;NSX 已经不在支持在 ESXi 上部署 NVDS&#xff0c;仅能使用 vsphere7.0 上的 VDS。所以&#xff0c;对于早期…

linux系统编程-----下

linux网络编程 tcp通信 Berkeley Socket TCP/IP协议族标准只规定了网络各个层次的设计和规范&#xff0c;具体实现则需要由各个操作系统厂商完成。最出名的网络库由BSD 4.2版本最先推出&#xff0c;所以称作伯克利套接字&#xff0c;这些API随后被移植到各大操作系统中&…

Android Key Hash生成

在接入FaceBook 安卓第三方登录的时候&#xff0c;就需要获取Debug Android Hash Key。 Android Hah Key有两种&#xff0c;即开发密钥散列和发布密钥散列 获得散列值需要借助openssl工具。 下载并配置openssl 1、下载 到https://code.google.com/archive/p/openssl-for-win…

校验表格里的表单

<template><el-dialogtitle"收货地址":visible.sync"dialogFormVisible">{{ form }}<el-formref"form":model"form":rules"rules"label-width"100px"><el-form-itemlabel"活动名称&quo…

Roop:单图离线版软件包及使用方法!

你们要的“单图换脸”离线一键运行版来了。Roop发布几十个小时后&#xff0c;马不停蹄地搞了Colab在线版。其实这东西都挺好的&#xff0c;又快又方便&#xff0c;几乎没有任何硬件要求&#xff0c;点一点就可以搞定了。但是它有一个问题&#xff0c;就是没有“魔法” 就没法使…

国际电商网站APP开发-国际电商网站,跨境方案

跨境电商一种在国际贸易中进行电子商务的策略。它涉及到在线销售产品或服务给海外消费者&#xff0c;通常涉及到国际支付、物流和海外市场营销的问题。以下是一些跨境电商方案的例子&#xff1a; 跨境电商平台&#xff1a;建立自己的跨境电商平台&#xff0c;提供海外消费者便捷…

Docker安装达梦(DM)关系型数据库,DBeaver远程连接使用数据库

Docker安装达梦&#xff08;DM&#xff09;关系型数据库 首先你得去达梦数据库官网注册一个账号。 下载数据库部署包 官网&#xff1a;https://www.dameng.com/ 然后找到需要的数据库&#xff1a; 官网试用地址&#xff1a;https://eco.dameng.com/tour/?source_urlht…

ansible使用剧本操作硬盘

在一个节点添加一块20G的硬盘 通过ansible剧本判断是否存在第二块硬盘&#xff0c;且硬盘的大小大于10G 满足条件&#xff1a; 在此硬盘创建一个分区&#xff0c;大小为10G 使用此分区创建一个卷组 从此卷组中创建一个逻辑卷 将此逻辑卷格式化为xfs 将此逻辑卷挂载至/mountdir目…

上海28岁程序员失业,感叹:测试估计没戏了,想去卖点煎饼果子养家~

程序员危机&#xff0c;似乎是一个跨不过去的坎&#xff0c;最近&#xff0c;在职场论坛上看到了一位魔都程序员被裁的帖子&#xff0c;现在因为“互联网寒冬”不少程序员优化被裁。 帖子具体内容如下&#xff1a;因为疫情&#xff0c;老大哥所在部门被砍掉了&#xff0c;部门所…

科技项目验收测试报告获取有什么注意事项?作用都有哪些?

当科技项目通过测试并准备交付验收时&#xff0c;需要编写科技项目验收测试报告。科技项目验收测试报告是项目验收的重要部分&#xff0c;是对项目质量的一种客观证明。获取科技项目验收测试报告需要注意什么呢?本文从专业角度探讨这个话题&#xff0c;并介绍验收测试报告的作…

【数据分享】1929-2022年全球站点的逐日降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2022年全…

069:cesium围绕一个固定点自动左右旋转

第069个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置一个固定点为中心点,通过lookAtTransform来固化点,通过监听clock,来设置自动旋转。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共79行)相关…

网络安全怎么入行?有哪些误区需要避免?

目录 一、学习网络安全容易造成的误区 二、学习网络安全的基本准备与条件 三、网络安全学习路线 第一步&#xff1a;计算机基础 第二步&#xff1a;编程能力 第三步&#xff1a;安全初体验 第四步&#xff1a;分方向 怎么入门&#xff1f; 四、明确目标&#xff0c;定…

硬核科普:“画”说业界首个算网大脑

数字经济时代 算力已经成为核心生产力 中国移动提出“算力网络”全新理念 创新构建“连接算力能力” 新型信息服务体系 作为数字中国建设的国家队、主力军 中国移动布局算力网络的先锋队 移动云依托集团运营商禀赋优势 构建“4N31X”分布式云资源布局 为推动算力一点接入…

python 第四章 字符串str

系列文章目录 第一章 初识python 第二章 变量 第三章 基础语句 文章目录 4.1认识字符串字符串特征 4.2字符串输出4.3字符串输入4.4下标4.5切片4.6常用操作方法查找修改修改大小写转换字符串对齐删除空白字符判断 4.1认识字符串 字符串是 Python 中最常用的数据类型。我们一般使…

7min 到 40s:SpringBoot 优化居然可以玩出这么多花样

背景 耗时问题排查 观察 SpringBoot 启动 run 方法 监控 Bean 注入耗时 优化方案 如何解决扫描路径过多&#xff1f; 如何解决 Bean 初始化高耗时&#xff1f; 新的问题 SpringBoot 自动化装配&#xff0c;让人防不胜防 使用 starter 机制&#xff0c;开箱即用 背景 公…