我在Robot Framework
它可以創建Builtin.Import_Library
關鍵字在Test Suite
中間的類的實例編寫測試用例的方法,然後使用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
打印,我已經把在課堂WebServiceUtil
回報__init__
:
>> 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_SCOPE
更改爲GLOBAL
,但它沒有改變任何東西。
任何想法是什麼原因?
編輯1:
我也打過電話super
類__init__
方法WebServiceUtil
類的方法__init__
的開頭:
super(WebServiceUtil, self).__init__()
相同的結果。
編輯2:
我打過電話WebServiceUtil
方法不CALL METHOD
爲@Bryan有兩種方法說:
${result} = webserviceutil get_report_a
${result} = get_report_a
第一個返回No keyword with name 'webserviceutil.get_report_a' found.
一個第二個返回No keyword with name 'get_report_a' found.
。
編輯3:
有跡象表明,似乎在我的腦海要創建這個問題兩件事情:
- 我已經覆蓋
__init__
方法。 - 方法不是靜態方法。
我以前使用過Robot Framework
中的類,但都沒有上述規格;所以,我想也許這些是在這裏提出問題。
附加說明:正如在導入庫的文檔中所述,這個KW應該用於動態加載庫,以防在機器人執行之前libs不可用。在其他情況下,最好使用庫在*** Settings ***部分顯式導入庫。由IMPORT LIBRARY導入的庫在整個套件文件中可見,就像從設置導入 –
jozefow
@jozefow,類在測試執行前存在,但它的參數應該從配置文件中提取;它們不是我可以明確使用的常量。 –
@Bryan,我用兩種方式得到報告A;沒有希望。請查看我的編輯。 –