【Apifox】循环调用文件夹中存在的图片请求接口并处理返回值

背景
需要进行商城服饰数据的录入(一个服饰多张图),但是目前系统内接口暂时不支持批量上传图片并获取文件下载路径(需要把文件名和下载地址做对应关系)。此处,使用Apifox完成当前需求,记录一下相关的操作:
1.添加一个前置脚本,查询指定文件夹中所有符合格式的图片数据并输出为list格式;
2.设置一个环境变量,存储所有接口调用已经使用过的文件名,只有获取到的新文件名没有被使用过,才调用文件上传的接口===防止数据重复使用;
3.添加后置脚本,获取接口返回值中文件的下载名称,并与上传使用的文件名一同写入到txt文件中;
4.自动化测试处,添加循环条件,几张图片就循环几次(其实可以再优化,但是不想写了),最终可以获得一个文件名和下载地址对应关系的txt文件。
下面是Apifox的前置脚本内容:

var file_list =[]
  //记得先添加环境变量used
  used = pm.environment.get("used");
  // console.log("used=",used)
  if(used == "{{used}}" || used == ""){
    var used =[]
  }
  //正常服饰照片"1"   切图服饰照片others
  //正常可不加type,我是为了区分图片类型单独做处理的
  var type = '--type='+"1";
  // console.log(type)
    try {
        result = pm.execute("findPict.py",[type]);
        file_list = JSON.parse(result.replace(/'/g, '"'))
        // console.log("file_list=",file_list)
        for (let i = 0; i < file_list.length; i++) {  
            file_now=file_list[i]
            //获取未使用的文件名
            if (!used.includes(file_now)){
              break
            }
        }  
    // console.log("file_now",file_now)  
    //将本轮使用的文件名写入到used里面去
    used.push(file_now)
    // console.log("used = ",used)
    pm.environment.set("used", used);   
    //设置临时变量以供接口调用
    pm.variables.set("file_now", file_now);
} catch (e) {
  console.error(e.message)
}

同时,上传文件的接口,需要处理一下文件的传参(批量修改参数,修改为:true,file,file://{{file_now}},file,)
调用的python脚本内容如下:

import os
import argparse
from glob import glob

def traverse_images (folder_path):
    image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif']
    images = []
    for image_format in image_formats:
        images.extend(glob(os.path.join(folder_path, image_format)))
    return(images)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--type', type=str, default=None)
    args = parser.parse_args()
    #type = 1 正常服饰图片;others:切图服饰图片
    if args.type == "1":
        folder_path = 'E:\\t_mall_cloth\\uploadEntrance'
        images = traverse_images(folder_path)
        print(images[:10])
    else:
        folder_path = 'E:\\t_mall_cloth\\t_fitting_img'
        images = traverse_images(folder_path)
        print(images[:10])

apifox后置脚本内容如下:

//正常服饰照片"1"   切图服饰照片others
  //可忽略这个字段
  var type = '--type='+"1";
  const file_all = pm.variables.get("file_now");
  const result = file_all.match(/[^\\]+$/);
  //获取文件名称
  const lastSegment = result ? result[0] : null;
  console.log(lastSegment)
	try {
        var jsonData = pm.response.json();
        if(jsonData.code==200){
          var upload_img = '--uploadImg='+lastSegment+" : "+jsonData.data;
          pm.execute("uploadImg.py",[upload_img,type]);
          }
        else{
          console.log(jsonData.data)
          }
} catch (e) {
  console.error(e.message)
}

调用的python脚本内容如下:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--uploadImg', type=str, default=None)
    parser.add_argument('--type', type=str, default=None)
    args = parser.parse_args()
    print(f'下载地址:args.uploadImg={args.uploadImg}')
    # type = 1 正常服饰图片;others:切图服饰图片
    if args.type == "1":
        filePath = "E:\\t_mall_cloth\\uploadEntrance\\upload_img.txt"
    else:
        filePath = "E:\\t_mall_cloth\\t_fitting_img\\upload_img.txt"
    with open(filePath,'a') as file:
        file.write(args.uploadImg)
        file.write('\n')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值