Test File包含了四部分:Setting(required), Variable(optional), Test Case(required), Keyword(optional)
1. Setting
3. Suite Settings
执行这个Test Case时,先将目录定位到这个文件所在的文件夹,然后pybot validlogin.txt 即可。
- 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
|
如果调用Selenium Library时不提供任何参数,则意味着默认参数刚会被使用。
|
如果调用Selenium Library时提供参数,则以提供的值使用。
Selenium Library有5个参数,有的参数需要赋新值,有的需要使用默认值,如何处理?
2. Test Case - 以登录
百度账号为例
Selenium Library有5个参数,有的参数需要赋新值,有的需要使用默认值,如何处理?
- 新值直接添加即可。
- 默认值,可以输入${EMPTY}或是'\ '代表调用时使用默认值。
*** 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
- 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.
*** 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}
- Scalar Variable: 只有一个值的变量, 表达式${username}= user1
- 在第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
Enter Username [Arguments] ${username}
Open Login Page Click Link link=登录
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 即可。