Python+Flask+Html做一个简单的测试联调工具

一、场景:

当与外部联调或者内部需要走一些固定流程,且重复的事情,往往需要测试经常性的配合且做重复的工作的联调,这时候需要一些工具作为辅助,或者提供给外部

二、框架:

可以通过Python+Flask+Html做一个简单的测试联调工具

三、原理

通过app.py调用我们原有接口进行登录获取token并保存后传给内部接口,并通过Flask框架获取前端传值并传给我们内部接口进行内部接口的调用起到一个web页面操作进行调用内部接口的作用

四、源码:

1、框架结构:
  • app.py:后端代码

  • templates :前端代码
    在这里插入图片描述

2、后端代码:

from flask import Flask, request, session, redirect, url_for, render_template
import requests

app = Flask(__name__)
app.secret_key = 'your_very_secure_secret_key_2024!'  # 生产环境需使用强密钥

# 基础配置
app.config.from_mapping(
    BASE_URL="https://XXXX.com",
    LOGIN_URL="/login",
    APP_URL="https://XXXX.com",
)

@app.before_first_request
def debug_routes():
    print("\n=== 已注册的路由清单 ===")
    for rule in app.url_map.iter_rules():
        print(f"端点: {
     
     rule.endpoint}, 路径: {
     
     rule.rule}")
def get_api_headers():
    """管理端请求头(使用 Bearer 认证)"""
    return {
   
   
        "Authorization": f"Bearer {
     
     session.get('auth_token', '')}",
        "Content-Type": "application/json"
    }


def get_app_headers():
    """APP端动态请求头(使用 token 字段)"""
    return {
   
   
        "host": "XXXX.com",
        "clienttype": "WORKER_APP",
        "gxd-client": "WORKER_APP_CLIENT",
        "platformtype": "iOS",
        "token": session.get('auth_token', '')  # 统一使用相同 token
    }


def login_required(f):
    """增强版登录校验装饰器"""

    def wrapper(*args, **kwargs):
        if not session.get('logged_in'):
            return redirect(url_for('login'))
        return f(*args, **kwargs)

    return wrapper

@app.route('/', methods=['GET', 'POST'], endpoint='index')  # 根路径
@login_required  # 装饰器在 @app.route 下方
def index():  # 函数名即端点名称 'index'
    result = None
    errors = []

    if request.method == 'POST':
        session['last_form'] = request.form.to_dict()
        action = request.form.get('action')
        order_no = request.form.get('order_no', '').strip()
        raise_fee = request.form.get('raise_fee', '0')

        # 操作映射表
        action_handlers = {
   
   
            'raise': lambda: add_raise_price(order_no, raise_fee),
            'query': lambda: get_order_detail(order_no),
            'complete': lambda: complete_order(order_no),
            'upload': lambda: upload_location(),
            'take': lambda: take_order(order_no),
            'picking': lambda: picking_order(order_no),
            'pickup': lambda: pickup_order(order_no),
            'worker_complete': lambda: worker_complete_order(order_no)
        }

        if action in action_handlers:
            handler_result = action_handlers[action]()
            if 'error' in handler_result:
                errors.append(handler_result['error'])
            else:
                result = handler_result
        else:
            errors.append("无效的操作类型")

    return render_template('index.html', errors=errors, result=result)
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 获取登录凭证
        username = request.form.get('username')
        password = request.form.get('password')

        # 构造登录请求
        login_url = f"{
     
     app.config['BASE_URL']}{
     
     app.config['LOGIN_URL']}"

        try:
            response = requests.post(
                login_url,
                json={
   
   
               
                    "password": password,
            
                    "phone": username
                },
                timeout=10
            )
            login_data = response.json()
            print(login_data)
            print(login_data.get('code'))
            print(login_data["data"]["token"])


            # 处理登录响应
            if login_data.get('code') == 0:  # 根据实际文档调整
                # 统一存储 token 到 auth_token
                session['auth_token'] = login_data["data"]["token"]
                session['logged_in'] = True
                session.modified = True  # 强制保存 Session
                print("DEBUG - 当前 Session 内容:", dict(session))  # 输出 Session 内容
                return redirect(url_for('index'))

            else:
                error_msg = login_data.get('message', '登录失败')
                return render_template('login.html', error=error_msg)
        except Exception as e:
            return render_template('login.html',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CesareCheung

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

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

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

打赏作者

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

抵扣说明:

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

余额充值