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中查看错误原因。
Python 学习笔记20 自定义robot Framework 关键字的更多相关文章
- Python 学习笔记19 安装robot Framework
因为项目组要做自动化测试,本人其实很希望能够使用 MStest + unit + C#来实现. 毕竟产品是基于.net 环境,并且使用C#环境开发的,适用性比较好,一些开发代码可以复用. 但是领导基于 ...
- robot framework python3环境下学习笔记(1)——安装robot framework
安装环境:win10 64位,python3.6 1,安装robot framework pip install robotframework 2,安装wxPython pip install wxP ...
- Python学习笔记20:server先进
我们不依赖于一个框架,CGI如果是,只能使用socket介面.他完成了一个可以处理HTTP要求Pythonserver. 基于,不管是什么的计算机的操作系统(推荐Linux)和Python该计算机可被 ...
- python学习笔记之自定义函数的导入
python可以将自己编写的类放在py文件中,然后由其他程序调用,今天分享下:如何在shell中从文件引用自定义类和函数,下面是具体的过程: 第一步将你编写的文件声明编码类型 然后将你编写的文件保存为 ...
- python学习笔记(自定义库文件路径)
博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...
- python学习笔记20(字符串格式化)
Python中内置有对字符串进行格式化的操作% 模板 格式化字符串时,Python使用一个字符串作为模板.模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式.Python用一个t ...
- Python学习笔记(20)-文件和文件夹的移动、复制、删除、重命名
一,概述 python中对文件和文件夹进行移动.复制.删除.重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动.复制.删除.重命名, ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
随机推荐
- MySQL5.7 慢查询+DDL操作堵塞查询
数据库版本: mysql> select @@version; +------------+ | @@version | +------------+ | 5.7.26-log | +----- ...
- 行人重识别(ReID) ——数据集描述 DukeMTMC-reID
数据集简介 DukeMTMC 数据集是一个大规模标记的多目标多摄像机行人跟踪数据集.它提供了一个由 8 个同步摄像机记录的新型大型高清视频数据集,具有 7,000 多个单摄像机轨迹和超过 2,700 ...
- ReactiveCocoa 之 优雅的 RACCommand
RACCommand 是一个在 ReactiveCocoa 中比较复杂的类,大多数使用 ReactiveCocoa 的人,尤其是初学者并不会经常使用它. 在很多情况下,虽然使用 RACSignal 和 ...
- 修改编码为utf8mb4 以支持emoji表情
环境: 项目db的所有字符集都已经初始化为utf-8,如 status命令显示如下: Server characterset: utf8Db characterset: utf8Client char ...
- js中关键字 const , let , var 的用法区别
1.const定义的变量不可以修改,而且必须初始化. 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3.let是块级作用域,函数内部使用let定义后,对函数外部无影响 ...
- [BZOJ] IOI2015 Boxes纪念品盒
问题描述 IOI2015 开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除 Aman外其他人完全忘记了发放 ...
- 策略模式优化过多的IF ELSE
前言: 当if else的条件少的话,代码可阅读性及逻辑不影响阅读和扩展.一旦if else过多的话会导致逻辑比较混乱,不易扩展并且很容易出错. 实现方案: 1.定义一个@HandlerType注解, ...
- 数据库智能管理助手-CloudDBA
摘要:阿里云CloudDBA主要分为离线分析和在线分析两种功能.帮助用户节省成本,定位问题,分析原因并推荐解决方法.CloudDBA可以做到实时诊断,离线诊断和SQL优化.并且通过MySQL的参数调优 ...
- // 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward;
// 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward; ...
- C#用户自定义控件(含源代码)-透明文本框
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using Sys ...