清华大学·软件·软件测试课·2012 年春季
Sahi 使用指南及例程
声明:本使用指南不能替代
课程内容,上课请认真听讲。
1
运行意义
Sahi 自动化测试可以用来对比
程序实际的运行结果和我们期望的结果是不是一致。 一个
使用的例子是用在敏捷开发中的回归测试:敏捷开发提倡走迭代,强调持续交付。而当涉及 新功能开发或者 bug 修正的时候,不能把以前的功能改坏了,敏捷就成狗熊掰棒子了。那么 这种在每个版本都需要进行的测试就不好人工来做,需要 Sahi 自动化进行。 Sahi 是 UI 层面的测试,属于黑盒测试。
2
我的测试环境
操作
系统:Windows 7 旗舰版 浏览器:Firefox 7.01 Sahi 版本:V35 Ruby 版本:V1.8.6 Ruby 运行环境:Netbeans 6.9.1
3
测试环境配置
1. Netbeans 里的项目:Ruby 平台用 Ruby 1.8.6,在..\Ruby186\bin\下
2.
Sahi 配置
打开 cmd,运行 gem list,如果没有下图这些,可能需要配置。
清华大学·软件 1
清华大学·软件·软件测试课·2012 年春季
3.
运行 gem install sahi
4.
如果运行 gem install 有错, 修改..\Ruby186\lib\ruby\gems\1.8\gems\guid-0.1.1\lib 下 的 guid.rb,注释掉 RUBY_PLATFORM =~ /[^r]win/i,如下图
清华大学·软件 2
清华大学·软件·软件测试课·2012 年春季
5.
运行 gem install win32-process。不过 64 位机装这个似乎有些命令会用不了/_\,比 如我,先这样吧。
4
测试流程及例程:
1. 开启 Sahi,双击 Firefox,会出现 Sahi 的首页,在中间的地址栏里键入要测试的网 站地址,会出现具有 Sahi 特色的网页。
=> 2. a) 录制代码 打开 Sahi Controller(在 Firefox 里按住 alt 双击鼠标左键) ,然后点 Record 开始录制 脚本
清华大学·软件 3
清华大学·
软件·软件测试课·2012 年春季
b) c)
正常操作浏览器 Sahi Controller 的 Recorded Steps 里会有录制好的脚本
3. a) i.
编写测试代码(例程代码见最后) setup 这里面的代码是在每个 test 方法运行之前都要用到的, 一般是测试的准备
工作, 比如开启浏览器。这样可以避免每个 test 里面都自己开一遍浏览器。
清华大学·软件 4
清华大学·软件·软件测试课·2012 年春季
ii. b)
copy 例程代码注意核对本机浏览器所在路径 teardown
i. ii. iii. c) i. ii. iii. d) e) 4. test
和 setup 差不多,不过这个是每个 test 方法运行完之后用一遍的。 64 位机自己写一段代码关浏览器(kill 掉火狐的线程) 这里面的东西一般不大用管
这里面的代码就是刚才用 Sahi Controller 录制的, 如果 Ruby 熟的话自己写也行 主要看这里面的测试结果 这里可以写多个测试方法进行测试 调试:使用 Netbeans 中的功能即可。 Ruby 脚本这里需要
学习 test/unit 框架
测试及结果
在 Netbeans 里运行项目即可测试,注意在测试的时候 Sahi 得是开着的。测试的时候会 回放录制的过程,netbeans 中会输出 Sahi 运行结果:
测试结果中 assertions 指断言,如可以在测试过程代码中写一个” assert_equal 3, 9”,测 试结果中会输出:
当然,实际测试中 9 这里是个 value,用来查看预期的效果是否达到了。 附:例程代码
清华大学·软件 5
清华大学·软件·软件测试课·2012 年春季
require 'test/unit' require 'rubygems' require "sahi" class SahiDriverTest < Test::Unit::TestCase def setup @browser = init_browser() @browser.open end def teardown if @browser @browser.close_current_browser_session sleep(2) end end def init_browser browser_path = "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe" browser_options = "" return Sahi::Browser.new(browser_path, browser_options) end def test_baidu_search @browser.navigate_to("baidu") @browser.textbox("wd").value = "sahi" @browser.submit("百度一下").click @browser.link("sahi_百度百科").click # assert_equal 3, 9 end # def test_baidu # @browser.navigate_to("baidu") # @browser.textbox("wd").value = "sahi" # @browser.submit("百度一下").click # end end
清华大学·软件 6