Robot Framework 自定義關鍵字
Robot framework 自定義了一些關鍵字我們可以把他們當作函數在設計測試用例的時候使用。
同時RF也提供了許多第三方的庫,我們可以自己下載使用。
當時我們在實際工作中,會編寫一些自己的函數來設計測試用例。
自定義關鍵的方法有兩種:
方法一:
如果你編寫的python模塊沒有使用面向對象的方法,那么直接在界面中選擇對應的python文件即可:
我在D盤下,新建了一個hello.py文件,里面代碼如下:
# -*- coding : utf-8 -*- def hello_world(): print("hello, world!")
我們打開robot framework, 選擇library,在彈出的窗口中,直接選剛才的文件即可:
如果庫文件導入正確, 庫的名字是黑色的,如果是紅色的就表示,有錯誤。
導入成功后,我們可以按下F5鍵,在彈出的庫關鍵字查詢中我啊們就可以看到我們剛才導入的庫:
選擇好source hello,我們會看到剛才文件中的函數變成了自定義關鍵字:
我們嘗試在測試用例中,使用這個自定義關鍵字,發現可以正常使用:
方法二
如果我們的python代碼中使用了面向對象方法,那么我們就不能使用方法一了,因為RF不能調用對象,我們則需要其他方法來實現。
首先我們要進入到Python的運行目錄,找到site-packages目錄下,這個目錄下存放的我們下載的一些python包。
1. 我們新建一個文件夾名叫: ‘ParameterAndSettings’, 這個將來會作為library進行使用。
2. 我們在該目錄下新建一個python文件, Settings.py
代碼如下:
import json import os from collections import namedtuple import random from datetime import datetime, timedelta class Settings(object): def __init__(self): file_path = 'C:\Program Files (x86)\Python37\Lib\site-packages\ParameterAndSettings\configuration.json' try: if os.path.isfile(file_path): with open(file_path, 'r') as fileobject: data = fileobject.read() try: json_obj = json.loads(data, object_hook=lambda d: namedtuple('json_obj', d.keys())(*d.values())) except Exception as e: raise Exception("Settings: Load the configuration to Json failed.\n " ) raise Exception("Settings: File is: %s" % (file_path)) self.server = json_obj.server self.modality = eval(json_obj.modality) self.bodypart = eval(json_obj.bodypart) self.grender = eval(json_obj.grender) self.notifyserver_exam_body_content = json_obj.notifyserver_exam_body_content self.watermark_path = json_obj.watermark_path self.db_connectString = json_obj.db_connectString self.db_driver = json_obj.db_driver self.db_server = json_obj.db_server self.db_default_database = json_obj.db_default_database self.db_uid = json_obj.db_uid self.db_pwd = json_obj.db_pwd self.report_template_file = json_obj.report_template_file self.report_file = json_obj.report_file self.report_default_printer = json_obj.report_default_printer self.EHDPS_status_url = json_obj.EHDPS_status_url self.EHDPS_printtask_create_url = json_obj.EHDPS_printtask_create_url self.EHDPS_printtask_print_url = json_obj.EHDPS_printtask_print_url self.EHDPS_printtask_report_getinfo_url = json_obj.EHDPS_printtask_report_getinfo_url self.EHDPS_printtask_report_print_url = json_obj.EHDPS_printtask_report_print_url self.EHDPS_printtask_status_url = json_obj.EHDPS_printtask_status_url self.EHDPS_printtask_status_dict = eval(json_obj.EHDPS_printtask_status_dict) self.EHDUS_upload_report_upload_url = json_obj.EHDUS_upload_report_upload_url self.Printmode_dict_mode_value = eval(json_obj.Printmode_dict_mode_value) self.Printmode_dict_value_mode = eval(json_obj.Printmode_dict_value_mode) self.Integration_URL = json_obj.Integration_URL self.Notify_URL = json_obj.Notify_URL self.Holdflag_dict_mode_value = eval(json_obj.Holdflag_dict_mode_value) self.Holdflag_dict_value_mode = eval(json_obj.Holdflag_dict_value_mode) else: raise Exception("File Error", "The file %s is not exist." % (file_path)) except Exception: raise Exception("Settings: init failed." ) ''' Random return a modality ''' def random_modality(self): modality = self.modality[random.randint(0, len(self.modality) - 1)] return modality ''' Random return a bodypart ''' def random_bodypart(self): modality_type = self.bodypart[random.randint(0, len(self.bodypart) - 1)] return modality_type ''' Random return a gender ''' def random_gender(self): grender = self.grender[random.randint(0, len(self.grender) - 1)] return grender ''' Random return a brithday ''' def random_brithday(self): random_number = random.randint(0, 100) random_days = random_number * 365 brithday = (datetime.now() - timedelta(days=random_days)).strftime('%Y-%m-%d') return brithday ''' return the content with string type. ''' def get_notifyserver_exam_body_content(self): ret = self.notifyserver_exam_body_content return ret ''' settings = Settings() print(settings.server) '''
3. 確保代碼無誤,可以正常使用
4. 在同級目錄下新建一個__init__.py文件,該文件的目的是將該目錄變成一個python的模塊包。
5. 我們在文件中輸入一下代碼:
# -*- coding: utf-8 -*- from ParameterAndSettings.Settings import Settings __verison__ = "0.1.1" class ParameterAndSettings(Settings): ROBOT_LIBRARY_SCOPE = 'GLOBAL'
我們看到我們從python文件中,導入我們定義的Settings模塊,並定義了一個名叫 ParameterAndSettings的class,這個class將成為RF的庫文件。
Settings的中的函數將成為關鍵字:
並且能夠在case中使用:
需要注意的是:
1. 庫文件里面,定義對象的文件名稱要和文件中定義的對象名稱要一致。就是說ParameterAndSettings文件夾下的Settings.py中定義的對象的名稱必須是 【Settings】
2. 對象定義文件中不能出現相對路徑否則會報錯: 比如"./ path", path = os.join(paath1, path2)等。
3. 如果庫文件導入失敗了,可以在Tools->View RIDE Log中查看錯誤原因。