Python 學習筆記20 自定義robot Framework 關鍵字


 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中查看錯誤原因。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM