资源文件里面提供了一些公共使用的变量,实际上也可以使用 python 模块文件提供公共变量给 RF 使用,只需要直接定义变量就可以了,语法完全是 python。
在工程里面直接创建一个 Python File 叫 cfg.py
,cfg 里面把 rc.robot
变量直接拿过去用
MgrLoginUrl = 'http://localhost/mgr/login/login.html'
adminuser = {"name":"auto","pw":"sdfsdfsdf"}
变量名去掉 @&{}
然后变量值用引号引起来。完全是 python 的写法,我们写完了怎么给 Robot 的测试用例来使用呢?在资源文件的 Settings 表里面定义一个变量,这个变量就叫 Variables cfg.py
,现在我们可以把资源文件里面的 *** Variables ***
去掉,使用 cfg.py
。
![](https://img.haomeiwen.com/i15646290/cc58f9b39763f935.png)
执行可以看到没有任何问题。
![](https://img.haomeiwen.com/i15646290/781659c337f21264.png)
刚刚我们是把 cfg.py、t1.robot、rc.robot
都放在一个路径下面。我们在变量声明的时候可以使用相对路径也可以使用绝对路径。当我们使用相对路径的话 robot 搜索变量的文件 cfg.py
的规则跟搜索资源文件是一样的。首先它也是在当前的文件目录下去找,比如我们当前是在t1.robot
这个路径,那就是在tmp rf
路径下去找,它去找cfg.py
一下就找到了。如果找不掉 他就会去 python 的模块搜索路径中去找,比如说我换了个路径,把 cfg.py
移到一个新建的 Python package
包名为 cfg
里面。
![](https://img.haomeiwen.com/i15646290/55ff15286e976712.png)
基于当前 t1.robot
所在的路径去找cfg.py
就找不到了,它基于当前的路径就是 tmp rf
下面,那我想找到cfg.py
是不是要先进入到当前路径的cfg
路径下面去找。这个时候应该这么写 Variables cfg/cfg.py ,注意 资源文件路径,目录之间的分割符,不用 点.
而是用 斜杠/
。
如果有的 RF 不在项目根目录下面,比如新建目录tc
,把我的 t1.robot、rc.robot
都挪到 tc
下面。
![](https://img.haomeiwen.com/i15646290/8eee6694908388e0.png)
那我执行 t1.robot
的时候是不是在 tmp rf
的 tc
下面去执行。那我们在想找到 cfg.py
该怎么找?当前目录是 tmp rf
下面的 tc
,那我想找到上面 cfg
下面的cfg.py
应该这样写。
当前目录往上一级的下一级,当前目录点点 ·· 往上一级的 cfg
下面的 cfg.py
Variables ../cfg/cfg.py
我们可以这样修改。
假如我又要改了,tc
下面新建了tc1
然后把 t1.robot、rc.robot
都拉进去,再想去找的话是不是还得在往上一层就这样了。
Variables ../../cfg/cfg.py
所以一旦目录改了之后,我这个变量表的路径就每次都要改,这样就比较麻烦了。所以碰到这种问题,有没有一个比较好的办法不用每次改。这里有个推荐的做法就是:统一都相对于项目的根目录来写,比如说我们这个项目的根目录是 tmp
下面的 rf
![](https://img.haomeiwen.com/i15646290/a06b288ab68a3bb8.png)
所有的路径都是从 tmp rf
开始找,不管它有多少层里面不管怎么挪,我基于tmp rf
这个 cfg.py
在哪,就在 cfg
下面的 cfg.py
,就这样写
Variables cfg/cfg.py
所以不管 t1.robot
有多少层,不管它有多深,我基于当前目录都是从 cfg
开始,写到 cfg
下面的 cfg.py
。这样做是可以的,但是我们在执行的时候只能根据 python 的模块搜索路径了,如果相对当前文件因为你找不到了。
- 这样我们需要将当前目录加入到模块搜索路径中。
robot --pythonpath . tc\t1.robot
- 也可以在命令行参数中指定(了解即可)
我们也可以在命令行参数中直接指定变量文件。就可以不用在RF文件中声明了(很少使用)
robot --variablefile cfg\cfg.py tc\t1.robot
网友评论