您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Watir
Ruby+watir自动化测试中实现识别验证码图片
作者:网络转载 发布时间:[ 2013/3/22 10:54:28 ] 推荐标签:

   前几天做了一个loadrunner结合tesseract-ocr来识别验证码,尽管识别精度不是太高,甚至有些验证码图片不能被识别,但是使用循环的方法也是可以得到正确的验证码的。性能测试中不建议使用这个方法,因为涉及到大并发压力的情况。但是在功能自动化测试中我是赞成使用的,功能自动化不像性能自动化那样对同一个操作(登录)有大并发的出现。

  我们使用的自动化框架是基于ruby+watir搭建的一套UI框架,通过识别UI中的对象来进行功能自动化测试,来达到检测系统功能健康状况。

  ruby中也有处理图片的gem包,比如:rmagick、tesseract-ocr、rtesseract,以及ImageMagick-6.5.6-8-Q8-windows-dll.exe(需要安装),我用的是ruby1.9.2平台的版本,本人不才,配置了很久还是调试不出来,require "rtesseract"里面的方法都对不上,貌似和ruby的版本有关系,后放弃这个方法,使用下面的方法来实现的,也不用install任何gem包,反而觉得更简单啦。

  1、安装tesseract-ocr-setup-3.02.02.exe,自己在网上下载的

  2、配置一个批处理文件放到C盘的根目录下,需要ruby调用这个批处理来执行tesseract.exe

  批处理内容:

  ?
c:
cd C:Program FilesTesseract-OCR
tesseract.exe c:CheckImg.jpg c:CheckCode -l

  3、ruby脚本,脚本步骤如下:

  a、首先获取验证码的图片;

  b、调用C盘下的批处理文件;

  c、获取txt中的验证码;

  4、把这段脚本做成一个def,登录的测试用例去调用这个def,返回一个CheckCode
复制代码

  def CheckCode_ok(url,gifurl,CheckCode)

  #获取验证码图片

  require 'net/http'

  Net::HTTP.start(url) do |http|

  resp = http.get(gifurl)

  File.open("C:\CheckImg.jpg", "wb") do |file|

  file.write(resp.body)

  file.close

  end

  end

  #执行批处理文件

  system("c:\CheckBat.bat")

  #获取txt中的验证码

  if File.exists?("c:\CheckCode.txt") ==true

  File.open("c:\CheckCode.txt","r") do |line|

  CheckCode=line.readline

  line.close

  end

  end

  puts CheckCode

  return CheckCode

  end
复制代码

  方法如下:

  CheckCode(url,gifurl,CheckCode)

  url:即存在验证码图片的url,如:https://memberprod.alipay.com/account/reg/index.htm

  gifurl:即验证码图片的url,如:https://omeo.alipay.com/service/checkcode?sessionID=fb70db3212e3c44bb5e909b51841adb5&r=0.48708463088160914

  CheckCode:ruturn这个验证码供返回

  优化了一下脚本:把方法中的传参数精简到2个

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd