Robot Framework 自定义关键字

Robot framework 自定义了一些关键字我们可以把他们当作函数在设计测试用例的时候使用。

同时RF也提供了许多第三方的库,我们可以自己下载使用。

当时我们在实际工作中,会编写一些自己的函数来设计测试用例。

自定义关键的方法有两种:

方法一:

如果你编写的python模块没有使用面向对象的方法,那么直接在界面中选择对应的python文件即可:

我在D盘下,新建了一个hello.py文件,里面代码如下:

  1. # -*- coding : utf-8 -*-
  2.  
  3. def hello_world():
  4. print("hello, world!")

我们打开robot framework, 选择library,在弹出的窗口中,直接选刚才的文件即可:

如果库文件导入正确, 库的名字是黑色的,如果是红色的就表示,有错误。

导入成功后,我们可以按下F5键,在弹出的库关键字查询中我啊们就可以看到我们刚才导入的库:

选择好source hello,我们会看到刚才文件中的函数变成了自定义关键字:

我们尝试在测试用例中,使用这个自定义关键字,发现可以正常使用:

方法二

如果我们的python代码中使用了面向对象方法,那么我们就不能使用方法一了,因为RF不能调用对象,我们则需要其他方法来实现。

首先我们要进入到Python的运行目录,找到site-packages目录下,这个目录下存放的我们下载的一些python包。

1. 我们新建一个文件夹名叫: ‘ParameterAndSettings’, 这个将来会作为library进行使用。

2. 我们在该目录下新建一个python文件, Settings.py

代码如下:

  1. import json
  2. import os
  3. from collections import namedtuple
  4. import random
  5. from datetime import datetime, timedelta
  6.  
  7. class Settings(object):
  8. def __init__(self):
  9. file_path = 'C:\Program Files (x86)\Python37\Lib\site-packages\ParameterAndSettings\configuration.json'
  10. try:
  11. if os.path.isfile(file_path):
  12. with open(file_path, 'r') as fileobject:
  13. data = fileobject.read()
  14. try:
  15. json_obj = json.loads(data, object_hook=lambda d: namedtuple('json_obj', d.keys())(*d.values()))
  16. except Exception as e:
  17. raise Exception("Settings: Load the configuration to Json failed.\n " )
  18. raise Exception("Settings: File is: %s" % (file_path))
  19.  
  20. self.server = json_obj.server
  21. self.modality = eval(json_obj.modality)
  22. self.bodypart = eval(json_obj.bodypart)
  23. self.grender = eval(json_obj.grender)
  24. self.notifyserver_exam_body_content = json_obj.notifyserver_exam_body_content
  25. self.watermark_path = json_obj.watermark_path
  26. self.db_connectString = json_obj.db_connectString
  27. self.db_driver = json_obj.db_driver
  28. self.db_server = json_obj.db_server
  29. self.db_default_database = json_obj.db_default_database
  30. self.db_uid = json_obj.db_uid
  31. self.db_pwd = json_obj.db_pwd
  32. self.report_template_file = json_obj.report_template_file
  33. self.report_file = json_obj.report_file
  34. self.report_default_printer = json_obj.report_default_printer
  35. self.EHDPS_status_url = json_obj.EHDPS_status_url
  36. self.EHDPS_printtask_create_url = json_obj.EHDPS_printtask_create_url
  37. self.EHDPS_printtask_print_url = json_obj.EHDPS_printtask_print_url
  38. self.EHDPS_printtask_report_getinfo_url = json_obj.EHDPS_printtask_report_getinfo_url
  39. self.EHDPS_printtask_report_print_url = json_obj.EHDPS_printtask_report_print_url
  40. self.EHDPS_printtask_status_url = json_obj.EHDPS_printtask_status_url
  41. self.EHDPS_printtask_status_dict = eval(json_obj.EHDPS_printtask_status_dict)
  42. self.EHDUS_upload_report_upload_url = json_obj.EHDUS_upload_report_upload_url
  43. self.Printmode_dict_mode_value = eval(json_obj.Printmode_dict_mode_value)
  44. self.Printmode_dict_value_mode = eval(json_obj.Printmode_dict_value_mode)
  45. self.Integration_URL = json_obj.Integration_URL
  46. self.Notify_URL = json_obj.Notify_URL
  47. self.Holdflag_dict_mode_value = eval(json_obj.Holdflag_dict_mode_value)
  48. self.Holdflag_dict_value_mode = eval(json_obj.Holdflag_dict_value_mode)
  49. else:
  50. raise Exception("File Error", "The file %s is not exist." % (file_path))
  51. except Exception:
  52. raise Exception("Settings: init failed." )
  53.  
  54. '''
  55. Random return a modality
  56. '''
  57. def random_modality(self):
  58. modality = self.modality[random.randint(0, len(self.modality) - 1)]
  59. return modality
  60.  
  61. '''
  62. Random return a bodypart
  63. '''
  64. def random_bodypart(self):
  65. modality_type = self.bodypart[random.randint(0, len(self.bodypart) - 1)]
  66. return modality_type
  67.  
  68. '''
  69. Random return a gender
  70. '''
  71. def random_gender(self):
  72. grender = self.grender[random.randint(0, len(self.grender) - 1)]
  73. return grender
  74.  
  75. '''
  76. Random return a brithday
  77. '''
  78. def random_brithday(self):
  79. random_number = random.randint(0, 100)
  80. random_days = random_number * 365
  81. brithday = (datetime.now() - timedelta(days=random_days)).strftime('%Y-%m-%d')
  82. return brithday
  83. '''
  84. return the content with string type.
  85. '''
  86. def get_notifyserver_exam_body_content(self):
  87. ret = self.notifyserver_exam_body_content
  88. return ret
  89.  
  90. '''
  91. settings = Settings()
  92. print(settings.server)
  93. '''

3. 确保代码无误,可以正常使用

4. 在同级目录下新建一个__init__.py文件,该文件的目的是将该目录变成一个python的模块包。

5. 我们在文件中输入一下代码:

  1. # -*- coding: utf-8 -*-
  2. from ParameterAndSettings.Settings import Settings
  3. __verison__ = "0.1.1"
  4.  
  5. class ParameterAndSettings(Settings):
  6. 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 关键字的更多相关文章

  1. Python 学习笔记19 安装robot Framework

    因为项目组要做自动化测试,本人其实很希望能够使用 MStest + unit + C#来实现. 毕竟产品是基于.net 环境,并且使用C#环境开发的,适用性比较好,一些开发代码可以复用. 但是领导基于 ...

  2. robot framework python3环境下学习笔记(1)——安装robot framework

    安装环境:win10 64位,python3.6 1,安装robot framework pip install robotframework 2,安装wxPython pip install wxP ...

  3. Python学习笔记20:server先进

    我们不依赖于一个框架,CGI如果是,只能使用socket介面.他完成了一个可以处理HTTP要求Pythonserver. 基于,不管是什么的计算机的操作系统(推荐Linux)和Python该计算机可被 ...

  4. python学习笔记之自定义函数的导入

    python可以将自己编写的类放在py文件中,然后由其他程序调用,今天分享下:如何在shell中从文件引用自定义类和函数,下面是具体的过程: 第一步将你编写的文件声明编码类型 然后将你编写的文件保存为 ...

  5. python学习笔记(自定义库文件路径)

    博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...

  6. python学习笔记20(字符串格式化)

    Python中内置有对字符串进行格式化的操作% 模板 格式化字符串时,Python使用一个字符串作为模板.模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式.Python用一个t ...

  7. Python学习笔记(20)-文件和文件夹的移动、复制、删除、重命名

    一,概述 python中对文件和文件夹进行移动.复制.删除.重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动.复制.删除.重命名, ...

  8. 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 ...

  9. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

随机推荐

  1. SQL Server 基础知识/数据类型/数值类型

    数据库设计简单地来讲,也就是设计表格的过程. 表格存储的数据是可以理解为一个二维表,由行和列组成. 原则上来讲,一个数据库只需要一个字段,一个数据类型就可以解决所有的问题,但是这样做并不明智,所以一般 ...

  2. 异常处理 VEH

    不算新的东西,也都不小了, VEH的结构处理,平行于SEH,但是略有区别, 相关函数有四个 PVOID WINAPI AddVectoredExceptionHandler( _In_ ULONG F ...

  3. 09-js定时器、函数

    # js定时器 通过使用 JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件. **定时器在javascript中的作用** 1. ...

  4. Python 爬虫 校花网

    爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 福利来了  校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易,不会受到打击,第二呢 你懂得.... 1.第一步,需要下 ...

  5. 按字节读取txt文件缓存区大小设置多少比较好?

    读取 txt 文件常规写法有逐行读取和按照字节缓存读取,那么按照字节缓存读取时,设置缓存区多大比较好呢?百度了一下,没发现有说这个问题的,自测了一把,以事实说话. 常规读取方法如下: // 字节流读取 ...

  6. ASPOSE的示例下载地址

    ftp://112.124.7.170/ASPOSE/Aspose.Words_16.3.0.zip http://blog.163.com/haolongqin@126/blog/static/10 ...

  7. qt 视频播放

    可以播出视频,待完善 player = new QMediaPlayer(this); playlist = new QMediaPlaylist(); playlist->addMedia(Q ...

  8. tuple写法

    name = ("wen") 类型为strname = ("wen",) 类型为tuple

  9. SNOI2017 礼物

    题解 设前\(n\)个人的礼物个数和为\(F_n\), 那么显然\[F_n = 2 \times F_{n-1} + i^k\] 考虑矩阵快速幂 棘手的问题是:\(i^k\)不是可以直接用矩阵乘法可以 ...

  10. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...