gpt4 book ai didi

python - Robot Framework导入库实例不包含定义的方法

转载 作者:行者123 更新时间:2023-12-01 02:25:13 32 4
gpt4 key购买 nike

我在 Robot Framework 中编写了一个测试用例它在 Test Suite 中间创建一个类的实例使用Builtin.Import_Library关键字,然后使用 Builtin.Call_Method 调用其方法:

*** Settings ***
Resource MyKeywords.robot
Test Suite Initiate My Test


*** Keywords ***
Initiate My Test
${ip} = SET VARIABLE localhost
${port} = SET VARIABLE 2020
IMPORT LIBRARY src/Interface/Utility/WebServiceUtil.py
... ws_ip=${ip} ws_port=${port} WITH NAME webserviceutil


*** Test Cases ***
Test Report A
${result} = CALL METHOD webserviceutil get_report_a
LOG Result: ${result} console=${TRUE}

文件src/Interface/Utility/WebServiceUtil.py包含:

# -*- encoding: utf-8 -*-
import requests
import json
from robot.api import logger


class WebServiceUtil(object):

ROBOT_LIBRARY_SCOPE = 'TEST SUITE'

def __init__(self, ws_ip, ws_port):
self.reporter_a = ReportA(ip=ws_ip, port=ws_port)
self.reporter_b = ReportB(ip=ws_ip, port=ws_port)
self.reporter_c = ReportC(ip=ws_ip, port=ws_port)
logger.console('>> ZiZi >> webserviceutil has been initialized successfully!')
logger.console('>> ZiZi >> self.__dict__: ' + str(self.__dict__))
logger.console('>> ZiZi >> dir(self): ' + str(dir(self)))

def get_report_a(self):
return self.reporter_a.get_report()

def get_report_b(self):
return self.reporter_b.get_report()

def get_report_c(self):
return self.reporter_c.get_report()


class Report(object):

def get_report():
return 'This is abstract class!'


class ReportA(Report):

def get_report():
return 'This is class A!'


class ReportB(Report):

def get_report():
return 'This is class B!'


class ReportC(Report):

def get_report():
return 'This is class C!'

我在测试执行中遇到此错误:

Object 'webserviceutil' does not have method 'get_sponsor_report'.

console我已将其放入 __init__ 中类WebServiceUtil返回:

>> ZiZi >> webserviceutil has been initialized successfully!

>> ZiZi >> self.__dict__: {'reporter_a': <WebServiceUtil.ReportA object at 0x7fc18d96a8d0>, 'reporter_b': <WebServiceUtil.ReportB object at 0x7fc18d96abd0>, 'reporter_c': <WebServiceUtil.ReportC object at 0x7fc18d96a910>}

>> ZiZi >> dir(self): ['ROBOT_LIBRARY_SCOPE', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get_report_a', 'get_report_b', 'get_report_c', 'reporter_a', 'reporter_b', 'reporter_c']

如您所见,dir() 的输出中列出了类方法。 ,但未显示在 self.__dict__ 的输出中。

我也尝试更改 ROBOT_LIBRARY_SCOPEGLOBAL ,但它没有改变任何东西。

知道原因是什么吗?

编辑1:

我也尝试调用__init__方法super方法开头的类 __init__WebServiceUtil :

super(WebServiceUtil, self).__init__()

相同的结果。

编辑2:

我尝试调用WebServiceUtil没有 CALL METHOD 的方法正如 @Bryan 所说,有两种方法:

  1. ${result} = webserviceutil get_report_a
  2. ${result} = get_report_a

第一个返回 No keyword with name 'webserviceutil.get_report_a' found.第二个返回 No keyword with name 'get_report_a' found. .

编辑3:

在我看来,有两件事造成了这个问题:

  1. 我已覆盖__init__方法。
  2. 方法不是静态方法。

我使用过 Robot Framework 中的类之前,他们都没有上述规范;所以,我想也许是这些造成了这里的问题。

最佳答案

如果您导入它,方法将成为关键字。您不需要使用调用方法。在您的示例中,当您导入 WebServiceUtil 时,您可以访问名为 get report Aget report Bget report 的关键字C.

*** Test Cases ***
Test Report A
${result} = get report A
LOG Result: ${result} console=${TRUE}

关于python - Robot Framework导入库实例不包含定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486843/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com