简体   繁体   English

机器人框架 - 无法调用 Python function

[英]Robot Framework - Not able to call Python function

I've a Python script on the same directory that I have my robotframework script.我有一个 Python 脚本,与我的机器人框架脚本位于同一目录。 I want to log on the console the result from a function present in my python script using robotframework.我想使用机器人框架将 python 脚本中的 function 的结果登录到控制台。

My Python script (called raw_data.py):我的 Python 脚本(称为 raw_data.py):

from random import random

class raw_data:

    def return_random_number(self):
        result = random()
        return result

raw_data = raw_data()
number = raw_data.return_random_number()
print(number)

My RobotFramework on the same directory:我的 RobotFramework 在同一目录中:

*** Settings ***
Library     DatabaseLibrary
Library     OperatingSystem
Library     raw_data.py

Suite Setup         Connect To Database       pymysql  ${DBName}   ${DBUser}   ${DBPass}   ${DBHost}   ${DBPort}
Suite Teardown      Disconnect From Database

*** Variables ***
${DBName}   #
${DBUser}   #
${DBPass}   #
${DBHost}   #
${DBPort}   #

Print random number
    ${result}=     evaluate  return_random_number()
    log  result: ${result}

But when I run my RobotFramework script I get:但是当我运行我的 RobotFramework 脚本时,我得到:

Print random number                                 | FAIL |
Evaluating expression 'return_random_number()' failed: NameError: name 'return_random_number' is not defined nor importable as module

Well, you really just need to read the error message:好吧,你真的只需要阅读错误信息:

'return_random_number' is not defined nor importable as module

But the question is how to go from here.但问题是如何从这里 go 。

First off, it's good to start with reading the official documentation, specifically how to create custom libraries and use such keywords in your RF files.首先,最好从阅读官方文档开始,特别是如何创建自定义库并在您的 RF 文件中使用此类关键字。

After doing so, you'll find out several problems:这样做之后,你会发现几个问题:

  • custom libraries have a certain scope , so you should write it in there (choose the right for your case, I don't know which scope you need, so I'll randomly pick one):自定义库有一定的scope ,所以你应该把它写在那里(根据你的情况选择合适的,我不知道你需要哪个 scope ,所以我会随机选择一个):
from random import random

class RawData:

    ROBOT_LIBRARY_SCOPE = 'TEST CASE'

    def return_random_number(self):
        return random()
  • your Python module/library won't be executed as a standalone Python script, so you can delete the last 3 lines:您的 Python 模块/库不会作为独立的 Python 脚本执行,因此您可以删除最后 3 行:
raw_data = raw_data()
number = raw_data.return_random_number()
print(number)

So, your custom library should look like:因此,您的自定义库应如下所示:

RawData.py原始数据.py

from random import random

class RawData:

    ROBOT_LIBRARY_SCOPE = 'TEST CASE'
    ROBOT_LIBRARY_VERSION = 1.0

    def return_random_number(self):
        return random()

You can also add library version .您还可以添加库版本 It's recommended, it's a good practice.推荐,这是一个很好的做法。

Now, you want to import your library in RF:现在,您想在 RF 中导入您的库:

*** Settings ***
Library     RawData.py

I don't know why you're calling it RawData when in fact it returns a random number.我不知道你为什么叫它RawData实际上它返回一个随机数。 Consider using proper names.考虑使用专有名称。

Then you want to call your custom keyword.然后你想调用你的自定义关键字。 Custom keywords created in custom libraries could be called by simply typing the names of the Python methods without underscores, so you don't need any Evaluate keyword, you can just call your custom keyword like this:在自定义库中创建的自定义关键字可以通过简单地键入不带下划线的 Python 方法的名称来调用,因此您不需要任何Evaluate关键字,您可以像这样调用您的自定义关键字:

${result}=    Return Random Number

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM