
正文
rf调用python函数 python调用refprop
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
RF引入自定义库
小白一枚rf调用python函数,在此记录,方便自己回顾。
1、在python安装目录下的 Lib\site-packages 目录下新建一个目录,目录名就是库名,如我创建的TestLoginLibrary文件夹
2、在新建的TestLoginLibrary目录下创建一个python文件,扩展名为py。如rf调用python函数:CtLogin.py
3、在新建的TestLoginLibrary目录下创建 __init__.py 文件,文件名必须固定这样。该文件的功能,就是把关键字类暴露出来,让rf能知道。注意py文件名与里面的类名应一致,貌似大小写不区分。
其内容如下rf调用python函数:
from CtLogin import CtLogin #第一个CtLogin指刚创建的py文件,第二个CtLogin是py文件中的类名
class TestLoginLibrary(CtLogin): #这里的类名与库文件夹名称一致,括号中变量是py文件中的类名
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
4、在rf中引入新建的TestLoginLibrary,不需选择路径,直接输入“TestLoginLibrary”。
5、经过以上,自定义库的骨架就有rf调用python函数了,下面自己在CtLogin.py中写具体要实现的功能,比如我要实现的是运行登录接口后获取cookies,方便其他接口使用。
import requests
import json
class CtLogin:
def __int__(self):
pass
def testLogin(self, userName, userPwd):
url = ""
headers = {
"Content-Type": "application/json;charset=UTF-8"
}
data = {
"userName": userName,
"authCode": "",
"userPwd": userPwd
}
res = requests.post(url=url, json=data, headers=headers)
return (res.cookies)
6、现在去rf中使用我定义的关键字“testLogin”~
每个测试人员用不同的测试用户名、密码,得到返回值,再把它设置为全局变量。
7、我把登录相关的东西都放在了Resource中,TestCase中引用关键字即可。
是不是很easy~
2019-03-05补充rf调用python函数:
在一个library中新建多个关键字方法时,只需要在CtLogin.py文件中添加def方法即可。
相关问答
Q1: RF变量的共享使用、python测试库
Variable表中声明变量
资源文件里面创建变量
和套件文件中的用户关键字一样,套件文件中的变量表里面的变量,其作用范围只是该套件文件。我们可以定义在资源文件中。资源文件变量的定义,和上述测试套件文件中几乎一样,我们只需拷贝Variables表到资源文件中即可,注意资源文件中不可存在*** Test Cases ***测试用例。
rc.robot 资源文件
test.robot 测试套件
变量文件
也可以使用python模块文件提供公共变量给RF使用。只需要直接定义变量就可以了
语法完全就是python 例如:
变量文件声明的时候,可以使用绝对路径,也可以使用相对路径。使用相对路径的时候,RF搜索变量文件规则和搜索资源文件搜索规则一样:
首先在当前文件的目录匹配收缩,如果找不到,就在Python的模块搜索路径中搜索
上面的*** Settings ***变量文件路径是这样写的 Variables ./rf/rc.py
是因为rc.py所处的路径是这样的,如下图
但是这样不好的地方是:
每个RF文件的路径不一样,导致每个RF文件导入变量文件的写法都不同,而且一旦移动了目录,就要修改里面的写法,比如
Variables ./rf/rf/rc.py
一种推荐的做法就是统一相对于项目根目录,假设项目根目录是rf,就需要像下面这样
也可以在命令行参数中直接指定变量文件,就可以不用在RF中声明了
扩展关键字
使用python测试库,模块文件名就是测试库的名字
定义在python模块中的函数,名称前有_前缀的不会作为关键字。
Python模块定义好以后,RF就可以使用它了,我们可以这样使用上面定义的测试库,要注意的是,要保证其在Python模块的搜索路径中,这样RF才能找到它
RF在使用关键字的时候,中间可以加上任意的空格,并且大小写也可以任意
自己定义关键字名字 _hehe不会作为关键字被rf使用
python类作为测试库
tlib2.py
库的搜索规则
RF搜索库完全是按照python的模块的搜索规则来的
如果python库是在一个包中,比如
pylib/login/rightpass.py
声明的时候,可以在RF文件像python导入包里面的模块那样的语法,如下
*** Settings ***
Library pylib/login/rightpasswd.py
如果导入的库中存在模块的引入,引入的模块要以加入pythonpath的路径来写否则会报错
如果存在继承的情况,只要导入子类就可使用父类的方法,要注意模块导入时的路径。
父类
子类
robot用例
总结如下:
1.在settings中声明资源文件和变量文件:
路径,目录之间的分隔符用斜杠 / 而不是点 .
2.在settings中声明测试库:
路径,目录之间的分隔符,可以用点 . 也可以用斜杠 /
路径,目录之间的分隔符用点后面不加py,用斜杠后面加.py
Q2: RF自定义库
1、自定义的库
2、使用自定义库
类或者模块的形式。
模块名称 = 库名。
模块名称和类名保持一致 = 库名
如果是类:ROBOT_LIBRARY_SCOPE = "GLOBAL"
使用:
Library 库名-相对路径
按照其他库的关键字调用方式一样。
创建测试库类/模块
静态(Static)API
最简单的办法是实现一个模块(用Python),或者类(用Python或Java),其中的方法(methods)直接映射为关键字名称。关键字接受和方法相同的参数。
创建测试库类或模块
测试库的实现可以是Python模块,也可以是Python或Java类。
如果是Python模块,使用 all� =['函数名称']来指定哪些函数是你想要被RF识别为关键字的。
参看RF自带库DateTime
python类的可参看String库、seleniumLibrary库等。
通过属性ROBOT_LIBRARY_SCOPE来控制
这个属性是一个字符串,可以有以下三种取值:
TEST CASE
为每个测试用例创建新的实例。如果有suite setup和suite teardown的话,同样也会新建。这是默认行
TEST SUITE
为每个测试集创建新的实例,最底层的测试集,也就是有测试用例文件组成的测试集,拥有属于自己的测试库实例,高层的测试集,都有属于自己的测试库实例。
GLOBAL(最常用)
整个测试执行过程中只有一个实例被创建。所有的测试集合测试用例共享这个实例。通过模块创建的测试库都是全局的。
注解
如果一个测试库被导入多次,每次使用不同的参数,则不管有没有定义作用域,每次都会新建一个实例。
Q3: python如何定义和调用函数
1、函数定义
①使用def关键字定义函数
②
def 函数名(参数1.参数2.参数3...):
"""文档字符串,docstring,用来说明函数的作用"""
#函数体
return 表达式
注释的作用:说明函数是做什么的,函数有什么功能。
③遇到冒号要缩进,冒号后面所有的缩进的代码块构成了函数体,描述了函数是做什么的,即函数的功能是什么。Python函数的本质与数学中的函数的本质是一致的。
2、函数调用
①函数必须先定义,才能调用,否则会报错。
②无参数时函数的调用:函数名(),有参数时函数的调用:函数名(参数1.参数2.……)
③不要在定义函数的时候在函数体里面调用本身,否则会出不来,陷入循环调用。
④函数需要调用函数体才会被执行,单纯的只是定义函数是不会被执行的。
⑤Debug工具中Step into进入到调用的函数里,Step Into My Code进入到调用的模块里函数。
Q4: 写了一段python的测试脚本,想导入到RF里面运行,请问怎么操作
如果是命令行的,一般是捕获ctrl-c事件吧。importsignalimportsysdefsignal_handler(signal,frame):print('YoupressedCtrl+C!')sys.exit(0)signal.signal(signal.SIGINT,signal_handler)print('PressCtrl+C')signal.pause()
Q5: RIDE如何调用自定义Python文件中的函数
1. 如何从零开始编写Python函数?
参考另一篇文章:
2. IDEA如何调用编写的Python文件?
a. 将编写的Python文件放入到RIDE 某个Project的一个用于存放Custom Library的文件夹下
b. 在Directory或者Test Suite或者Test Case Level的Edit Page中Import对应的python文件作为library
其中黑色的Library表示引用成功。
红色的表示引用失败(一般都是文件路径错误,或者文件编译出错)。
蓝色的表示引用的是关键字或者定义的变量资源。
3. Python 文件中的函数如何被添加到Test Step中调用?
如下图所示,我的PreparePremia.py被添加到Attribution Test Suite级别了,所以这个Test Suite下面所有的Test Case都可以解析该python中的函数,我们看看“save_monthly_premia_data”是如何被用到Test Step中的:
Test Step的最后一行关键字"Save Monthly Premia Data"就是调用了该文件中的关键字:
可以按F5查看:
4. Python文件中的函数如何被Test Suite调用?
我们打开Test Case可以看到添加Test Step的table,明显就能看出如何调用python中的函数。
但是打开Test Suite面板,我们看到了什么?
只有Settings, variables 和Metadata区域。。。
截图上我在Suite Setup的时候调用了一个自定义关键字“Get Input Params”,并且传递了两个参数"${SUITE NAME}"和"RiskAttributionCalculation",那这个关键字是怎么来的呢?
可以看到这个自定义关键字其实也是调用了“ExcelUtil.py”文件中的“parse_input_params”函数的:
并且还设置了一个Suite级别的全局变量“${input_params}”。
所以:
Suite Setup的意思就是:
调用自定义关键字"Get Input Params"得到一个全局变量"${input_params}".
因此:
Test Suite级别都是引用自定义的关键字来初始化某些值。而这个自定义的关键字会调用Python文件中的函数。
5. 得到的Suite级别的变量如何被调用呢?
因为MonthlyPremia是Attribution Suite下面的Test Case, 所以这个Case是可以直接调用"${input_params}"的哦~~。
我返回的input_params是dict,所以需要传入key来得到对应的Value。
写的很直白哦,如果有什么问题大家可以留言哦,谢谢阅读,么么哒~~~
关于rf调用python函数和python调用refprop的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






