上一篇面向对象编辑,貌似这个用例已经很完美,但是还有不完善的地方,测试数据(用户名、密码、断言的判断数据)还是硬编码,要想做的更完美,实现逻辑与数据分离,这才是自动化测试的真谛。
方法:运用yaml,读取配置文件中测试数据
1.创建文件目录:
2.login_dialog.rb文件内容与上一篇“面向对象编程”面向对象编程”中login_dialog.rb内容一致
3.login_main_page.rb文件内容与上一篇“面向对象编程”中login_main_page.rb一致
4.login_data.yml文件中编写如下内容:
[ruby] view plaincopydata:
mainPage:
url: http://www.soso.com
title: 搜搜更懂你
login:
wrong:
username: test
password: test
message: 您输入的帐号或密码不正确,请重新输入。意见反馈
5.login_spec.rb文件中编写如下内容:
[ruby] view plaincopy#encoding: utf-8
require "rspec"
require 'yaml'
require 'selenium-webdriver'
require File.dirname(__FILE__)+'/../action/login_main_page'
require File.dirname(__FILE__)+'/../tool/login_dialog'
describe "soso login" do
include LoginDialog
before(:all) do
@problem=YAML.load(File.open(File.dirname(__FILE__)+'/../config/login_data.yml'))
@dr=Selenium::WebDriver.for :firefox
@url=@problem["data"]["mainPage"]["url"]
#@url='http://www.soso.com'
@dr.get @url
end
before(:each) do
@login_element=LoginMainPage.new(@dr)
end
it "should return username and password is wrong" do
@login_element.login(@problem["data"]["login"]["wrong"]["username"],@problem["data"]["login"]["wrong"]["password"])
err_message.should eql (@problem["data"]["login"]["wrong"]["message"])
close_browser
end
end
6.命令行运行命令:
[plain] view plaincopycd d:\test004
rspec -f doc
得到如下结果:
[plain] view plaincopysoso login
should return username and password is wrong
Finished in 9.23 seconds
1 example, 0 failures
运行通过