Robot Framework-4

董哲
2023-12-01
Test File包含了四部分:Setting(required), Variable(optional), Test Case(required), Keyword(optional)
  • Setting、Test Case是必须的
  • Variable只有当需要变量的时候才有用
  • Keyword只有当standard libraries及external libraries没有,需要将多个keywords组合成另一个功能强大的keyword时才有用。

1. Setting
  • Setting相当做初始化的工作
  • Robot Framework本身并不与被测试网站直接交互,而是以test libraries作为驱动,这些libraries可以是第三方的测试工具类库也可以是标准的类库,我们采用的Selenium Library。
  • 要想将一个test case执行起来,必须将Selenium Library导入到test file中;Robot Framework提供了Library setting来完成这项工作。
  • 要导入的library的名称是大小写敏感的。
  • Selenium Library提供了5个默认参数:
    • timeout=5.0, server_host=localhost, server_port=4444, jar_path=None, run_on_failure=Capture Screenshot
  • Example
  1. *** Settings ***
  2. Library       Selenium Library

如果调用Selenium Library时不提供任何参数,则意味着默认参数刚会被使用。


  1. *** Settings ***
  2. Library       Selenium Library  15  http://192.168.1.15  4455  ${EMPTY}  ${SPACE*2}

如果调用Selenium Library时提供参数,则以提供的值使用。

Selenium Library有5个参数,有的参数需要赋新值,有的需要使用默认值,如何处理?
    • 新值直接添加即可。
    • 默认值,可以输入${EMPTY}或是'\ '代表调用时使用默认值。
2. Test Case - 以登录 百度账号为例

*** Settings ***
Library       Selenium Library

*** Testcases ***
Login Should Succeed When the Correct Username and Password are Entered
  Start Selenium Server
  Open Browser  http://www.baidu.com/  chrome
  Maximize Browser Window
  Click Link  link=登录
  Input Text  username  user1
  Input Text  normModPsp  password1
  Click Button  xpath=//input[@value=' 登录 ']
  Page Should Contain  user1
  Close Browser
  Stop Selenium Server

  • 第1行,代表从现在开始是Test Case的内容了
  • 第2行,是Test Case的Name
  • 第3行,启动Selenium Server, 因为是代助selenium RC来驱动脚本的。
  • 第4行,打开一个网址,Open Brower关键字提供了3个参数url, browser=firefox, alias=None;url是Required Arguement,其它的参数如果不提供则按默认值;本例子中的brower参数重新赋值了chrome,则相当于用chrome打开定义的url
  • 第5行,最大化打开的浏览器窗口
  • 第6行,单击登录链接
  • 第7、8行,输入用户名及密码
  • 第9行,单击登录按钮
  • 第10行,校验是否登录成功
  • 第11行,关闭浏览器
  • 第12行,停止Selenium Server

3. Suite Settings
  • Robot Framework执行脚本时的机制是,当某一步失败,接下来的步骤将不会被执行,这样以来,如果上述的脚本任何一步失败,则tear down的task则永远不会被执行,那这个case也就永远不会被关闭,接下来的case也就不会被执行。
  • 为了解决这个问题,我们可以将setup及teardown抽象出来,放在settings下面,这样一个case的某步失败后,Robot Framework会自动执行tearn down task,且下一个Case会在上一个case tear down后仍然可以执行(setup)。
  • 相同的原因,我们也希望打开浏览及关闭浏览器的运作也需要在开始执行case前及case失败后完成,这个愿望是可以通过settting中的Test Setup/Test Teardown setting来实现。
*** Settings ***
Library       Selenium Library
Suite Setup     Start Selenium Server
Suite Teardown  Stop Selenium Server
Test Setup      Open Browser  http://www.baidu.com/  chrome
Test Teardown   Close All Browsers


*** Testcases ***
Login Should Succeed When the Correct Username and Password are Entered
  Maximize Browser Window
  Click Link  link=登录
  Input Text  username  user1
  Input Text  normModPsp  password1
  Click Button  xpath=//input[@value=' 登录 ']
  Page Should Contain  user1

  • Suite Setup: Fires once before any tests during the suite are run.
  • Suite Teardown: Fires when all tests in the suite have completed, even when one of them has failed.
  • Test Setup: Fires before each test is executed.
  • Test Teardown: Fires at the end of each test execution, even when the test fails.
4. Variable - username字段被重复用到2次,一次是登录时的输入,另一次是登录成功的验证,为了防止username发生变化引起的维护成本,我们将原来的常量换成变量。

*** Settings ***
Library       Selenium Library
Suite Setup     Start Selenium Server
Suite Teardown  Stop Selenium Server
Test Setup      Open Browser  http://www.baidu.com/  chrome
Test Teardown   Close All Browsers

***Variables***
@{username}=  user1  user2  user3  ...
@{password}=  password1  password2  password3  ...

*** Testcases ***
Login Should Succeed When the Correct Username and Password are Entered
  Maximize Browser Window
  Click Link  link=登录
  Input Text  username  @{username}[0]
  Input Text  normModPsp  @{password}[0]
  Click Button  xpath=//input[@value=' 登录 ']
  Page Should Contain  @{username}[0]

  • 变量的设置应该放置在 ***Variable***
  • 变量命名最好由a-z,A-Z,0-9,_,space组成
  • Variable的作用域:
    • Variable定义在Testcases内容中,则只对该testcase起作用;
    • 如果一个test file中包含了2个test cases,而这2个test cases都需要用到同一个变量,那就需要把这个变量提升至Variables中,这个变量的作用域覆盖到了test file中所有的test cases;
    • 无论是在test case中或test file中的变量,其作用范围只是这个test case或test file;如果这个变量需要被不同的test files或是test suite中共用的,则需要将所有变量存在一个文件中,然后将这个变量文件作为resource导入。
    • 在Settings中,使用Resource setting完成导入的运作。
***Settings***
Resource  /path/to/file.txt

  • Variable有类型有以下几种:
    • Scalar Variable: 只有一个值的变量, 表达式${username}=  user1
    • List Variable: 一个变量中包含多个值,表达式:@{username}=  user1  user2  user3  ...
      • 取得某一个特定值时,用@{NAME}[i]来表达, i索引,从0开始
    • Environment Variable: 操作系统级的变量,属全局变量表达式%{ENV_VAR_NAME}
5. User Keyword - 相当于构建一个类或创建一个方法,其目的是使用在Test Case部分中的重复性代码越少越好,这样可以减少脚本维护的成本及提高利用率。
  • 在第3点中,已经把start/stop selenium server,open/close browser抽离出来了, 看看test case table中还有一个Maximize Browser Window,这个Keyword也可以抽离出来放在每个test caser之前完成,那么如何把它也放在Test Setup中呢?
  • 因为setup/teardown setting只能带一个keyword,我们可以借助keywords table来实现

*** Keywords ***
Setup Test
  Open Browser  Open Browser  http://www.baidu.com/  chrome
  Maximize Browser Window
  • 我们新建了一个Keyword,名称为Setup Test, 这个keyword实现的功能就是打开浏览器并最大化它,所以应该按如下修改脚本:

*** Settings ***
Library       Selenium Library
Suite Setup     Start Selenium Server
Suite Teardown  Stop Selenium Server
Test Setup      Setup Test
Test Teardown   Close All Browsers

***Variables***
@{username}=  user1  user2  user3  ...
@{password}=  password1  password2  password3  ...

*** Testcases ***
Login Should Succeed When the Correct Username and Password are Entered
  Click Link  link=登录
  Input Text  username  @{username}[0]
  Input Text  normModPsp  @{password}[0]
  Click Button  xpath=//input[@value=' 登录 ']
  Page Should Contain  @{username}[0]

*** Keywords ***
Setup Test
  Open Browser  Open Browser  http://www.baidu.com/  chrome
  Maximize Browser Window

  • 上述脚本中有些keywords不是特别易读,为了提高脚本的可读性,我们借助keyword table完成。

*** Keywords ***
Setup Test
  Open Browser  Open Browser  http://www.baidu.com/  chrome
  Maximize Browser Window
Enter Username  [Arguments]  ${username}
  Input Text  uname  ${username}
Enter Password  [Arguments]  ${password}
  Input Text  pwd  ${password}
Click the Login Button
  Click Button  login
Login Is Successful
  Page Should Contain  Welcome

  • 优化后的脚本如下:

*** Settings ***
Library       Selenium Library
Suite Setup     Start Selenium Server
Suite Teardown  Stop Selenium Server
Test Setup      Setup Test
Test Teardown   Close All Browsers

***Variables***
@{username}=  user1  user2  user3  ...
@{password}=  password1  password2  password3  ...

*** Testcases ***
Login Should Succeed When the Correct Username and Password are Entered
  Open Login Page
  Enter Username  @{username}[0]
  Enter Password  @{password}[0]
  Click the Login Button
  Login Is Successful @{username}[0]

*** Keywords ***
Setup Test
  Open Browser  Open Browser  http://www.baidu.com/  chrome
  Maximize Browser Window
Open Login Page
  Click Link  link=登录
Enter Username  [Arguments]  ${username}
  Input Text  uname  ${username}
Enter Password  [Arguments]  ${password}
  Input Text  pwd  ${password}
Click the Login Button
  Click Button  login
Login Is Successful  [Arguments]  ${username}
  Page Should Contain  ${username}

执行这个Test Case时,先将目录定位到这个文件所在的文件夹,然后pybot validlogin.txt 即可。
 类似资料: