发布新日志

  • range

    2013-09-17 16:43:23

    range(i,j) 返回一个序列的数,这个序列从i开始,到j结束(但不包括j),步长为1.

    range(i,j,n) 返回一个序列的数,这个序列从i开始,到j结束(但不包括j),步长为n.

  • sql server-字符串函数(转载)

    2013-01-04 16:22:46

    http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html
     
     

    以下所有例子均Studnet表为例:

     

    计算字符串长度
    len()用来计算字符串的长度

    select sname ,len(sname) from student

    字符串转换为大、小写
    lower() 用来将一个字符串转换为小写,upper() 用来将一个字符串转换为大写

    select lower('I AM A STUDENT !')
    select upper('i am a student !')

    截去字符串左、右侧空格                                              
    ltrim() 用来将一个字符串左侧的空格去掉 ,rtrim()用来将一个字符串右侧的空格去掉

    declare @str varchar(100)
    set @str=' 我的左侧有空格!'
    select @str
    as 初始字符, len(@str) as 初始长度,ltrim(@str) as 现有字符,len(ltrim(@str)) as 现有长度

    返回由重复的空格组成的字符串
    space(
    integer_expression)    integer_expression 指示空格个数的正整数。如果 integer_expression 为负,则返回空字符串。

    select 'A'+ space(2)+'B'

    取子字符串
    substring(string,start_position,length) 可以从任意位置取任意长度的子字符串,
    left(string,length)  从左侧开始取子字符串
    right(string,length)从右侧开始取子字符串

    select substring('HelloWorld!',6,6)
    select left(
    'HelloWorld!' ,5)
    select
    right('HelloWorld!' ,6)

    字符串替换
    replace(string,要被替换的字符串,替换的字符串)

    select replace('HelloWorld!','o','e') 结果为:HelleWerld!

    返回字符串值的逆向值
    reverse(string_expression)

    select reverse('abc') 结果为:cba

    删除指定长度的字符,并在指定的起点处插入另一组字符
    stuff(character_expression , start , length ,character_expression)
    start 一个整数值,指定删除和插入的开始位置。
    length 一个整数,指定要删除的字符数。

    select stuff('abcdefg',1,6,'Hello ') 结果为:Hello g

    以指定的次数重复字符串值
    replicate(
    string_expression ,integer_expression)

    select replicate('abc',4) 结果为:abcabcabcabc

    返回字符串中指定表达式的开始位置
    charindex(expression1 ,expression2  , start_location )或charindex(expression1 ,expression2 )
    expression1在expression2 中的开始位置

    select charindex('H','elloHWorld') 结果为:5

    返回指定表达式中模式第一次出现的开始位置
    patindex('%pattern%',expression)
    返回指定表达式中某模式第一次出现的起始位置;
    如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

    select patindex('%Hello%','WorldHello') 结果为:6

    返回输入表达式的第一个字符的整数值
    unicode( 'ncharacter_expression' )    ' ncharacter_expression ' 为 nchar nvarchar 表达式。

    select unicode('a') 结果为:97
    select unicode(
    'abc') 结果为:97

    返回由数字数据转换来的字符数据
    str(
    float_expression , length ,decimal )
    float_expression 带小数点的近似数字 (float) 数据类型的表达式。
    length               总长度。它包括小数点、符号、数字以及空格。默认值为 10。
    decimal             小数点右边的小数位数。decimal 必须小于等于 16。如果 decimal 大于 16,则将结果截断为小数点右边的 16 位。

    复制代码
    select str(123.436,2), len(str(123.436,2)) //当表达式超出指定长度时,字符串为指定长度返回 **

    select str(
    123.436), len(str(123.436)),
    str(
    123.436,6), len(str(123.436,6)),
    str(
    123.436,6,1), len(str(123.436,6,1)) //由六个数字和一个小数点组成的表达式转换为有六个位置的字符串。
    数字的小数部分舍入为一个小数位。

    select str(
    1234.436), len(str(1234.436)),
    str(
    1234.436,6), len(str(1234.436,6)),
    str(
    1234.436,6,1),len(str(1234.436,6,1))
    复制代码

    结果为:

             

             

    得到字符的ASCII码
    ascii()用来得到一个字符的ASCII码,它有且只有一个参数,如果参数为字符串,那么取第一个字符的ASCII码

    select ascii('H')
    select ascii(
    'HelloWorld!')

    得到一个与ASCII码数字对应的字符
    Char(integer_expression)  integer_expression 介于 0 和 255 之间的整数。如果该整数表达式不在此范围内,将返回 NULL 值。

    select Char(72)

    返回返回具有指定的整数代码的 Unicode 字符
    nchar(integer_expression)  integer_expression 介于 0 与 65535 之间的正整数。如果指定了超出此范围的值,将返回 NULL。

    select nchar(1000)

    返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 SQL Server 分隔标识符。
    quotename('character_string'character_string 不得超过 128 个字符。超过 128 个字符的输入将返回 NULL。

    select quotename('abc[aa]def')

    结果为:[abc[]]def]  请注意,字符串 abc[]def 中的右方括号有两个,用于指示转义符。
    select QUOTENAME('abcdef','''') --分隔符是两个单引号
    -- 'abcdef'
    select QUOTENAME('abcdef') --分隔符是]
    -- [abcdef]
    select QUOTENAME('abcdef','{}') --分隔符是}
    -- {abcdef}

    发音匹配度
    有时候我们并不知道一个人姓名的拼写,但是我们知道他的发音,这时我们可以进行发音的匹配度测试。
    soundex()用于计算一个字符串的发音特征性,这个特征值为一个四个字符的字符串,特征性的第一个字符总是初始字符串中的第一个字符,而后是一个三位数的数值。

    select sname ,soundex(sname) from student

    结果为:

    发音特征值的含义非常复杂,如果要根据两个发音特征值来分析两个字符串的发音相似度的话非常麻烦。
    可以使用difference()来简化两个字符串的发音相似度比较,它可以计算两个字符串的发音特征值,并且比较它们,
    然后返回一个0~4之间的值来反映两个字符串的发音相似度,这个值越大则表示两个字符串的发音相似度越大。

    select sname,soundex(sname), difference(sname,'Herry') from stu

    结果为:
       

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,并在文章页面明显位置以超链接形式注明出处,否则保留追究法律责任的权利。

  • 数据库中读取繁体字

    2012-12-21 13:56:38

    昨儿工作的时候碰到一个很诡异的问题,在数据库中通过where语句查询记录一直查询不出来,而且我是非常确定这条记录在表中是存在的。
     
    后来咨询了专门的DB的同事,原来是字符的原因,因为我要查询的字段里面存的是繁体字,所以数据库识别不出来,可以在字符串前面加N进行字符转换,这样任何字符都能识别了就。
     
    类似于: SELECT * FROM Client where localName=N'統一藥品'
     
    PS: N和后面的字符之间是不能有空格的
  • 写shared step的test case

    2012-12-12 11:05:21

    今儿老大对我写的test case 中的 shared step给了一些指导,感觉帮助很大,记录在此,确保以后能永远记得
     
    shared step目的是为了可以多次利用这个test case,那设计的时候就要一切都围绕着高复用性来努力, 我总结了一下,觉得要实现高复用性,shared step要符合以下几个要求:
     
    1. 抽象化: test case中涉及的对象不要太具体,越抽象以后可以复用的地方就越多
     
    2. 参数化: 参数化其实是为抽象化服务的,因为到最后在实际测试用例中引用到这个shared step的时候,必然是需要具体的对象的。这个跟函数定义和引用是一样的道理,我们在shared step里面定义参数(函数),在实际引用的时候具体化参数(调用函数时要给函数参数具体的值)
     
    3. 一个shared step只做一件事情: 这个应该比较容易理解,就像我们的test case一个只测一个结果一样。在shared step中,应该只对一个对象,做一个事情
     
    4. 对象的所有字段都要写出来: 因为以后引用这个shared step的情况很多,为了覆盖到所有情况,我们在这里需要把所有字段都写出来,然后到具体的test case里面可以决定究竟用哪些(参数值可以决定)
  • SQL 时间类型的模糊查询

    2012-09-14 14:06:12

    今儿想用模糊查询来查某一天的数据,被提示语句错误。查了一下才发现该模糊查询只能用于String类型的字段。
     
    后来网上搜索到三种对时间的模糊查询方法,记在这里,以备后用:
     
    1.Convert转成String,在用Like查询。
    select * from table1 where convert(varchar,date,120) like '2006-04-01%'
    2.Between
    select * from table1 where time between '2006-4-1 0:00:00' and '2006-4-1 24:59:59'";
    3 datediff()函数
    select * from table1 where datediff(day,time,'2006-4-1')=0

    第一种方法应该适用与任何数据类型;
    第二种方法适用String外的类型;
    第三种方法则是为date类型定制的比较实用快捷的方法。
  • selenium methods

    2011-11-09 13:37:52

    http://release.seleniumhq.org/selenium-remote-control/0.9.2/doc/java/com/thoughtworks/selenium/Selenium.html
  • 引跑面试总结

    2011-05-14 11:15:58

    前几天参加了上海引跑公司的软件测试工程师的面试,现在还没有结果,但自己估计是凶多吉少,呵呵
     
    写这篇日志是为了总结和认识一下自己的不足,这家公司的面试还是很全面的,让我暴露出了很多自己都忽略的缺陷
     
    我一共经历了三轮,最开始是笔试,后面是两轮技术面,不知道为什么,没有人事的面试
     
    先说笔试,他们出了四页题目,有测试知识题(性能测试,数据库,linux和分析测试点及写测试用例),逻辑题(数字题,字母题,图案题),代码阅读能力(java代码,字符类型转换),考验观察力的题(找图形规律的,类似于找茬的找不同的题)。所有这些题目要求一个小时完成。
     
    我技术题答得不算好,好多基础知识因为不用都忘了,linux的是因为没用到过那方面的,分析测试点的应该做的还不错,但写用例的他们题目出的有问题,就没答,人事说不会影响成绩。
    逻辑题因为比较慌,几个数字的都没做,先把后面有把握的做了
    代码应该还可以,不过不知道函数细节是不是写对了
    找不同都做完了
     
    接下来是两个技术主管分别的面试(不知道为什么不一起面),第一个主管问的很详细,而且大多是看着我的简历一条条问的,里面有些我很久之前用过的东西答的就不怎么样了,但我们谈的时间比较久
    第二个主管面的很快,但是直插细节型的,然后我就死在了某些知识点上(我学东西不喜欢记,总是用多了自然熟,但时间长不用就又会忘记)
     
    整个面试持续了大概两个小时
     
    总结:基础知识需要时不时的复习,用过的东西也要经常来熟悉一下,否则很容易手生,忘记常用的命令等。总之就是要做到不断学习,温故知新。最重要的是基础知识,然后在工作中把它们理解的更透彻
     
    最后,这家公司给的薪水很诱人,但他们的加班估计不会少
  • firefox升级为4之后selenium不兼容的问题

    2011-05-09 16:43:15

    firefox升级为firefox4后提示selenium不兼容了,但selenium现在没有可以与firefox4兼容的版本,最后再论坛里找到了解决办法:

    先安装firefox的这个组件:add-on compatibility reporter,然后再安装selenium IDE就可以了。虽然还是提示不兼容,但是可以正常安装、正常使用。

    原帖子地址:http://bbs.51testing.com/thread-431454-1-1.html
  • truncate,delete,drop的异同点

    2011-01-19 17:31:30

    相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据  

    不同点:
    1. truncate和 delete只删除数据不删除表的结构(定义)
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
    2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
    truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
    3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
    显然drop语句将表所占用的空间全部释放
    truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
    4.速度,一般来说: drop> truncate > delete
    5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
    使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
    想删除表,当然用drop
    想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据



    此文转发自百度知道
  • Bugzilla安装小记(续)-邮箱设置

    2010-11-10 17:44:07

    上次安装时没有涉及到邮箱的设置,只是让Windows自带的SMTP虚拟服务器来作为邮件服务器,Bugzilla可以用,但不能发送邮件

    这两天有时间,就又把这个搞了一下,终于可以发邮件了,在这里总结一下:
    Bugzilla可以使用自己架设的服务器,也可以用支持邮件客户端的邮件服务商,如163,Yahoo等。
    可以在bugzilla目录下的data\params文件中设置相关参数,要设置的参数有:
    'mailfrom' ,'smtp_password','smtp_username','smtpserver'
    其中'mailfrom'和'smtp_username'设置要一致,
    'smtp_password'为邮箱的登录密码
    示例:

    'mailfrom' => '123@163.com',

    'smtp_password' => '123'

    'smtp_username' => '123@163.com'

    'smtpserver' => 'smtp.163.com',


    如果要使用支持邮件客户端的邮件服务商,则要安装Perl的一个可选组件:Authen-SASL,不然发邮件的时候可能就会出现提示"Couldn't authenticate '123@163com:...'"

  • Bugzilla安装小记

    2010-11-08 11:38:30

    这两天在公司的电脑上安装了bug管理工具Bugzilla,安装过程还算顺利,只是遇到了一些小问题

    开始是从网上下载了一个安装指南(见附件),然后照着一步步做下来的,用的是MySQLperlIIS

    因为我们测试组人比较少,不太用到发邮件的功能(而Bugzilla要正确配置必须有邮件服务器),所以我就选择了用IIS自带的默认 SMTP 虚拟服务器。这个只要在安装中提示输入邮件服务器名称时输入自己机器上的IIS自带的默认 SMTP 虚拟服务器名称即可(默认为默认 SMTP 虚拟服务器,但可以重命名)

    安装好后在自己电脑上可以通过“http://localhost/bugzilla”来访问Bugzilla,第一次进入会要求你设置一些参数,主要是 urlbase设置好就可以,其他可以暂时不用管,urlbase设置为:http://主机IP地址/bugzilla,如果在站点中不能设置成功(我的是每次Save Changes都会报错),可以直接在bugzilla/data/params文件中修改urlbase

    在一切都设置好后,客户端就可以通过设置好的urlbase来访问了,如果不能正常访问,可能是主机的80端口被防火墙拦截了,在主机控制面板->防火墙->例外->添加端口,添加80端口后就可以正常访问了。

    这次没有怎么涉及到邮件的配置,看到很多文章说邮件是最麻烦的部分,通常都会遇到很多问题,呵呵,下次用到时再仔细研究的

  • ruby on rails+selenium测试环境安装

    2010-10-15 10:27:13

    最近公司搞自动化测试,要求我们测试帮助开发把自动化脚本的运行环境搭起来,这样每个开发改了东西就可以先自己跑一下,起码保证重要流程能够走通(目前的测试脚本也只涉及到重要流程)

    安装过程中出现了一些问题,经过努力基本都解决了,现在把问题引起的原因和注意事项整理一下,以备后用:

    1.rails的安装是实时从网上下载安装的,所以安装时要保证机器是联网的(也就引发了就算是同一版本的rubygems安装rails,其版本也会不同的问题)。

    2.rspec的版本也会变化,且有时安装之后会少很多文件,可能会提示找不到spec/rake/spectask文件,这时可以选择把别的机器上好的文件夹(rspec)(在安装目录下E:\Program Files\Ruby191\lib\ruby\gems\1.9.1\gems)整个拷贝到有问题的机器上(同目录下)。关于版本问题只要在RakeFile文件中修改一下即可

    3.脚本运行启动的浏览器如果不是安装在默认目录下,则要在脚本中写明安装目录,即browser变量中声明路径,如$browser="*firefox E:\\Program Files\\Mozilla Firefox\\firefox.exe",否则运行时会报找不到浏览器的错误
  • ruby on rails实践

    2010-10-14 16:09:11

    1.在ruby中,任何事物都是类

    2.在ruby中,函数的最后一条语句如果是表达式,那么它就作为返回值

    3.全局变量以$开头,静态变量,也就是类变量以@@开头,实例变量以@开头

    4.ruby中的迭代器iterator,例子:6.times{|i|p i}   打印从1到6的结果

    5.ruby中的代码块是以{}和do end 来包围起来的,通常是单行使用{},多行使用do end :代码块和参数并不相同,它和函数的执行可以说是并行的,确切的说是交替进行的。如果在函数内部运行过程中碰到yield,它就会将函数执行交给函数附带的代码块来执行,代码块执行完了,执行流程转到函数内部继续运行。
       def callBlock
           yeild
           yeild
       end

       callBlock{puts "in the block"}


    输出:
    in the block
    in the block

    6.rails中,数据库表以复数形式命名,而与之对应的Model类,使用单数形式

    7.:book是一个symbol,在ruby中,symbol可以理解为变量名,比如一个变量book=1,如果直接饮用book,会得到1,如果:book,就指变量名本身
  • C语言基础知识(一):控制字符

    2010-09-30 11:38:34

    控制字符以一个%符号开始,如下

    控制字符 说明 %c 一个单一的字符 %d 一个十进制整数 %i 一个整数 %e, %f, %g 一个浮点数 %o 一个八进制数 %s 一个字符串 %x 一个十六进制数 %p 一个指针 %n 一个等于读取字符数量的整数 %u 一个无符号整数 %[] 一个字符集 %% 一个精度符号
  • ruby语法小积累(一):变量命名规则

    2010-09-25 11:11:36

    ruby变量的第一个字母是用来表明变量用途的
    1.局部变量,方法参数和方法名通常都是以小写字母或者下划线开头的;
    2.全局变量以$开头;
    3.实例变量以@开头;
    4.类变量以@@开头;
    5.类名,模块名和常量以大写字母开头
  • 测试概念理解

    2010-09-10 10:14:43

    一直没有很明白测试的分类问题,前天晚上又仔细看了一遍,用心理解了一下,终于有点感觉了
    1.按阶段来分:
     1)单元测试:对程序最小模块进行测试,就是对程序的类,函数之类的进行白盒测试
     2)集成测试:对模块整合在一起后的接口进行测试,一般可以算是灰盒测试(其中还包括冒烟测试,就是版本测试)
     3)确认测试:确保软件能实现特定功能的测试,
     4)系统测试:确保软件能满足用户需求的测试,参考文档是需求规格说明书
     5)验证测试:根据合同等来测试软件,决定软件是被验收还是拒收



    2.冒烟测试和回归测试的区别:

    冒烟测试:执行时间:
    每日build(构建版本)建立之后
            测试内容:对系统的基本功能进行简单的测试。这种测试强调程序的主要功能进行的验证,也叫版本验证测试,提交测试。
            目的:通过最基本的测试,如果最基本的测试都有问题,就直接打回开发部,减少测试部门时间的浪费
            执行者:开发人员

    回归测试:
    执行时间:软件维护阶段对软件修改后进行的测试
             测试内容:修改内容或相关
             目的:验证修改的正确性及其影响
             执行者:测试人员


  • Ruby之旅(16) 异常处理 rescue与ensure

    2010-08-11 14:31:40

    http://www.cnblogs.com/coderlee/archive/2008/01/17/1042831.html



    begin #开始
     
     
    raise.. #抛出异常
     
    rescue [ExceptionType = StandardException] 
    #捕获指定类型的异常 缺省值是StandardException
     $! #表示异常信息
     $@ #表示异常出现的代码位置
    else #其余异常
     ..
    ensure 
    #不管有没有异常,进入该代码块
     
    end 
    #结束

    这是异常处理结构,可以结合$!错误原因,和$@错误位置做一个错误捕获并提示的小程序了,比如

    begin
        puts 
        puts 
    "file: #{name = ARGV.shift}"
        file 
    = open(name)
        i 
    = 0
        file.read.each_line{
    |line| puts "#{i+=1}.#{line}" }
        puts
    rescue
        puts 
    "error:#{$!} at:#{$@}"
    ensure
        file.close
    end
    上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,你可以故意输入一个不存在的文件名。

    其实begin相当于c#的try
    rescue相当于c#的catch
    ensure相当于c#的finaly
    raise相当于c#的throw

  • ruby 异常处理:rescuehttp://www.jb51.net/article/12883.htm

    2010-08-11 14:30:13

    http://www.jb51.net/article/12883.htm



    一个运行着的程序常会遇到意外的问题.一个要读取的文件不存在;当希望存入一些数据时磁盘满了;用户可能输入不恰当的数据.

    ruby> file = open("some_file")
    ERR: (eval):1:in `open': No such file or directory - some_file


    一个健壮的程序会合理并漂亮的处理这些问题.面对那些异常是一件讨人厌的工作.C程序员被要求做到检查每一个可能导致错误发生的系统调用的返回值并立刻做出决定.

    FILE *file = fopen("some_file", "r");
    if (file == NULL) {
    fprintf( stderr, "File doesn't exist.\n" );
    exit(1);
    }
    bytes_read = fread( buf, 1, bytes_desired, file );
    if (bytes_read != bytes_desired ) {
    /* do more error handling here ... */
    }
    ...


    这项无聊的工作会使程序员最终变得马虎并忽略掉它,结果是程序无法应对异常.令一方面,这样也会降低程序的可读性.因为过多的错误处理使有意义的代码也变得杂乱了.

    在 Ruby里,就像其它的现代语言,我们可以通过隔离的办法处理代码域里的异常,因此,这有着惊人的效果却又不会为程序员或以后希望读它的其它人造成过度的 负担.代码域由begin开始直到遇到一个异常,这将导致转向一个由rescue标记的错误处理代码域.如果异常没发生,rescue代码就不会使用.下 面的代码返回文本文件的第一行,如果有异常则返回 nil.

    def first_line( filename )
    begin
    file = open("some_file")
    info = file.gets
    file.close
    info # Last thing evaluated is the return value
    rescue
    nil # Can't read the file? then don't return a string
    end
    end


    有时我们会希望围绕问题展开创造性工作.这里,如果文件不存在,我们用标准输入代替:

    begin
    file = open("some_file")
    rescue
    file = STDIN
    end
    begin
    # ... process the input ...
    rescue
    # ... and deal with any other exceptions here.
    end


    retry 用于 rescue 代码表示又重新执行 begin 代码.这让我们可以压缩前面的例子:

    fname = "some_file"
    begin
    file = open(fname)
    # ... process the input ...
    rescue
    fname = "STDIN"
    retry
    end


    但这仍有一点瑕疵.一个不存在的文件将导致不停止地 retry.你在使用 retry 做异常处理时应注意到这一点.

    每个Ruby库在遇到错误时都会提交一个异常,你可以在自己的代码里明确地提交异常.用 raise 来提交异常.它带一个参数,也就是描述异常的一个字符串.参数是可选的但不应被省略.之后它可以通过一个特殊的全局变量 $! 访问.

    ruby> raise "test error"
    test error
    ruby> begin
    | raise "test2"
    | rescue
    | print "An error occurred: ",$!, "\n"
    | end
    An error occurred: test2
    nil
  • ruby几个易被忽略的操作符

    2010-08-11 13:25:28

    ==         值相等  
    eql?     值相等,类型相等  
    equal? 值相等,内存地址相等

     

  • test enviroment with selenium and ruby

    2010-08-05 15:14:55

    1.       You need download the Selenium-RC in http://seleniumhq.org/download/. The Selenium-RC server is simply a Java jar file (selenium-server.jar), which doesn’t require any installation. Just download the zip file and extract the server in the directory you need to

    2.       To run the server ,you’ll need Java installed and the PATH environment variable correctly configured to run it from the console. The JDK version should be not older than 5.0 .

    3.       Then download the ruby applied for Windows system and install it. The ruby version should be at least 1.9.X . The site for downloading ruby is http://www.ruby-lang.org/en/downloads/

    4.       You can download rubygems in http://rubyforge.org/projects/rubygems/ , then go to the directory where rubygems’ setup file is located. Run” ruby setup.rb “ in a command-line console.You can check whether you have installed rubygems correctly by running the following on a command-line console: gem –v. If you get a version number, it means you have install rubygems successfully.

    5.       Next, you can install other applications by using the following commands on a command-line console:

    gem install rails

    gem install selenium-client

    gem install spec_ui

    gem install rspec

    gem install rake

    6.       Till now, the test environment is ready. Before you start the tests, you must start the Selenium-RC’s server each time. There are 2 steps need to go in command-line console :1. Go to the directory where Selenium-RC’s server is located 2. run the command : java -jar selenium-server.jar

381/212>
Open Toolbar