如何为基于maven和ruby/jruby的项目进行兼容性测试

发表于:2012-11-22 10:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:宣兆鹏    来源:51Testing软件测试网

  现在做web前端和应用程序的功能测试,主要通过BDD的形势去实现。因此,最常用开源BDD测试框架就是Cucumber,而Cucumber是一种RUBY的开源框架,为了更好的快捷的实现ruby的特性,我在此基础之上,认为ruby和java的配合可以让测试更加的快捷,尤其是针对java项目。因此这里我用一个java的项目作为例子,和大家分享在测试过程中遇到的常见问题。

  问题:为什么是maven+java+jruby的项目

  因为本文特别针对java项目,但例如对于web项目,我们可以用同样的思路去进行尝试开发,而主要想强调的是,以前咱们在使用ruby开源框架做测试的时候,完全可以迁移到jruby下进行,例如常用的watir还有selinum都有jruby下得版本,bdd开源框架Cucumber同样有jruby版本,因此,客观的可以得出,我们可以将大部分的ruby项目迁移到jruby下,将我们自己的ruby框架打包成gem,因此更容易管理和维护。

  问题:如何在maven项目中进行兼容性测试

  作为一个自动化测试人员,我想这个问题大家一定以前遇到。在测试过程中,我们一直测试的某个package要进行变化,此处的问题就是现在所有的包要改名,以前所有的包的前缀是com.zhaopeng.example

  ,以前维护的版本号是1.0.11, 现在开发人员为了满足客户需求,将所有的包名前缀改为com.csdn.example,新发布的包的版本号为1.0.12,所有包打包发布后的格式为.jar。 老板本和新版本必须同时维护,因为还有一部分客户正在使用老板本。在测试中,我们需要进行功能测试,这就意味着测试中必须考虑到新-老两个版本,测试工具中必须可以识别出两个版本,才能正确的从指定的包中导入所需要的依赖函数。

  举个例子

  在测试框架中,我们有一个文件叫 menu.rb, 功能就是测试提供的.jar包中的涉及的menu的功能

<SPAN style="FONT-SIZE: 18px">module RobinTest
  class menu
     java_import com.zhaopeng.example.menu.*
     
     def test1
     end
  end
end</SPAN>

  因此,在原有框架中,我们导入了com.zhaopeng.example.menu.* 进行功能测试,现在我们不能将该引用写在测试框架里,因为一旦测试人员需要测试新版本,该测试框架就没有了用处,因此大部分朋友会想到如下代码

<SPAN style="FONT-SIZE: 18px">if $newVersion
    java_import com.csdn.example.menu.*
else
    java_import com.zhaopeng.example.menu.*
end</SPAN>

  我们利用一个全局变量去区分是使用新版本,还是老板本。问题油然而生,你如何自动的判断这个引入得包是新版本还是老板本呢? 因此,当我们自动加载开发人员的包的时候,我们就要在加载前判断这个包的版本号,有的时候两个版本的包可能都在自动加载的目录下,我们更要在加载前区分包得版本号,我们不能强制用户在每个包得后面加上版本号,因为使用该工具测试的人可能会比较多,又可能分布在世界各地,从测试开发人员的角度来讲,最好的方法是在原有测试人员的习惯之上,不要进行任何改动,即不改变测试人员的测试习惯,有些测试人员通过mvn下载包的过程中,可能省略了版本号,或者为了方便,进行重命名,所以不要奢望所有人都按同样的规矩命名一个测试的包。

  因此,我们现在要在加载包得之前,判断包的版本号。

  直接利用ruby是没办法读取jar包的,我看有些文章提到用,java里面的classloader,但是如果我们用这个函数,前提是我们得加载这个包,但在ruby里,我们一旦require了这个包,就没有办法un-require 一个jar包.因此,我们需要用jruby和java获取这个包的版本号

<SPAN style="FONT-SIZE: 18px">hash = Hash.new
jarPath = "D:\s.jar"
classPath = "META-INF/MANIFEST.MF"
entry = jarFile.getJarEntry(classPath);

input = jarFile.getInputStream(entry);
isr = InputStreamReader.new(input);
reader = BufferedReader.new(isr);
while ((line = reader.readLine()) != nil)
  if(line.split(":").length == 2)
    hash[line.split(":")[0].strip] = line.split(":")[1].strip
  end
end
reader.close();

hash.each do |key,value|
  puts key.to_s + "=>" + value.to_s
end</SPAN>

  ok 本文到此结束,我贴了所有代码,完全经过测试,请放心使用。

版权声明:51Testing软件测试网及内容提供者拥有本文全部版权,未经明确的书面许可,任何人或单位不得对本文进行复制、转载或镜像,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号