linux命令blockdev参数以及用法详解

blockdev作用:查询区块设备
blockdev语法:block [参数] [命令] 设备
blockdev参数:
-q 安静模式
-v完整模式
-V 列出版本后退出
--flushbufs 更新缓存区
--getra 列出读写头大小
--getro 判断是否只读:1为只读,0为非只读
--getsize 列出设备的容量
--getss 列出区块大小
--rereadpt 重读分割表
--setra 设置读写头为N倍的512kb区块
--setro 设置为只读
--setrw 设置为可擦写
使用举例:
blockdev -v --getss /dev/sda1

阅读全文 »

linux badblocks命令参数及用法详解

badblocks 作用: 检查硬盘中损坏的区块 badblocks [ -svwnf ] [ -b block-size ] [ -c blocks_at_o nc e ] [ -i input_ file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern ] device [ last-block ] [ start-block ] 参数含义: -b blocksize 指定磁盘的区块大小,单位为字节,默认值为 block 4K (4K/block) -c blocksize 每个区块检查的次数,默认是16次 -f 强制在一个已经挂载的设备上执行读写或非破坏性的写测试操作 (我们建议先 umount 设备,然后再进行坏道检测。仅当/etc/mtab出现误报设备挂载错误的时候可以使用该选项) -i file 跳过已经显示在file文件中的坏道,而不进行检测(可以避免重复检测) -o file 把检测结果输出到file文件 -p number 重复搜寻设备,直到在指定通过次数内都没有找到新的坏块位置,默认次数为0 -s 在检查时显示进度 -t pattern 通过按指定的模式读写来检测区块。你可以指定一个0到ULONG_MAX-1的十进制正值,或使用random(随机)。 如果你指定多个模式,badblocks将使用第一个模式检测所有的区块,然后再使用下一个模式检测所有的区块。 Read-only方式仅接受一个模式,它不能接受random模式的。 -v 执行时显示详细的信息 -w 对每个区块都先写入,然后再从它读取信息 [device] 指定要检查的磁盘装置。 [last-block] 指定磁盘装置的区块总数。 [start-block] 指定要从哪个区块开始检查 示例: badblocks -v /dev/sdal ...

阅读全文 »

Selenium私房菜系列8 -- Selenium RC服务器命令行参数列表

使用示例: java -jar selenium-server.jar [-interactive] [options] -port nnnn : selenium服务器使用的端口号(默认 4444) -timeout nnnn : 我们放弃前(超时)所等待的秒数 -interactive: 进入交互模式。参考 教程 获取更多信息 -multiWindow: 进入被测试网站都在单独窗口打开的模式,并且selenium支持frame -forcedBrowserMode browser : 设置浏览器模式(例如,所有的会话都使用 *iexplore ,不管给getNewBrowserSession传递什么参数) -userExtensions file : 指定一个被载入到selenium的JavaScript文件 -browserSessionReuse: 停止在测试间重新初始化和替换浏览器。 -alwaysProxy: 默认情况下,我们尽量少的进行代理;设置这个标志将会强制所有的浏览器通讯都通过代理 -firefoxProfileTemplate dir : 一般情况,我们在每次启动之前都生成一个干净的Firefox设置。您可以指定一个目录来让我们将您的设置拷贝过来,代替我们生成的。 -debug: 进入debug模式,会有更多的跟踪调试信息 -htmlSuite browser startURL suiteFile resultFile : 使用指定的浏览器(例如 *firefox )在指定的URL(例如 http://www.google.com ),运行一个单独的HTML Selenese (Selenium Core)测试套件然后立即退出。您需要指定HTML测试套件的绝对路径还有我们将会生成的HTML测试结果文件的路径。 -proxyInjectionMode: 进入代理注入模式,这个模式中selenium服务器作为进入测试程序的所有内容的代理服务器。在这个模式下,可以跨多个域访问,并且还支持如下附加参数: -dontInjectRegex regex : 附加的正则表达式,代理注入模式能够使用它决定是否进行注入 -userJsInjection file : 指定一个JavaScript文件,将它注入到所有页面中 -userContentTransformation regex replacement : 一个正则表达式,对所有被测HTML内容进行匹配;第二个string将会对替换所有匹配的内容。这个标志能够使用多次。一个简单的适合使用这个参数的例子:如果你添加 -userContentTransformation https http 那么测试应用程序的HTML中的所有 https 字符串都会被替换为 http 。 我们还支持两种Java系统属性: -Dhttp.proxyHost 和 -Dhttp.proxyPort 。使用Selenium服务器作为代理服务器,Selenium RC一般重载你的代理服务器配置。使用这个参数适合在使用Selenium服务器代理的同时使用你自己的代理服务器。使用代理服务器时这样配置: java -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=1234 -jar selenium-server.jar 如果你的HTTP代理服务器需要验证,你还可以在http.proxyHost和http.proxyPort后面设置- Dhttp.proxyUser 和 - Dhttp.proxyPassword 。 java -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=joe -Dhttp.proxyPassword=example -jar selenium-server.jar ...

阅读全文 »

Selenium私房菜系列7-- 玩转Selenium Server

本篇主要是想更进一步介绍Selenium Server的工作原理,这次我们从Selenium Server的 交互模式 开始。 在《 第一个Selenium RC测试案例 》中,我们以命令 java -jar selenium-server.jar 启动了Selenium Server,其实在启动Selenium Server时,我们还可以加上各种参数(具体的参数请参考《 Selenium RC服务器命令行参数列表 》), 而开启 Selenium Server交互模式 的命令为 java -jar selenium-server.jar -interactive 。交互模式,是Selenium Server提供的一种快速的测试方法,你可以对Selenium Server输入命令从而直接启动测试。 1.启动Selenium Server交互模式 2.在命令行中输入: cmd=getNewBrowserSession 1=*iexplore 2=http://www.google.com 。控制Selenium Server启动浏览器,以及创建Session。 (1) .--- Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession 1=*iexplore 2=http://www.google.com 看过《 深入了解Selenium RC工作原理(1) 》的应该了解:我们所编写的测试案例,其实是通过发送Http请求实现对Selenium Server的控制,而测试案例所发送的请求就正是:--- Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession 1=*iexplore 2=http://www.google.com 。我们可以再打开一个IE浏览器,在地址栏输入: http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession 1=*iexplore 2=http://www.google.com ,回车!看,Selenium Server又为此产生了一个Session了!呵呵: (2) .这里,Selenium Server为上面的请求随机生成了一个Session ID:9505f5f8c52041c28f4cdc1f8e59f769(由于写这篇文章的时候中途重启了Selenium Server,所以这里和上图的Session ID不同,并且下文会继续使用Session ID:9505f5f8c52041c28f4cdc1f8e59f769)。 (3) .如果一切正常,Selenium Server最后会出现Get Result Ok的字样,并出现如下两个框框: 3.控制浏览器访问 www.google.com /webhp,输入: cmd=open 1=http://www.google.com/webhp sessionId=9505f5f8c52041c28f4cdc1f8e59f769 噢,浏览器成功访问 http://www.google.com/webhp 了: 。 总结一下: (1) .在Selenium Server中输入命令的格式为: cmd=Command 1=Target 2=Value SessionID= ,这和Selenium IDE的案例语句很像。 (2) .在输入命令后,Selenium Server会发条Http请求给自己,请求的URL格式也是固定的: http://localhost:4444/selenium-server/driver?cmd=Command 1=Target 2=Value SessionID= ,我们完全可以用浏览器发送请求控制Selenium Server进行测试。 (3) .另外,sessionId是很重要的一个参数,当一个Selenium Server同时运行多个测试案例时,Selenium Server就是通过sessionId判断到底该操作哪个浏览器窗口。而在下面的C#代码中: ISelenium selenium = new DefaultSelenium( 127.0.0.1 , 4444, *iexplore , http://www.google.com ); selenium.Start(); selenium.Open( /webhp ); selenium就相当于上文中的sessionId。 (4).在Selenium Server启动一个Session时,必须先指定一个 源 (原因见《 深入了解Selenium RC工作原理(2)》), 在上面的代码中 http://www.google.com 就是 源 了,然而这是可能出现问题,请看下面代码: ISelenium selenium = new DefaultSelenium( 127.0.0.1 , 4444, *iexplore , http://www.google.com ); selenium.Start(); selenium.Open( http://www.baidu.com ); 我们在启动Session时,定义了源为 http://www.google.com ,但在后来的操作中,我们打开的却是 http://www.baidu.com ,由于二者非同源,所以接下来的操作就可能会出现各种问题,故此Selenium Server会给出以下警告: Selenium Server提示说;如果测试案例是运行在*iehta或者*chrome上,或者改变Selenium Server的运行模式为proxy injection mode即可避免问题出现。 恩,在这里,我不得不承认之前在《 深入了解Selenium RC工作原理(1) 》中,为了简化问题,我故意少写了一些东西! 其实, Selenium Server其实有2种运行模式 : (1). Heightened Privileges Browsers (2). Proxy Injection 现在Selenium Server启动的默认模式为:Heightened Privileges Browsers。如果要启动Proxy Injection模式,可以加参数 -proxyInjectionMode 。而之前在《 深入了解Selenium RC工作原理(1) 》中介绍Selenium RC与Testcase关系,其实就是在描述 Proxy Injection 的工作模式,因为我个人认为Proxy Injection设计模式更为合理,所以只对Proxy Injection模式作介绍。在这里我补充说明一下,为什么Heightened Privileges Browsers模式不能避免上面的问 ...

阅读全文 »

Selenium私房菜系列6 -- 深入了解Selenium RC工作原理

前一篇已经比较详细讲述了如何使用Selenium RC进行Web测试,但到底Selenium RC是什么?或者它由哪几部分组成呢?? 一.Selenium RC的组成: 关于这个问题,我拿了官网上的一幅图来说明这个问题。 Selenium RC主要由两部分组成: (1).Selenium Server: Selenium Server负责控制浏览器行为,总的来说,Selenium Server主要包括3个部分: Launcher , Http Proxy , Selenium Core 。其中Selenium Core是被Selenium Server嵌入到浏览器页面中的。其实Selenium Core就是一堆JS函数的集合,就是通过这些JS函数,我们才可以实现用程序对浏览器进行操作。 (2).Client Libraries: 写测试案例时用来控制Selenium Server的库。 二.Selenium RC与Testcase的关系 先看下图: (1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。 为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。 (2).Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。 (3).测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。 (4).Selenium Core接收到指令后,执行操作。 (5).浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的Web页面。 由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。 (6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。 (7).Selenium Server的Http Proxy把接收的Web页面返回给浏览器。 为什么Selenium RC中的Selenium Server需要以这种代理服务器的形式存在?其实,这和浏览器的 同源策略 (The Same Origin Policy)有关。 一.什么是同源策略 同源策略 ,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。 为什么需要同源策略 ,这里举个例子: 假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生,看下图: 比如说,浏览器的两个tab页中分别打开了 http:// www.baidu.com /index.html和http:// www.google.com /index.html,其中,JavaScript1和JavaScript3是属于百度的脚本,而JavaScript2是属于谷歌的脚本,当浏览器的tab1要运行一个脚本时,便会进行同源检查,只有和 www.baidu.com 同源的脚本才能被执行,所谓 同源 ,就是指域名、协议、端口相同。所以,tab1只能执行JavaScript1和JavaScript3脚本,而JavaScript2不能执行,从而防止其他网页对本网页的非法篡改。 二.Selenium Server为什么以这种代理服务器的形式存在 上面说了同源策略,那同源策略的Selenium Server有什么关系呢??呵呵,上一篇说过,Selenium Core是一堆JS函数的集合,它是我们操作浏览器的基础。当存在同源策略时,便出现一些问题,看下图: 因为Selenium Core的JS脚本的 源 是localhost,所以浏览器会阻止Selenium Core的JS脚本在测试页面上执行,这就是为什么在本系列第一篇中说,如果只使用Selenium Core进行测试,需要把Selenium Core安装到远程服务器上。 为了解决上面这个问题,Selenium RC中的Selenium Server就以代理服务器的形式出现了,下图说明它是如何借助代理的身份蒙骗浏览器的: Selenium Server以代理的形式存在,通过修改WebSite的源信息,从而达到欺骗浏览器的目的,就这样,Selenium RC就轻松绕过了同源策略。在上图中,浏览器会认为WebSite和Selenium Core来自同一个 源 ----代理服务器! ...

阅读全文 »

Selenium私房菜系列5 -- 第一个Selenium RC测试案例

《 Selenium简介 》中讲过,Selenium RC支持多种语言编写测试案例,如:C#,Python。在工作中,我倾向于是用Python这类动态语言编写测试案例,因为这样的测试案例无需编译: ,试想如果你有1000个测试案例,每个都要编译,那会给编译服务器很大的压力,而且案例修改后,还得重新编译才能运行: 。但在本系列的文章中,我还是打算使用C#编写示范例子。 Selenium RC下载: http://seleniumhq.org/download/ 写Selenium RC的测试案例 上一篇《 Selenium IDE的使用 》中,提到了Selenium IDE可以把录制的脚本转为其他语言的脚本,所以我继续用上一篇的脚本为例子,下面是把脚本语言转换为C#后的代码: using System; using System.Text; using System.Text.RegularExpressions; using System.Threading; using NUnit.Framework; using Selenium; namespace SeleniumTests { [TestFixture] public class NewTest { private ISelenium selenium; private StringBuilder verificationErrors; [SetUp] public void SetupTest() { selenium = new DefaultSelenium( localhost , 4444 , *chrome , http://change-this-to-the-site-you-are-testing/ ); selenium.Start(); verificationErrors = new StringBuilder(); } [TearDown] public void TeardownTest() { try { selenium.Stop(); } catch (Exception) { // Ignore errors if unable to close the browser } Assert.AreEqual( , verificationErrors.ToString()); } [Test] public void TheNewTest() { selenium.Open( / ); selenium.Type( kw , hyddd ); selenium.Click( sb ); selenium.WaitForPageToLoad( 30000 ); try { Assert.IsTrue(selenium.IsTextPresent( hyddd - 博客园 )); } catch (AssertionException e) { verificationErrors.Append(e.Message); } selenium.Click( //table[@id='1']/tbody/tr/td/a/font ); } } } 在这里,转换后的脚本使用了NUnit测试框架,为了简化,我用VS的Test Project代替(当然你也可以用Console Application建立测试工程的),步骤如下: 1.建立Test Project 2.导入DLL引用 把selenium-dotnet-client-driver-1.0-beta-2目录中的 ThoughtWorks.Selenium.Core.dll , ThoughtWorks.Selenium.IntegrationTests.dll , ThoughtWorks.Selenium.UnitTests.dll 加入项目: 3.把上面自动生成的代码再改一下 using System; using System.Text; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Selenium; namespace SeleniumTest { [TestClass] public class UnitTest1 { [TestMethod] public void Test() { // 127.0.0.1为Selenium测试服务器位置。 // 4444为Selenium测试服务器监听端口。 // *iexplore为启动浏览器类型,我把它改为了IE浏览器。 // http://www.baidu.com为源地址 。 ISelenium selenium = new DefaultSelenium( 127.0.0.1 , 4444 , *iexplore , http://www.baidu.com ); selenium.Start(); selenium.Open( / ); selenium.Type( kw , hyddd ); selenium.Click( sb ); selenium.WaitForPageToLoad( 30000 ); Assert.IsTrue(selenium.IsTextPresent( hyddd - 博客园 )); selenium.Click( //table[@id='1']/tbody/tr/td/a/font ); selenium.Close(); selenium.Stop(); } } } 4.启动Selenium测试服务器 打开cmd进入selenium-server-1.0-beta-2目录,输入 java -jar selenium-server.jar (需要先安装JRE) ,启动Selenium测试服务器。 5.运行测试案例 (1).运行测试案例: (2).测试结果: 恩,案例Pass了,如果案例失败的话,Error Meesage会说明失败的原因。 (注意:和Firefox一样,IE下也有屏蔽弹出网页功能,修改设置方法:MenuBar- Tools- Popup Blocker- Turn off Popup Blocker,或者在Popup Blocker Settings里面配置。) ...

阅读全文 »

Selenium私房菜系列4 -- Selenium IDE的使用

前面说过,Selenium IDE是Firefox的一个插件,是可以进行脚本录制以及案例转换,所以Selenium IDE+Firebug会成为你日后写测试案例的两大助手(IE下可以使用Selenium Core+IEDevelperToolBar)。 Selenium IDE下载: http://seleniumhq.org/download/ Firebug下载: https://addons.mozilla.org/firefox/addon/1843 下面将演示Selenium的使用 : 1.安装Selenium IDE,Firebug。 2.启动Selenium IDE: IDE启动后,弹出如下对话框: 上图标明了一些Selenium IDE的主要功能。其中,由Command,Target,Value组成的表格就是脚本,每个脚本都是由一条一条的Action(行为)组成,而每个Action又由(Command,Target,Value)三者组成。Command就是上文 《API参考手册》 提到的内容,Target指的是Web中的某个对象,比如:文字,输入框等等,如果选取对象呢?呵呵,这里就用到了XPath,不熟悉可以参考 《XPath的使用》 ,而Value就是这个对象的值。 3.脚本的录制及运行 当弹出上面的IDE窗口后,我们就可以开始Selenium的脚本录制了,右上角有个红色的圆点,当它下按时(如上图)就表示IDE正在进行脚本录制。OK,开始录制,录制的时候,直接操作Firefox浏览器窗口就可以了,IDE会自动记录你的操作的,下面我演示一个例子: 上图例子中,我的操作步骤如下: (1).在地址栏输入: http://www.baidu.com/ (2).登陆百度首页后,在查询框输入 hyddd 。 (3).按 百度一下 按钮 (4).进入搜索结果页面后,右键单击第一条记录(即:hyddd - 博客园),在右键弹出菜单中,单击 Verify TestPersent hyddd - 博客园 。 (5).单击第一条记录(即:进入hyddd - 博客园) (6).Firefox弹出一个新Tab页面,并进入了我的博客。 OK,现在看看我们的Selenium IDE录制的结果吧: 上图中,中间的表格就是录制的结果,你可以按 运行脚本 重新回放脚本看看,值得注意的是,在运行时,Firefox可能会认为脚本中最后一个操作(即:步骤6)为非法弹出框,浏览器会自动阻止其弹出,这个需要设置一下Firefox,具体位置是:Firefox- Menubar- Tools- options- content- Block pop-up Window,你可以把钩去掉或者在Exceptions里面添加相应的网址。 恩,到此为止,脚本录制圆满完成: 在运行脚本后,你会发现IDE表格的颜色发生了变化,运行前,脚本表格为白色,成功运行完毕后,表格为青色,其中还分为深青色和浅青色两种,浅青色表示:动作成功,如:打开网页成功,点击按钮成功等等,而深青色表示:判断正确,如: hyddd - 博客园 这段文字在页面中存在等等。 看完正确,现在我们看看出错时的情况吧。 出错时,表格可能会出现两种颜色,一种是浅粉红色,一种是深粉红色。浅粉红色表示判断结果为false,这种情况案例还是会继续执行下去,判断的失败不会影响案例的运行,深粉红色表示动作失败,如:没有找到按钮等(如上图),这种情况下案例会停止运行。 4.Selenium IDE其他的重要功能 本文开始时提到了,Selenium IDE还有一个重要的功能就是把脚本的转换,一起看看吧: Selenium IDE可以把HTML的脚本转为C#,JAVA等等其他语言的脚本,为我们日后写Selenium RC的测试案例提供了极大的方便。 ...

阅读全文 »

Selenium私房菜系列 -- XPath的使用

在编写Selenium案例时,少不免是要用到XPath的,现在外面关于XPath使用的参考资料很多,下面我直接转一篇关于XPath使用的文档。如果对XPath不熟悉请参考下文,你不需要去百度/Google搜索关于XPath的资料,因为下面的内容已经足够你写测试时使用,如果你已熟悉XPath,本章大可忽略跳过。 xpath的语法 ( 转载自 : http://www.cnblogs.com/jianjialin/archive/2009/02/01/1382056.html XPath 是XML的查询语言,和SQL的角色很类似。以下面XML为例,介绍XPath 的语法。 ? xml version= 1.0 encoding= ISO-8859-1 ? catalog cd country = USA title Empire Burlesque / title artist Bob Dylan / artist price 10.90 / price / cd cd country = UK title Hide your heart / title artist Bonnie Tyler / artist price 9.90 / price / cd cd country = USA title Greatest Hits / title artist Dolly Parton / artist price 9.90 / price / cd / catalog / catalog 定位节点 XML是树状结构,类似档案系统内数据夹的结构,XPath也类似档案系统的路径命名方式。不过XPath 是一种模式(Pattern),可以选出 XML档案中,路径符合某个模式的所有节点出来。例如要选catalog底下的cd中所有price元素可以用: /catalog/cd/price 如果XPath的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。以下的语法会选出文件中所有叫做cd的元素(在树中的任何层级都会被选出来): //cd 选择未知的元素 使用星号(Wildcards,*)可以选择未知的元素。下面这个语法会选出/catalog/cd 的所有子元素: /catalog/cd/* 以下的语法会选出所有catalog的子元素中,包含有price作为子元素的元素。 /catalog/*/price 以下的语法会选出有两层父节点,叫做price的所有元素。 /*/*/price 以下的语法会选择出文件中的所有元素。 //* 要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。 选择分支 使用中括号可以选择分支。以下的语法从catalog的子元素中取出第一个叫做cd的元素。XPath的定义中没有第0元素这种东西。 /catalog/cd[1] 以下语法选择catalog中的最后一个cd元素:(XPathj并没有定义 first() 这种函式喔,用上例的 [1]就可以取出第一个元素。 /catalog/cd[last()] 以下语法选出含有price子元素的所有/catalog/cd元素。 /catalog/cd[price] 以下语法选出price元素的值等于10.90的所有/catalog/cd元素 /catalog/cd[price=10.90] 以下语法选出price元素的值等于10.90的所有/catalog/cd元素 的price元素 /catalog/cd[price=10.90]/price 选择一个以上的路径 使用Or操作数(|)就可以选择一个以上的路径。例如: /catalog/cd/title | catalog/cd/artist 选择所有title以及artist元素 //title | //artist 选择所有title以及artist以及price元素 //title | //artist | //price 选择属性 在XPath中,除了选择元素以外,也可以选择属性。属性都是以@开头。例如选择文件中所有叫做country的属性。 //@country 选择所有含有country这个属性的cd元素: //cd[@country] 以下语法选择出含有属性的所有cd元素 //cd[@*] 以下语法选择出country属性值为UK的cd元 //cd[@country='UK'] 选择多个属性 //cd[@country='UK'][@name='hyddd'] ...

阅读全文 »

Selenium私房菜系列 -- Selenium简介

一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案例(效果类似数据驱动测试),它是Selenium IDE和Selenium RC的引擎。 2.Selenium IDE:FireFox的一个插件,支持脚本录制。 3.Selenium RC:Selenium Remote Control。后续的系列文章我会主要针对Selenium RC展开介绍。 4.Selenium Grid:允许同时并行地、在不同的环境上运行多个测试任务,极大地加快Web应用的功能测试。 二.选择合适的Selenium工具 既然Selenium工具有4款这么多,那到底如何选择呢??我从 Selenium官网 这里找了一个表: Selenium IDE Selenium Remote Control Selenium Core Selenium Core HTA 浏览器支持 仅Firefox 很多 所有 仅IE 需要远程安装 否 否 是 否 支持 HTTPS/SSL 是 是* 是 是 支持跨域 是 是* 否 是 需要Java 否 是 否 否 将测试结果保存到磁盘 是 是 否 是 多语言支持 仅Selenese 很多 仅Selenese 仅Selenese 这里没有介绍Selenium Grid,但介绍了另外一个Selenium Core HTA,Selenium Core HTA其实是Selenium Core的额外模式,你只要Selenium Core配置稍加修改,即为HTA模式,Selenium Core HTA可以在IE最高安全等级(特权)下工作,这意味着它仅能在IE下工作,由于限制较大,下面将排除对Selenium Core HTA的讨论。 1.浏览器支持 : (1).Selenium IDE仅可以在Firefox中工作。 (2).Selenium Remote Control支持很多浏览器,包括最常用的:firefox,ie,safari等N款浏览器。 (3).Selenium Core支持的浏览器是最广的,这点和它的实现有关。作为IDE和RC的引擎,Selenium Core几乎可以在任何浏览器中工作。 2.需要远程安装 :是否需要在被测网站的服务端安装? 这里只有Selenium Core需要,这是出于同源策略的原因。这也是Selenium Core一个很大的限制,试问,如果你要测试Google.com,还得在google的服务器上装一个Selenium Core,那是多搞笑的一件事。 而Selenium IDE和Selenium Core HTA不会被同源策略所限制,因为他们对浏览器扩展了。 Selenium RC提供一个代码服务器来保证Selenium JS文件看似来自相同的远程服务器,从而符合同源策略;代理服务器欺骗浏览器,让它认为这里的确有像 http://www.google.com/selenium/ 这样的目录。 3.支持HTTPS/SSL : 这里不说了,都支持。Selenium RC在 是 后面加*因为它是在最近版本支持的,仅此而已。 4.需要Java :准确的说是需要JRE 这项只有Selenium RC需要,上面2中所说的 代理服务器 是一个Java程序,需在跑测试案例前启动。 5.将测试结果保存到磁盘 只有Selenium Core不能将任何测试结果写到磁盘上(因为它是用javascript写的,它不允许向磁盘写数据),其解决方案是当然你可以将测试结果发送到另外一台服务器保存。这也是Selenium Core的一大限制。 6.多语言支持 (1).Selenium IDE仅支持Selenium语言。 (2).Selenium RC支持很多语言,如:C#,Java,Python,Ruby等。 (3).Selenium Core也是仅支持Selenium语言。 Selenium语言的测试案例如下: 它的优点是:简单,用(Command,Target,Value)三种元素组成一个行为,并且有辅助录制脚本工具(如:Firefox IDE,Selenium Core等),不懂程序的测试人员都可以轻松地编写测试案例。 它的缺点是:Selenese有一些严格的限制:它没有条件(没有 if 表达式),并且它没有循环(没有 For 表达式)。这会使编写复杂的测试变得困难甚至不可能。 OK,现在我们来研究下到底该使用哪款工具开展测试! (1).Selenium IDE支持并且只支持Firefox浏览器,支持的浏览器太少,而依附于Firefox也不便于日后开展自动化测试,但是,它的录制快捷好用!并且有代码转换功能,可以把Selenium语言测试案例转为C#,Java等语言的测试案例,我建议使用Selenium IDE + FireBug进行测试案例的编写,然后转为其他语言的测试案例后,再调用Selenium RC运行测试案例。 (2).Selenium Core,它的优点是编写测试案例简单,并且支持绝大多数的浏览器,但缺点也同样明显,Selenium Core需要远程安装,Selenese语言也限制了复杂案例的可能性,并且没有良好的外部扩展,这是些都会是致命的问题。因为一个款测试工具不可能100%满足你测试需求的,当它不能满足你测试需求时候,它必须有一个扩展机制可以让你可以使用其他的方式满足你需求,否则这款测试软件即使功能强大,也请三思慎用,否则当投入大量资源后才发现某些问题不能解决,那时候已经晚了,这是我的切身体会。 (3).Selenium RC是我推荐使用的工具,它支持很多浏览器,可以使用C#,Java等语言编写测试案例,易于维护,同时提供了很好的扩展性,所以后续的文档我会以Selenium RC作为默认的测试工具。 ...

阅读全文 »

Selenium私房菜系列--前言

前言 在这段期间,我一直在找关于服务器的端测试方案,自动化工具等等,无意间我发现了Selenium 这个工具。在试用一段时间后,觉得 Selenium 确实是一个很不错的 Web 测试工具。在和强大的 QTP 比较后,我最后还是选择了使用 Selenium ,主要的原因 是工具使用灵活,简单,并且完全满足我的要求 。而QTP 虽然强大,但它的使用让我觉得非常繁琐,而调试功能也让我郁闷 ...... 鉴于种种这样的原因,我最后选择了 Selenium 。 本系列文章主要是总结我在前一段时间了解到的关于Selenium 的一些知识。 QTP VS Selenium 下面我想先稍微讨论一下这两个工具, 我主要从功能和文档资料这两方面对比QTP 和 Selenium 。 功能 从Web 测试的角度,两个工具都能满足正常的测试需求,这个你无需怀疑!但 QTP 更强大些,因为: 1. 它是商业软件,只要你有钱,什么都可以有。 2. 它支持对操作Windows 窗口,当你要从 Web 上下载一些东西,自然此时就会弹出一个 下载框 ,由于那个框框是 Windows 窗口, Selenium 是处理不了的,所以必须通过第三方的脚本处理。 文档和参考资料资料 如果你这方面的新手,当你用QTP/Selenium 时,相信书和文档是你第一样会找的东西。在这样面, QTP 使用在中国使用还是蛮广泛的,资料和书籍也相当丰富,而 Selenium 的资料就相对比较少一些,找资料最好的地方就是官方论坛。 为什么用Selenium 既然上面两项都是QTP 优胜一些,为什么我们还是用 Selenium ,因为: 1. Selenium 使用灵活,简单,写出的测试案例非常简洁,优美,也易于维护。 2. Selenium RC 支持用多种语言编写测试案例,你可以用 VS2008 写测试案例了 : 。 3. 如果你有一个测试平台,你会发现把QTP 整合到平台是很麻烦的事情。 4. ...... 如果以上Selenium 的优点不能打动你,又或者你是测试新手,对测试经验不多,对编程也不熟悉,那么你还是继续使用 QTP 吧,不过相信有一天,你会开始尝试 Selenium 的。 Selenium 名字的来源 在这里,我还想说一下关于Selenium 名字的来源,很有意思的 : : Selenium 的中文名为 硒 ,是一种化学元素的名字,它 对 汞 (Mercury )有天然的解毒作用,实验表明汞暴露水平越高,硒对汞毒性的拮抗作用越明显,所以说硒是汞的克星。大家应该知道 Mercury 测试工具系 列吧( QTP , QC , LR , WR... ),他们功能强大,但却价格不菲,大家对此又爱又恨!故 thoughtworks 特意把他们的 Web 开源测试工具命 名为 Selenium ,以此帮助大家脱离汞毒。 ...

阅读全文 »