在大部分的Web应用中,为了系统和用户信息的安全,一般为在用户登录、注册或进行某些特殊操作时,要求输入验证码才能进行下一步操作,输入正确的验证码则可继续,如果验证码错误,则验证不通过,要求重新输入。
想必小伙伴们在开展UI/接口自动测试的过程中都遇到过处理验证的问题,由于是让代码在代码人工测试,在遇到需要输入验证码的时候,由于验证码是随机生成的,导致程序不能读取正确的验证码而使测试失败。
如遇上边的问题,该如何办呢?...... 挠头中......
第一种处理方式:
网上铺天盖地地都是什么基于OCR的图像识别技术,但该技术有自身不可跨越的缺陷:
1、免费的功能有限,收费的操作也不方便
2、识别的成功率太低,导致大部分时间都浪费在了图片的识别上
3、OCR识别的验证码也是有其限制的,下面请看目前部分基于验证的验证信息都有哪些
如果遇到上面的验证码,OCR也将无法识别,就需要用其它的手段进行处理。
关于OCR处理验证码的用法,将在下一节<OCR用法中介绍>
第二种处理方式:
利用Cookie机制绕过相应的验证码,如,当一次正确的登录后,后台可能会向前端以Cookie的形式写入相应的登录信息,以保持用户的登录状态,此时,如果在进行自动化测试时,将登录信息的Cookie带到后台,后台验证Cookie通过后,将保持用户以前登录的状态。
以Selenium为例的Cookie形式的处理形式:
Step1:先用抓包工具(如,Filddler)抓取正常登录时的登录状态的Cooike
Step2:然后在利用Selenium做自动化测试时,把Cookie带入后台:
WebDriver driver = new ChromeDriver();
driver.navigate().to(url);
driver.manage().addCookie(new Cookie(key, value));
driver.navigate().refresh();
看似完美,但是,1、一个系统中可能需要进行输入验证码的地方很多,不一定就唯一的是登录或注册时需要;2、Cookie是有失效时间的,过了有效时间就不能再用;3、后台可能不对Cookie进行处理;
综上,似乎目前并没有完美的解决方案来解决验证码的问题,所以就剩下最后大招:万能验证码
第三种方式:
设置万能验证码,需要开发人员的配合,把我们的诉求告诉开发,让开发去修改代码,在代码中将需要输入验证码的地方设置成我们需要的固定值,即所谓的万能验证码。或让开发将需要验证的地方代码注掉(有一定的风险,开发不一定干)。
和开发人员沟通万能验证码的时候,不一定顺利,开发人员可能会找各种理由拒绝,此时需要我们做到心中有数,至少对于验证码的生成原理及验证码的处理机制有一定的了解。很多时候,验证码在后台生成,然后存入Session或放入Redis或其它的地方(具体项目有所不同),当开发人员拒绝时,可以表明自己的看法,对促进工作的开展有很大的帮助。
所以处理验证码一般根据项目来定,如果只是普通的数字型、字母型,且比较容易识别的时候,可用OCR技术实现;如果后台有保持用户登录状态,且有对登录Cookie进行处理的,可使用Cookie的形式;如果不是以上情况,最后的杀手锏就只有万能验证码了。但是设置了万能验证码后,项目要在上线前,记得通知开发人员把万能验证码去掉,如果直接测试的是线上产品,则要记得让开发定期更新万能验证码。
每天持续更新,软件测试知识!
网友评论