You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Robot Framework自定义关键字中调用Python全局变量

解决Robot Framework调用Python生成的全局变量问题

问题分析

你当前的问题是Python脚本中生成的email全局变量无法被Robot Framework的关键字获取,导致登录时输入空值报错。这是因为Robot无法直接访问Python模块的全局变量,必须通过函数返回值或者暴露专门的获取函数来传递数据。

解决方案

1. 修改Python脚本,让函数返回生成的邮箱(推荐)

修改你的Python文件(假设名为student_helpers.py),让create_student函数直接返回生成的邮箱,同时确保依赖的变量(如admin_token、API_URI)正确初始化:

from faker import Faker
from datetime import date, timedelta
import requests

fake = Faker()
admin_token = None
API_URI = "你的API基础地址"  # 替换为实际地址

def get_admin_token():
    global admin_token
    # 这里实现获取admin_token的逻辑,比如调用后台登录接口
    admin_token = "实际获取的管理员令牌"

def create_student():
    get_admin_token()
    
    expirationAt = (date.today() + timedelta(1)).strftime("%d/%m/%Y")
    today = date.today().strftime("%d/%m/%Y")
    email = fake.ascii_safe_email()
    
    endpoint = "/api/admin/students/"
    payload = {
        "name": f"{email} {today}",
        "email": email,
        "expirationAt": expirationAt,
        "isAdmin": 0,
        "isActive": 1
    }
    headers = {"authorization": admin_token}
    
    r = requests.post(f"{API_URI}{endpoint}", data=payload, headers=headers)
    print('User created' if r.status_code == 201 else f'Erro: {r.status_code}')
    
    # 返回生成的邮箱,供Robot接收
    return email

2. 修改Robot Framework脚本,导入Python模块并获取邮箱

在helper.robot中导入你的Python模块,然后调用create_student函数获取邮箱,再传入登录关键字:

*** Settings ***
Resource              main.resource
Library               SeleniumLibrary
Library               student_helpers.py  # 导入Python模块
Variables             Login

*** Keywords ***
Login    
    # 调用Python函数创建学生,接收返回的邮箱
    ${email}=    Create Student
    Input    ${pageLogin.inputUser}        ${email}
    Input    ${pageLogin.inputPassword}    ${Variable.password}
    Click    ${pageLogin.buttonLogin}
    FOR  ${INDEX}  IN RANGE  0  10
        ${progress}  Run Keyword and Ignore Error  Wait Until Element Is Visible    ${pageHome.Logo}  timeout=15
        Exit For Loop If  '${progress[0]}'=='PASS'
    END

备选方案:通过函数暴露全局变量

如果你不想修改create_student的返回值,可以在Python脚本中添加一个获取邮箱的函数:

# 在student_helpers.py中添加
student_email = None

def create_student():
    global student_email
    # 原有逻辑不变,最后赋值给student_email
    student_email = fake.ascii_safe_email()
    # ... 其他代码 ...

def get_student_email():
    return student_email

然后在Robot中这样使用:

*** Keywords ***
Login    
    Create Student  # 先创建用户
    ${email}=    Get Student Email  # 调用获取邮箱的函数
    Input    ${pageLogin.inputUser}        ${email}
    # ... 后续登录逻辑 ...

关键说明

  • Robot Framework无法直接读取Python模块的全局变量,必须通过函数返回值或专门的 getter 函数传递数据。
  • 确保Python文件的路径在Robot的搜索路径中,或者使用绝对路径导入模块。

内容的提问来源于stack exchange,提问作者Makeurchoice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:45:41