【自动化接口测试(1)】postman与python_flask相结合,完成接口请求自动化 【建议加精收藏,真的有用!】

大家好,我是好学的小师弟,今天来和大家分享下,近期工作中用postman和python的flask框架写的一个脚本。

目录

代码流程

本文涉及到的相关内容基础知识介绍

1.postman入门简介

2.py文件如何生成exe文件

步骤

1.postman预请求

2.flask网页接口的编写

3.结果演示

4.有可能存在的问题

5.纯python代码


代码流程

postman的预请求对flask发送一个url,进行传参。python flask通过路由匹配,提取相应的参数值,该参数值就是我们想要的存在本地上的图片地址,python得到图片本地地址,接着找到他并对它进行编码,然后给postman返回一个base64编码后的图片字符串,然后postman将该返回值作为一个变量值,发送到我们的body请求体中,完成一次完整的请求发送。并获得预期响应结果。

本文涉及到的相关内容基础知识介绍

1.postman入门简介

【接口测试—postman】5分钟让你学会接口测试工具——postman的基础常用技巧,看完少走一周时间的弯路【建议收藏】

2.py文件如何生成exe文件

【python之pyinstaller】如何将.py文件生成.exe文件

近期在做路口抓拍车辆违规的算法接口测试,由于测试图片量大,对于web测试页面显示有问题的图片,如果再一次次的去手动对他们进行base64,然后在用算法接口对他们进行验证,看看是算法原生接口有问题还是我们调用算法的接口写的有问题。这样做的话,工程量就很大。所以我就尝试着写一个脚本,每次只要更改下postman里面的预请求图片地址,即可获得相对应的响应

随笔吐槽:写到这,我突然自闭了,我完全可以都用python写啊【事实上我还真把它写完了,只不过那个脚本做了两个功能,一时间没有想到这上面来】,还用啥postman调用flask返回接口。。。算了,写都写了,就当熟悉postman了(笑哭)

步骤

postman发预请求,url参数中含有图片地址——flask从url中提取到图片地址——对图片进行base64的编码——函数将编码后的结果返还给postman——postman将值存到一个变量中——该变量即是请求body中的一个参数值——接口请求构造完整——返回预期响应

1.postman预请求

因为接口请求body中有个参数,需要预请求提前请求另一个网址把这个变量值返回过来,这样才能构造一个完整的接口请求。

postman预请求代码

//postman预请求代码
//想要测试的图片保存在主机上的地址
image_path = "C:\\Users\\***\\Desktop\\2021-10-09*****\\一图多目标\\苏D3678Q_苏D36H26.png"
//对下面这个网址发起请求,url自己编写,只要和flask上对应起来就行。
//调用方法这里用的是get,因为方便,参数就在网址上显示出来,后面python直接读取网址上的参数就行了
pm.sendRequest("http://127.0.0.1:1234/image_base64?image_path=" + image_path, function (err, res) {
  //这里的网址用的是拼接的方式,问号前面是url,后面是键值对的方式传参
  //127.0.0.1就是访问主机,端口号自己定义(与flask中相匹配)
    if (err) {
        console.log(err);     // 如果响应出错,打印错误信息
        pm.environment.set("ImageBase64", "");  //设置一个ImageBase64变量   值为空
    } else {
        pm.environment.set("ImageBase64", res.text());//设置一个ImageBase64变量  值为flask返回的响应
    }
});

postman请求body

2.flask网页接口的编写

 通过对postman发起的请求,flask匹配到相应的路由,并返回对应的结果给到postman中

import base64
import os
from flask import Flask, request

app = Flask(__name__)

#查询请求url中是否有/image_base64,请求方法为get
@app.route('/image_base64', methods=['GET'])
def on_get_image_base64():
    image_path = ""
    try:
        #request.args.get  这个get请求获取的是前端传来的url参数中
        #是否含有id等于image_path的这个参数的值
        image_path = request.args.get("image_path")
        if os.path.isfile(image_path):
            #查看本地路径中是否有这张图片,有的话,就二进制打开文件,
            #并对他进行base64编码,然后返回值
            with open(image_path, mode='rb') as f:
                return base64.b64encode(f.read()).decode('utf-8')
        else:
            error_msg = "{}: not exists!".format(image_path)
    except Exception as e:
        error_msg = "{}: {}".format(image_path, repr(e))
    #没有  返回空
    return error_msg


if __name__ == '__main__':
    #规定下地址和端口,host='0.0.0.0' 本机所有ip都能访问
#flask默认的是http://127.0.0.1:5000/ 但是这个地址外部不能访问到,所以要把host设置下
    app.run(host='0.0.0.0', port='1234')

3.结果演示

预请求和请求body都写完后,flask也把他run起来,然后点击postman中的send,然后点击右上方的小眼睛,即可看到下图,可以看到,在该测试运行环境中,确实输入了这么一个变量和变量值。

返回结果

 这里我写了两个test,一个用来测算法原生接口返回的值,一个测自己开发人员写的调用接口返回来的值。通过对比,定位问题原因。

4.有可能存在的问题

1.flask打开,显示的网址端口还是5000,没有显示自己设置好的端口


2021.10.23更新

5.纯python代码

python写的这个就是一个纯粹的接口测试,发送请求,获取响应了。。。。。

每次改改,图片地址就完事了。。。

import base64
import requests
from pprint import pprint

image_path=r'C:\Users\***\Desktop\2021-10-09***三种需求\一图多目标\苏D5089X_苏D657G2.png'

qst_url='http://10.45.***.126:****/images/recog'

def base64_api(image_path):
    picture_path=image_path
    with open(picture_path,'rb')as f:
        '''
        这边只想对文件进行读操作
        '''
        picture_base64 = base64.b64encode(f.read())
    return picture_base64


params={
    "Output": {
        "SubClass": 1
    },
    "Model": 5,
    "ImageList": [
        {
            "ImageID": "1",
            "Data":base64_api(image_path)
        }
    ]

}

res=requests.post(url=qst_url,json=params)

response=eval(res.text)
pprint(response)

新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!

转载注明出处!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好学的小师弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值