在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前几天做了一个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,自己在网上下载的 c: cd C:\Program Files\Tesseract-OCR tesseract.exe c:\CheckImg.jpg c:\CheckCode -l 3、ruby脚本,脚本步骤如下: b、调用C盘下的批处理文件; c、获取txt中的验证码; 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) 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
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论