发布新日志

  • selenium + ant 应用

    2009-02-12 23:38:30

        selenium ThoughtWorks专门为Web应用开发的自动化测试工具,适合用于功能测试与验收测试.也是近年来较为流行的开源测试工具.selenium这一强大的Web测试工具主要由selenium IDE, selenium core, selenium Remote Control 及selenium Grid组成. 其中selenium RC 应用较为广泛亦算是功能最为强大的一个,通常它会与其它工具结合起来使用以更好地发挥其强大功能.现介绍构建工具Ant与selenium结合用于测试java应用项目.Ant+selenium可以构建测试build,然后部署到相应的测试环境中,再编译执行生成测试报告,最后通过邮件发送测试报告.
        对selenium 和ant 有所了解的同行应该看得出这个应用主要是使用Ant来构建版本,然后部署到测试环境中去,再然后执行测试脚本到生成发送测试报告.即是使用Ant这个强大的构建部署工具帮我们做那些外围的工作,使测试跟开发完美结合,让selenium 自动化测试应用完全自动化.所以这个应用主要是Ant的应用.
        介绍下我当时使用情况.当时一个项目中使用selenium RC来做自动化测试,主要是冒烟测试跟回归测试.我们测试所用的build是在香港开发部门每天使用Bamboo持续构建的,所以我们必须用Ant通过网络从上面拿相应的build下来,修改相应的配置文件,然后部署到相应的测试环境中去. 部署好测试系统后,我们就可以通过Ant编译运行我们的测试脚本(用java写的selenium RC 脚本).运行完成后用Ant自带的方法来生成测试报告,最后还是能过Ant以邮件发送报告.所以,我们只需要用鼠标点一下,甚至不用点而用其它工具每天自动执行.
       当然这也并不是什么很高明的应用,但借助Ant强大功能,使用selenium自动化测试做得更为彻底,将测试各个步骤很好地连接起来,当然带来更高效率.这个应用主要就是Ant的使用,难点也在Ant的使用,因为其中涉及到不少的Ant tasks.不过它官网上都有详细的使用介绍:http://ant.apache.org/manual/index.html. 现贴出我之前使用的ant build 文件,有兴趣的同行可以参考下.

    <?xml version="1.0"?>
    <project name="camp-testuff" default="main">
     <!-- properies -->
     <property file="./resources/build.properties" />

     <!-- 定义classpath -->
     <path id="master-classpath">
      <fileset file="${lib.dir}/*.jar"/>
      <pathelement path="${classes.dir}" />
      <pathelement path="${resources.dir}" />
      <pathelement path="${src.dir}" />
     </path>

     <!-- 初始化任务 -->
     <target name="init">
      <java jar="${selenimhome}/selenium-server.jar" fork="true" spawn="true" />
     </target>

     <!--下载更新build-->
     <target name="download" if="isdowload">
      <get src="${targeturl}" dest="${filePath.dir}/${filename}" verbose="true" usetimestamp="true" />
     </target>


     <!--更新编绎war文件-->
     <target name="war" depends="download">
      <unwar src="${filePath.dir}/${filename}" dest="${filePath.dir}/project" />
      <propertyfile file="${filePath.dir}/project/WEB-INF/classes/jdbc.properties" comment="My properties">
       <entry key="jdbc.url" value="${jdbc.url}" />
       <entry key="jdbc.username" value="${jdbc.username}" />
       <entry key="jdbc.password" value="${jdbc.password}" />
      </propertyfile>
     
      <propertyfile file="${filePath.dir}/project/WEB-INF/classes/systemConfiguration.properties" comment="My properties">
       <entry key="mail.host" value="${mail.host}" />
      </propertyfile>

      <war destfile="${filePath.dir}/${projectfile}" needxmlfile="false">
       <fileset dir="${filePath.dir}/project" includes="**/*.*" />
      </war>
     </target>

     <!-- 部署项目 -->
     <target name="deploy">
      <mkdir dir="${tomcatlog.dir}" />
      <mkdir dir="${tomcatconfig.dir}" />
      <taskdef resource="cargo.tasks">
       <classpath>
        <pathelement location="${cargo-uberjar}" />
        <pathelement location="${cargo-antjar}" />
       </classpath>
      </taskdef>

      <cargo containerId="tomcat5x" home="D:\tomcat" ōutput="${tomcatlog.dir}/output.log" log="${tomcatlog.dir}/cargo.log" action="start" failonerror="false" wait="false">
       <configuration home="${tomcatconfig.dir}">
        <property name="cargo.servlet.port" value="8080" />
        <property name="cargo.logging" value="high" />
        <property name="cargo.jvmargs" value="-Xmx500m"/>
        <deployable type="war" file="${filePath.dir}/${projectfile}" />
       </configuration>
      </cargo>
     </target>

     <!-- 编译脚本-->
     <target name="compile"  descrīption="compile the source files">
      <mkdir dir="${classes.dir}" />
      <javac srcdir="${src.dir}" failonerror="false" destdir="${classes.dir}">
       <include name="**/*.*" />
       <exclude name="**/*ViewCustomerTest.*" />
       <exclude name="**/*SubmittingMaintenanceApplicationTest.*" />
       <exclude name="**/*SubmittingMaintenanceApplicationTest.*" />
       <exclude name="**/*AddMaintenance.*" />
       <exclude name="**/*EditMaintenance.*" />
       <classpath refid="master-classpath" />
      </javac>
     </target>

     <!-- 测试 Junit脚本-->
     <target name="test" descrīption="run junit test">
      <tstamp>
       <format property="stratTime" pattern="MM/dd/yyyy  HH:mm:ss" />
      </tstamp>
      <mkdir dir="${report.dir}" />
      <junit printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
       <classpath refid="master-classpath" />
       <formatter type="xml" />

       <batchtest todir="${report.dir}">
        <fileset dir="${src.dir}">
         <include name="${testname}" />
         <exclude name="**/*ViewCustomerTest.*"/>
         <exclude name="**/*SubmittingMaintenanceApplicationTest.*"/>
         <exclude name="**/*SubmittingMaintenanceApplicationTest.*"/>
         <exclude name="**/*AddMaintenance.*"/>
         <exclude name="**/*EditMaintenance.*"/>

        </fileset>
       </batchtest>
      </junit>
     </target>

      <!-- 生成报告 -->
     <target name="junitreport" depends="test">
      <mkdir dir="${report.dir}/html" />
      <junitreport todir="${report.dir}">
       <fileset dir="${report.dir}" includes="TEST-*.xml" />
       <report format="frames" todir="${report.dir}/html" />
      </junitreport>
     </target>

     <!-- 发送测试结果 -->
     <target name="SendEmail" depends="junitreport">
      <tstamp>
       <format property="endTime" pattern="MM/dd/yyyy HH:mm:ss " />
       <format property="endTime2" pattern="MM/dd/yyyy " />
       <format property="endTime3" pattern="yyyyMMddHHmmss " />
      </tstamp>
      <zip destfile="${report.dir}/html/Report.zip">
       <zipfileset dir="${report.dir}/html" includes="**/*.*" />
      </zip>
      <mail mailhost="${host}" messagemimetype="${messagetype}"
       mailport="${mailport}" subject="Test Report_${endTime3}"
       user="${user}" password="${password}" messagefile="${messagefile}"
       tolist="${tolist}" cclist="${cclist}">
       <from name="${fromname}" address="${fromaddress}" />
       <attachments>
        <fileset dir="${report.dir}/html">
         <include name="*Report.zip" />
        </fileset>
       </attachments>
      </mail>
     </target>

     <!-- 清除生成文件(报告) -->
     <target name="clean">
      <delete dir="${tomcatconfig.dir}" />
      <delete dir="${report.dir}" />
      <delete dir="${classes.dir}" />
      <delete file="${filePath.dir}/project.war" />
      <delete dir="${filePath.dir}/project" />
      <sql driver="org.gjt.mm.mysql.Driver"
          url="jdbc:mysql://${jdbc.urlAndPort}"
          userid="${jdbc.username}"
          password="${jdbc.password}"
          >
       drop schema ${jdbc.schema};
       <classpath location="${lib.dir}/mysql-connector-java-5.0.5.jar"/>
      </sql>
     </target>

     <!-- 测试完成关闭计算机 -->
     <target name="shutDown">
      <sleep minutes="2" />
      <exec executable="shutdown">
       <arg value="-s" />
      </exec>
     </target>

     <!-- Stop tomcat -->
     <target name="stoptomcat">
      <taskdef resource="cargo.tasks">
       <classpath>
        <pathelement location="${cargo-uberjar}" />
        <pathelement location="${cargo-antjar}" />
       </classpath>
      </taskdef>

      <cargo containerId="tomcat5x" home="D:\tomcat" action="stop">
       <configuration home="${tomcatconfig.dir}"/>
      </cargo>
     </target>

     <!-- 主要目标 -->
     <target name="main">
      <!-- 清理并初始化环境 -->
      <antcall target="clean" />
      <antcall target="init" />
      <!-- 部署项目 -->
      <antcall target="war" />
      <antcall target="deploy" />
      <!-- 编译脚本 -->
      <antcall target="compile" />
      <!-- 测试并发送报告 -->
      <antcall target="SendEmail" />
      <antcall target="stoptomcat" />
      <antcall target="shutDown" />
     </target>

    </project>

     

  • Selenium学习三-selenium RC简介

    2008-11-05 21:43:02

    Selenium RC 就是使用程式语言编写脚本,通过Selenium RC服务器作为代理服务器去访问应用从而达到测试的目的.由于Selenium RC不再需要依附Firefox,所以其可以在其它更多的浏览器上进行测试,而这也是我们做WEB测试的一个比较重要的问题(解决了因为担心浏览器兼容问题而重要做测试的问题). RC的脚本由于是程序语言编写,所以更为灵活强大.并且它支持的语言极为丰富.所以RC是Selenium测试工具中的应用最广的.同时,它对测试人员编程水平要求也较高.下面将简介Selenium RC.
        Selenium RC使用包括两部分,一是服务器,一是脚本.服务器则下载后即可使用,记得开始跑脚本时把服务器打开.它是一个已经打包好的JAVA程序,运行 java -jar selenium-server.jar即可.要使用 selenium-rc ,启动这个server 是必须的。当然,启动的时候有一些参数,可以到其官方网站上参考.不过做一般的测试,不需要要额外的参数已经足够.
        另一部分是脚本,就是我们要编写的了.它可以使用多种语言编写,如C#,ruby,java等,在这里我采用java.它可以在多个测试框架上应用,如junit/nunit, testng等,这里采用junit.在整个测试框架中,Selenium提供了封装好的selenium 接口与类,如果使用junit它还提供了封装好的测试类.下面将按步骤以一个简单的例子介绍基于junit3.0的测试框架用java语言在Ecplise平台上编写并运行脚本.
       1>编写测试脚本.首先建立一个java project,记得要把junit3.0的包与selenium java(即是selenium-java-client-driver.jar) 包放到project中.然后建立一个类直接继承封装好的selenium测试类.脚本如下:
    package com.xpg.study;

    import com.thoughtworks.selenium.*;

    // 继承测试类
    public class DefaultTestCase extends SeleneseTestCase {
    //实例化Selenium 类
    Selenium selenium;
    //覆盖setUp方法
    public void setUp() throws Exception{
    //实例化DefaultSelenium类,其它命令均是它的方法
    selenium=new DefaultSelenium("localhost",4444,"*iexplore","http://www.baidu.com");
    //启动selenium 创建一个新的session
    selenium.start();
    }
    //覆盖teardown方法(在这里没有特别的设置)
    public void tearDown()throws Exception{
    selenium.stop();
    }
    //建立一个测试方法,里面是命令的集合了..
    public void testBaidu()throws Exception{
    // DefaultTestCase test=new DefaultTestCase();
    //注意这里的selenium即是类中的已经启动的selenium,命令都是它的方法
    selenium.open("http://www.baidu.com");
    selenium.waitForPageToLoad("6000");
    selenium.type("kw", "selenium");
    selenium.click("sb");
    Thread.sleep(3000);
    assertTrue(selenium.isTextPresent("相关搜索"));
    }
    }

        以上则是一个简单的用来测试百度网站的例子.当然一般情况下我们会将junit testCase放在专门的测试类中,这个测试类则直接继承SeleneseTestCase类,以更好的组织脚本也可达到重用的目的.
        编写好脚本当然是试运行下了.首先得开户Selenium 服务器,用命令java -jar selenium-server.jar -multiWindow 即可打开. 这里加了个参数-multiWindow是为了在运行时应用运行的浏览器与Selenium 服务的浏览器分开. 打开服务器后即可运行脚本了. 最后脚本不出意外的话应该是Passed.
        以上只是非常简单的一个selenium RC就用于测试的例子.要将selenium RC 很好地应用于测试则需要花点时间熟悉,研究下....

  • Selenium学习二---selenium IDE介绍

    2008-10-31 00:03:50

        Selenium IDE 是selenium测试工具中的其中一个,是一个基于FireFox的Web测试开发环境,可以录制、编辑和调试测试。Selenium IDE包含了Selenium Core,因此可以轻易地在浏览器中录制和回放测试。
      Selenium IDE不仅仅是一个测试录制工具,而是一个IDE,可以录制测试,也可以手工编辑测试,可设置断点进行调试,可把测试保存到HTML、Ruby、C#、Java等其他脚本格式,然后使用Selenium RC来实现并运行更加灵活和强大的测试。
       Selenium IDE是一个firfox插件,录制相当方便,而且效果不错,很多录制后不需要修改即可回放.编辑也相当简单,一行就是一个完整的命令.十分适合于编程基础较薄的测试人员使用.但是由于所用的语言是selenese即是类html脚本语言而非程式语言,于组织脚本不够灵活,所形成的功能不如selenium RC 强大,而且对脚本组织也不方便.更重要的是暂时只支持 firefox浏览器.所以一般情况下是以selenium IDE 来熟悉 selenium功具.然后利用IDE 来录制脚本作为selenium core的脚本文件或更多的是用IDE录制而保存为drive脚本即是程式语言脚本如java 脚本.但无论如何 selenium IDE是学习selenium的必修课,因为日后录制脚本需要它,即使用selenium rc也可用它录制部分脚本并可方便用于调试.下面将简单介绍Selenium IDE的整个使用过程.
        1> Selenium IDE 安装. 从其官方网站下载安装:http://selenium-ide.openqa.org/,跟普通frifox 插件安装没有什么两样(注意是firefox安装插件不是IE哦..).安装完成后,在浏览器"工具"菜单栏即可见Selenium IDE 工具.
        2>Selenium IDE录制脚本.安装完成后当然是开始录制脚本了.打开IDE工具后,类似一个小浏览器(此时默认是录制状态),在Base URL 中输入你要录制的网站网址如www.google.com.然后在Firefox 中打开google 网站,输入"Selenium ide",再点击搜索.然后点击IDE工具的停止录制按钮停止录制.此时你会发现在"Table"中有了一些命令行,每一有三个部分组成.   command:命令如单击click, Target:目标即是命令的对象如单击按钮(用xpath或是其它定位方法表示),Value即是值如向输入框输入东西即在这里设置.而在"Sourse"中可看到类似html 的脚本,保存后就这样了,呵呵.
        3> Selenium IDE编辑脚本.你可以在Table中修改,点击相应命令行,所在行内部便会出现在下方,即可方便修改,如选择相应的command.当然你也可以在Sourece中修改,但人必须对 Selenium命令很熟悉. 现在修改下刚才录制的脚本,将第二行命令的value 修改为Selenium.
        4>Selenium IDE脚本运行. 修改完后即可点击运行按钮运行.运行刚才修改过的脚本,你会发现其迅速打开google浏览器并输入"Selenium"并点击进行搜索.此时运行结束.
        5>Selenium IDE脚本保存.保存时可保存为html脚本或是其它程式语言脚本,初步学习还是保存为html脚本吧.
        6>打开 seleniumIDE脚本并运行.这个就非常简单了....
        到此,Selenium IDE录制并修改运行整个过程完成了,你已经可以轻松方便使用selenium IDE进行录制运行脚本了.但是要运用到测试中去尚需要时间熟悉,如都有什么命令啊,如何进行定位啊,如何用assert来验证验证点啊,这也是selenium 测试主要学习的三点.如果这三占都搞明白了,熟悉了,恭喜你,你已经可以用selenium进行测试了.
        作为使用selenium IDE 工具并不复杂,而在于如何更熟悉它并用于测试中去.况且如前面提到只用Selenium IDE 进行测试局限性太高,所以建议借学习selenium IDE 了解并熟悉selenium工具,然后用其录制脚本并用 selenium 其它工具进行测试如selenium Core, selenium RC,selenium Grid.于本人使用经验而言,建议使用selenium RC.当然并不是说其它不好,其它有自己的优势或是功能也是RC不具备的.从学习与使用方面考虑是先学习 selenium IDE, 然后转向Selenium RC. 所以接下来将介绍Selenium RC.
  • Selenium 学习一

    2008-10-29 23:55:00

      selenium 是openQA的一个用于Web应用程序测试的不错的开源工具。它是通过javascrīpt来驱动测试的,真实在浏览器中运行测试,更接近用户的实际操作。它定位方式很灵活,可以直接用标签ID,link等,当然最为灵活并可靠的就是通过xpath 来定位,能过xpath几乎没有不可定位的元素。此外它支持各类主流浏览器IE,firefox,safari,而且是同一个脚本就可搞定,这是它较为厉害的一点。当然它也有自己的缺点:不能处理非javascrīpt 类弹出窗口,跨网站处理不容易等。总的来说selenium 是一个非常不错的web应该程序测试工具。
        selenium本身亦有几个测试框架,selenium IDE, selenium RC, selenium Grid, selenium Core. 但总的来说脚本只有两种即是通过程式语言编写的脚本及HTML脚本。其中较为常用的是selenium RC 及selenium IDE.  HTML 脚本编写较为简单易懂,但不够灵活,维护亦不那么容易,局限性较大,适合于非技术人员或是于编程不太熟悉者。而程式语言编写的脚本刚比较灵活强大,而且可以提供较多种类语言编写如java,c#,ruby等。所以建议有编程基础的同仁用selenium IDE 录制后保存为 程式语言脚本进行编辑维护。
        具体如何使用期selenium进行测试呢?下面将简单介绍selenium IDE 的使用并较为详细地与同仁们探讨selenium RC的使用。
        相关网站:http://selenium.openqa.org
Open Toolbar