最近在网上看到一有关于 robot framework 的文章,才知道好些年以前就已经流行了。哎,怪自己孤陋寡闻,于是乎就下载安装了个试用了一段时间发现这框架上手还挺快的。不过要说 robot framework 是一框架还挺勉为其难的,也可说是一工具吧,趋于半自动化。对于刚接触测试行业没多久,也没好的代码能力的测试来说,这无疑是个不错的选择。

Robot Framework 遇到的坑

1、安装 robot framework 结束后,启动 RIDE 失败

可前提是我已经安装了同版本的 wxPython 2.8.12.1。
解决办法:将 python 重新安装下即可,记住不要卸载,直接覆盖安装。
2、导入自定义库失败
可通过 Tools-View RIDE Log 查看日志

解决办法:在首行添加 #-- coding:gb2312 --


解决办法:是缩进符导致的,建议不要 tab 和空格键混淆使用

Robot Framework 认知

  1. Robot framework 是一款开源的,基于 python 编写的功能自动化测试框架,具备良好的可扩展性,支持关键字驱动,让人以自然语言的格式来描述测试用例,然后其中的关键字就会转化为行为,即函数的调用。
  2. Robot framework 是通过测试库识别被测对象,有很多自带的或第三方开源测试库,如测试 web 客户端的 selenium2Library;另外测试人员也可以根据业务需求创建自己需要的测试库。
  3. Robot framework 支持分层设计,可以把步骤封装到关键字中,然后在用例中调用关键字和传入参数,一般分为元素层放我们的测试步骤,业务逻辑层放测试步骤的组合,测试套件层放测试用例。
  4. 测试用例使用文本文件保存,使用制表符分隔数据,可以方便的使用任何文本编辑器或 excel 编辑测试用例,也可以使用 html 格式创建用例。
  5. Robot framework 提供了远程测试执行接口,可以进行分布式测试;另外可以与版本管理工具结合,进行持续集成

Robot Framework 分层思想


上图中我们分了三层:

  1. 测试元素层放的是我们的测试步骤

  2. 测试流程层放的是测试步骤的组合

  3. 测试套件层放的是我们的测试用例

Robot Framework 项目目录结构设置

目的:合理分配资源;清晰的项目目录结构易于查找和分类。
robtfreamework 的测试用例是以 project 作为单位进行管理的,一个 project 可以包含多个 Test Suite 文件,每一个 Test Suite 可以包含多条测试用例

【建议】(转载)

  1. 测试案例里面最好只引用测试模板,放置测试数据。
  2. 业务逻辑独立出来一层,可以通过业务关键字来任意组合。
  3. 公用的模块可以放一个文件夹,不同的业务关键字也可以放置不同的文件夹
  4. 测试套件和业务关键字都可以按业务划分,然后底层关键字放置一个文件夹。这样结构清晰,管理方便。

Robot Framework 读取 excel 文件

  1. 先下载第三方库 ExcelLibrary,下载方式 pip install robotframework-ExcelLibrary;在 ride 中按 F5,在关键字的 source 中可以找到 ExcelLibrary,则表示添加成功

  2. 新建 excel 文件如下图

  3. 选择测试项目右键,添加 new resource,格式为 txt;再选中添加的配置文件,添加 ExcelLibrary

  4. 再选择刚添加的配置文件,右键,添加 new user keyword,读取 excel 文件设置如下

  5. 编写测试用例

  6. 最后用例执行

Robot Rramework 分布式并发执行

多线程并发运行 WebDriver 的步骤:1.运行 hub 2.运行 node 3.运行 test case 。下面说下具体实现方法。

  1. 主节点机器上运行 hub,在命令行中输入: java -jar selenium-server-standalone-2.46.0.jar -role hub -maxSession 40 -port 4444
    🔱 参数中必须指明-role hub才是运行 hub。默认端口是 4444,如果端口被占用就需要指定其他。-maxSession是最大处理的会话请求,这里设置为 40。如果不指定的话,默认是 1(即单线程模式了)。
  2. 子节点机器上运行 node。(先说下运行一个 node 情况)在命令行中输入(下面的命令是一行敲完):
    🔱 java -Dwebdriver.chrome.driver=C:\Users\zxl\AppData\Local\Google\Chrome\Application\chrome.exe -jar selenium-server-standalone-2.46.0.jar -role node -hub http://192.168.1.73:4444/grid/register -maxSession 20 -browser "browserName=chrome,version=52.0.2743.116,platform=WINDOWS,maxInstances=20" -port 5555

    🔱 由于 node 是可以运行在不同系统上的,所以指定驱动位置- Dwebdriver.chrome.driver=C:\Users\zxl\AppData\Local\Google\Chrome\Application\chrome.exe。参数中必须指明-role node才是运行 node。参数-hub后面是第一步中 hub 的 IP 和端口:http://hub 的 IP:端口/grid/register 。node 默认的maxSession的值就是 5(最多并发 5 个浏览器),如果用 IE 浏览器的话,就算你的测试 case 是多线程,最终也会是一个一个的执行。但是如果在后面的-browser的参数中指明maxInstances=5,那么就会同时运行 5 个浏览器。运行 node 后,窗口中也会显示该 node 的信息。-port是端口号,默认端口是 5555,如果端口被占用就需要指定其他。如果你启动第二个 node 的话,端口就必须指定了,不能是 5555。

  3. 启动完成连接到主节点后,可以在主节点机子上 ,http://192.168.1.73:4444/grid/console网址查看到这个子节点状态。使用同样的方法,可以链接其它的子节点。

  4. 运行 test case,上面已经把 Grid 弄成功了,现在我们用 Grid 来运行一个很简单的例子。代码如下:

    import java.net.MalformedURLException;
    import java.net.URL;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.remote.RemoteWebDriver;
    public class GridTest {
    /**
    * @throws MalformedURLException
    */
    public static void main(String[] args) throws MalformedURLException {
    DesiredCapabilities test = DesiredCapabilities.chrome();
    WebDriver dr = new RemoteWebDriver(new URL("http://192.168.1.73:5555/wd/hub"),test);
    dr.get("http://www.baidu.com");
    }
    }
    

    在主节点机子上运行上面的代码,你可以在次节点机子上看到 chrome 浏览器被启动,然后打开了www.baidu.com这个网址。


↙↙↙阅读原文可查看相关链接,并与作者交流