接口自动化“接口关联”(2)--单独的文件保存中间变量实现接口关联

在做接口自动化的时候经常会有一种场景是上一个接口的响应结果会用到下一个接口的请求中,通常我们会设置类变量做接口关联,但是类变量在跨py文件的时候就不是那么好用了,所以我们会将中间变量保存单独的文件中,这样进行调用的时候就直接把这个文件当成一个固件进行调用就可以了。

思路:通常我们会使用yaml文件的方法,先将中间变量写入到yaml文件中,然后下一个接口使用这个中间变量的时候再读取yaml文件,等到所有操作结束以后再将文件中的内容清清除掉

#中间变量写入yaml文件的函数

import os
import yaml
#写入
def write_yaml(data):
    with open((os.getcwd()+"/extract.yaml",encoding="utf-8",mode="a+") as f:
       yaml.dump(data,stream=f,allow unicode=True) 

#读取yaml中的中间变量

import os
import yaml

#读取
def read yaml(key):
    with open(os.getcwd()+"/extract.yaml",encoding="utf-8",mode="r") as f:
        value =yaml.load(f,yaml.FullLoader)
        return value[key]

#将中间文件中数据清除,因为每次执行的时候都会写入读取,

#清宅
def clear yam1():
    with open(os.getcwd()+ "/extract.yaml", encoding="utf-8", mode="w")as f:
        f.truncate()

实例:接口1是获取文件上传的token,接口2是将文件上传到指定的终端,接口2会用到接口1响应中的token ,这个时候将token保存在中间文件中

创建三个文件:主文件主要写接口的请求,yamldata主要写对yaml文件的写入读取还有清除,中间变量存储的文件

0730文件中代码如下

import json

import jsonpath
import pytest
import requests

from yamldata import write_yaml, read_yaml, clear_yam1

url1 = 'https://apigw-sit.ypshengxian.com/request'  # 接口调用的服务器的地址
url2 = 'https://sit-api-ypsx-resource.ypsx-internal.com/resource/upload'  # 将文件上传到终端的地址
filename = '库存导入模块.xlsx'  # 文件的地址
filepath='E:/testproject/库存导入模版.xlsx'
# 请求头的地址
headers1 = {
    'app-id': 'yptb',
    'app-version': '1.0',
    'app-platform': 'wxApp',
    'Content-Type': 'text/plain'
}
data1 = {"api": "ylp.md.resource.service.getUploadToken", "version": "1.0", "token": "5dabc95eac7e4520ba96bbe481f785a0",
         "nonce": "145a156d-d72b-11bc-bcbe-6f684dd2dca2", "login": "13270719291", "params": {"fileName": filename}}
#将data数据转换成json格式
data2=json.dumps(data1)
class TestUpload:
    #先将上一次的结果给清除掉
    clear_yam1()
 # 接口1获取上传的token
    def testupload_one(self):

        res = requests.request(method='POST', url=url1, data=data2, headers=headers1).json()
        idtoken = jsonpath.jsonpath(res, '$..params')[0]
        idtoken1=json.loads(idtoken)['token']
        datas={"token":idtoken1}
        write_yaml(datas)   #将中间变量写入到文件中


#接口2将文件上传到指定位置
    def testupload_two(self):
        files = {
            "file": ("库存导入模版.xlsx", open(filepath, "rb"), "application/json")  # 因为上传的文件是二进制所以要将文件以二进制的方式进行打开
        }
        data2 = {
            "token": read_yaml('token')
        }
        response = requests.request(method='POST', url=url2, files=files, data=data2).json()
        print(response)
def main():                       #定义一个函数执行类下面所有test开头的函数
    pytest.main([__file__])
if __name__ == '__main__':
    main()

 

 yamldata中的数据:

import os
import yaml
#写入
def write_yaml(data):
    with open(os.getcwd()+"/extract.yaml",encoding="utf-8",mode="a+") as f:
        yaml.dump(data,stream=f,allow_unicode=True)
#读取
def read_yaml(key):
    with open(os.getcwd()+"/extract.yaml",encoding="utf-8",mode="r") as f:
        value =yaml.load(f,yaml.FullLoader)
        return value[key]
#清除
def clear_yam1():
    with open(os.getcwd()+ "/extract.yaml", encoding="utf-8", mode="w")as f:
        f.truncate()

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值