《我的RobotFramework书》1-5 测试库, Test Library

来源:互联网 发布:云计算的服务器是什么? 编辑:程序博客网 时间:2024/05/17 21:42

测试库, Test Library


作者: 虞科敏

测试库包含底层关键字,库关键字Library Keywords.

导入库

  • 使用Setting Table中的Library Setting导入
    库名字是大小写和空格敏感的
    如果库存在一个包Package中,应提高包含包的全名Full Name
    库可能需要参数进行初始化
    库导入时支持参数缺省值,可变长参数,命名参数等语法,这和关键字的参数语法很像 库名和参数都可以使用变量

样例

可以在Resource File, Test Case File, Suite __init__ File中导入库,库中的关键字在导入库的文件中可用

Settings 
Library OperatingSystem
Library my.package.TestLibrary
Library MyLibrary arg1 arg2
Library ${LIBRARY}

  • 使用关键字Import Library

导入的方法和Library Setting很相似
导入的关键字在Import Library关键字被使用的suite中可用

样例

Test Cases 
Example

Do Something
Import Library MyLibrary arg1 arg2
KW From MyLibrary

指定导入的库

使用库的名字

RF框架会在[module search path][1]中根据库名字找寻实现库的类或者模块

理解Module Search Path对于理解库的查找非常重要,这个实际就是使用Python的解释器进行模块搜索的概念,了解Python的同学不难理解。

  • Python解释器的安装目录,三方库的安装目录,自动就在搜索路径中。 在Python的搜索路径中的模块,不需要经过其他配置,就能被导入
  • 更多的路径信息,可以通过PYTHONPATH, JYTHONPATH, IRONPYTHONPATH环境变量进行设置
  • 命令行选项 --pythonpath (-P) 也可以添加更多的地址到搜索路径中
  • 通过编程控制sys.path属性
  • 如果使用Jython,还可以使用Jython的模块搜索路径或者Java Classpath

样例

--pythonpath libs
--pythonpath /opt/testlibs:mylibs.zip:yourlibs
--pythonpath mylib.jar --pythonpath lib/STAR.jar --escape star:STAR

[1] 路径搜索和搜索路径
模块的导入需要一个叫做"路径搜索"的过程。 即在文件系统"预定义区域"中查找 mymodule.py 文件(如果你导入 mymodule 的话)。 这些预定义区域只不过是你的 Python 搜索路径的集合。路径搜索和搜索路径是两个不同的概念, 前者是指查找某个文件的操作, 后者是去查找一组目录。
默认搜索路径是在编译或是安装时指定的。 它可以在一个或两个地方修改。
一个是启动Python的shell或命令行的PYTHONPATH环境变量。 该变量的内容是一组用冒号分割的目录路径。 如果你想让解释器使用这个变量, 那么请确保在启动解释器或执行Python脚本前设置或修改了该变量。
解释器启动之后, 也可以访问这个搜索路径, 它会被保存在 sys 模块的 sys.path 变量里。不过它已经不是冒号分割的字符串, 而是包含每个独立路径的列表。 这只是个列表, 所以我们可以随时随地对它进行修改。 如果你知道你需要导入的模块是什么,而它的路径不在搜索路径里, 那么只需要调用列表的 append() 方法即可, 就像这样: sys.path.append('/home/wesc/py/lib'). 修改完成后, 你就可以加载自己的模块了。 只要这个列表中的某个目录包含这个文件, 它就会被正确导入。

使用库的物理路径

另一种思路是使用库在系统中的路径来指定库
路径以相对于当前test data file所在目录的相对地址来给出,这和Resource Files, Vairable Files很相似
如果库是文件,那么.ext,文件的扩展名必须被包括在路径中,比如Java的.class或.java,Python的.py等
如果库是目录,那么路径应该以"/"结尾

样例

局限: 实现为Python类的库,Python类所在的module名必须和类名相同

Settings 
Library PythonLibrary.py
Library /absolute/path/JavaLibrary.java
Library relative/path/PythonDirLib/ possible arguments
Library ${RESOURCES}/Example.class

库别名

有很多场景,我们使用客户定制化的库名(库别名)会更加方便,或不得不使用定制化的库名:

  • 使用不同的参数导入同一个库多次
  • 库名太长,比如很多包名很长
  • 使用变量在不同的环境中导入不同的包, 但你想使用相同的名字进行引用
  • 库名很糟糕,很容易误导人

Library Setting或者关键字Import Keyword都支持库别名

样例1
WITH NAME 大小写敏感
指定的名字会在Log中显示
使用关键字全名时,必须使用库别名

Settings 
Library com.company.TestLib WITH NAME TestLib
Library ${LIBRARY} WITH NAME MyName

样例2
使用不同的参数引入同一个库多次

Settings 
Library SomeLibrary localhost 1234 WITH NAME LocalLib
Library SomeLibrary server.domain 8080 WITH NAME RemoteLib

Test Cases 
My Test

LocalLib.Some Keyword some arg second arg
RemoteLib.Some Keyword another arg whatever
LocalLib.Another Keyword

标准库, Standard Library

RF框架提供如下标准库。

BuiltInCollectionsDateTimeDialogsOperatingSystemProcessScreenshotStringTelnetXML

另外, 除了普通标准库,还存在另一种完全不同的远程库, Remote Library.
远程库不提供任何关键字, 它在RF框架和远程的库实现之间以代理的形式工作.
远程的库实现可以运行在和RF框架不同的其他机器上,甚至可以被并非RF支持的编程语言实现。

外部库, External Library

任何非标准库的测试库,称为外部库。
RF开源社区已经一些常用的测试库,没有打包到框架核心之中. 更多公共外部库,可以访问 http://robotframework.org

Selenium2LibrarySwingLibrary
0 0
原创粉丝点击