Ruby+watir自动化测试中实现识别验证码图片

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

    我们使用的自动化框架是基于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 Files\Tesseract-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个

def CheckCode_ok(gifurl,CheckCode)
#获取验证码图片
require 'net/http'
#Net::HTTP.start(url) do |http|
#resp = http.get(gifurl)
resp = Net::HTTP.get_response(URI(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

 调用:

def xxx_www_login(user,pwd)
LoadObject("../../testcase/xxx/xxx.yaml")
times = 0
loop do
times += 1
code = CheckCode_ok("http://xxx.xxxx.com/CheckImg.aspx/CheckImg.gif",code)
puts code
sleep 10 #获取最新的验证码以后,加个sleep等待时间,貌似IE需要时间缓存最新的验证码code,否则@b对象获取不到最新的验证码code而登陆失败
if @b.text.include?(ExpectData("expect1")) == true #是否存在“商家登录”
 xxx_login(user,pwd,code)
elsif @b.text.include?(ExpectData("expect2")) == true #是否存在“退出”
 xxx_www_logout
xxx_login(user,pwd,code)
end
break if times >= 5 or @b.text.include?(ExpectData("expect2")) == true #是否存在“退出”
 end #loop end 
end

 

相关函数说明:http://www.uudama.com/process.html 源码页面:http://dll.uuwise.com/index.php?n=ApiDoc.Anjian 按键精灵插件: 新插件[2013.7.13]下载地址:http://com.uuwise.com/index.php?n=ApiDoc.DLLdownLoad <---推荐使用 经过不段改进程序源代码,最终实现了原生COM组件放到按键精灵目录下面就可以使用了,函数调用方法参考COM版函数说明,示例语句在下面 注:不需要regsvr32注册 旧插件: [2013.7.2]---按键精灵插件完全版--基于动态连接库版 [2013.7.2]---按键精灵插件精减版,仅【登录,上传图片,取结果,报错】四个函数--基于动态连接库版 调用示例语句: softID = 2116 //软件ID 软件和KEY在开发者后台获取 softKEY = "2000adff4e5c4c448f45944c643b2b10" //软件key userName = "优优用户帐户" //用户的用户名,非开发者帐号 passWord = "优优用户密码" //密码 zhuce = Plugin.UU.SetSoftInfo(softID, softKEY) //初始化软件(必须) login = Plugin.UU.Login(userName, passWord) //登录优优,仅需要调用一次(必须) If login > 0 Then getUserScore=Plugin.UU.getScore(userName,passWord) //查询用户当前积分(可选) MessageBox "登录成功,您的用户ID为:" & login & ",您的剩余题分为:" & getUserScore yzmID = Plugin.UU.upLoadFile("c:\1.jpg", 1) //调用识别函数,根据路径上传,参数的1为图片类型ID(表示需要识别图片为四位英文或数字) //yzmID = Plugin.UU.recognizeScreenByCodeType(7,165,25,15,1,0) //截图并上传函数 //请参考:http://dll.uuwise.com/index.php?n=ApiDoc.Price If yzmID > 0 Then MessageBox "已将您的图片上传至优优,请耐心等待识别结果!" yzm=Plugin.UU.getResult(yzmID) //根据验证码ID获取识别结果 MessageBox "图片识别结果为:" & yzm & "该图片在服务器上的ID为:" & yzmID /* //如果图片识别不正确,调用 !如何判断识别不正确?用户登录网站的时候, //如果验证码识别不正确,网页会有相关提示,其它应用应该差不多。 //注意:恶意报错(打正确也报),会同时冻结您的开发者帐户及用户帐户。 reportStatus = Plugin.UU.reportError(yzmID) If reportStatus=0 Then MessageBox "恭喜您报错成功,题分已返还至您的用户帐户!" End If */ Else MessageBox "上传图片出现错误,错误代码为:" &yzmID //错误代码请参考:http://dll.uuwise.com上各对应函数 End If Else MessageBox "对不起,登录失败,错误代码为:" &login //错误代码请参考:http://dll.uuwise.com上各对应函数 End If
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值