Jmeter—实现识别验证码登录

Jmeter—实现识别验证码登录

在做自动化测试或压力测试时,验证码总是一个问题。在以往的压力测试经历中,测试一般在独立的测试环境中进行,可以放心禁用验证码或使用万能验证码,这个是最实用的。但是,这两天我尝试了一个使用第三方的图形图像识别工具来完成验证码识别并通过Jmeter完成登录的过程,识别工具的识别成功率有限,因此本篇估计仅能在理论范围内适用。

本篇内容大部分内容来自于该作者的文章:http://blog.csdn.net/xreztento/article/details/48682923

总体目的:给Jmeter写一个后置处理器,用来将上一个请求响应返回的验证码图片识别成文字,并将识别内容保存为Jmeter的一个参数,这个参数供登录post请求进行登录验证,从而完成登录的自动化过程。

 

工具

 (1)第三方图形图像识别工具:tesseract-ocr  下载地址:http://code.google.com/p/tesseract-ocr/downloads/list  基本无法下载,已上传到我的百度网盘

 安装后,可以在cmd下试一试是否安装成功:

 在cmd下输入命令:tesseract d:\123.jpg result -l eng   意思是将D盘下的123.jpg 识别后放在result.txt下

 

 (2)需要用到的jar包:

 Jmeter插件开发相关的jar包: ApacheJmeter_core.jar jorphon.jar logkit-2.0.jar  这些在Jmeter的lib中都有 直接导入工程项目即可

 图形处理相关的jar包:jai-imageio-1.1.jar  swingx-1.6.1.jar  从网上下的,已上传到百度云盘 jar 文件夹下

插件开发

用java IDE新建一个工程项目,实现两个部分,一个是识别图片,一个是Jmeter插件的UI部分。工程项目完成目录为:

ImageIOHelper.java

OCR.java

TestOCR.java

VodeExtractor.java

VcodeExtractorGUI.java

 

插件生成

插件开发完成后,在Eclipse中 export-Runnable jar file ,将必要的依赖库加进去,最后会生成一个 .jar 文件

注意:图形相关的jar包  直接使用时会报错(Jmeter会报一个错:java.lang.IllegalArgumentException: vendorName == null) 最终在网上找到了解决方案

生成jar包后,用解压工具打开,将 /META-INF 目录下的 MANIFEST.MF 文件用编辑器(我用的是sublime)打开,拷贝进去下面一段代码,保存压缩包:

复制代码

Specification-Title: Java Advanced Imaging Image I/O Tools
Specification-Version: 1.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: com.sun.media.imageio
Implementation-Version: 1.1
Implementation-Vendor: Sun Microsystems, Inc.

复制代码

 

插件插入Jmeter

将 .jar 文件放入Jmeter 安装路径下 lib/ext/ 目录下,重启Jmeter

可以看到,我们新开发的后置处理器 VcodeExtractor 

再看下大致的登录过程测试计划:

 

登录的post请求参数中,可以使用Vcode,Vcode是我们开发的后置处理器 VcodeExtrator 返回的从图片验证码中识别出来的字符串

 

插件效果验证

把测试计划跑一次  根据察看结果树  看下效果

 

 

 

 

 

登录请求成功啦,但是图片识别也不是百分百成功,部分失败情况下,登录请求肯定会失败。Tesseract-OCR也有训练识别的功能,但是不再继续研究了。

 

关于Tesseract-OCR的延展性学习可参考:

(1)http://www.cnblogs.com/alex-blog/archive/2012/10/08/2714984.html

(2)http://blog.csdn.net/ycb1689/article/details/8520954

(3)http://www.52itstyle.com/thread-4803-1-1.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jmeter中跳过验证码登录的方法有很多种,下面介绍一种常用的方法。 首先,我们需要理解验证码的作用是为了防止机器自动登录系统,因此我们需要找到一个途径来绕过验证码。一种方法是通过模拟登录的方式,找到登录请求中与验证码相关的参数,并进行相应的处理。 1. 首先,使用jmeter录制脚本来模拟正常的登录流程。将验证码输入框标识为变量,并将其值保存到一个变量中。 2. 然后,在登录请求中找到与验证码相关的参数,在jmeter中使用正则表达式或其他方式提取验证码的值,并将其保存到一个变量中。 3. 接下来,需要判断是否需要输入验证码。可以通过使用正则表达式来检查页面返回的内容,判断是否存在验证码输入框。如果存在验证码输入框,则说明需要输入验证码;如果不存在,则说明不需要输入验证码。 4. 如果判断到需要输入验证码,可以通过以下两种方式进行处理: - 如果是被测系统中自己生成的验证码,可以通过编写代码来生成与系统一致的验证码,并将其值填充到对应的参数中。 - 如果是外部验证码(例如图形验证码验证码接口等),可以使用第三方工具或组件来处理,例如使用OCR识别图形验证码,并将其值填充到对应的参数中。 5. 最后,将填充好验证码的请求发送到服务器,并验证登录结果。 需要注意的是,绕过验证码登录属于一种非正常的测试行为,应该在合法授权和允许的范围内进行。另外,不同的系统实现验证码的方式可能不同,以上方法仅供参考,具体实施还需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值