• 15
  • 15
分享
  • 自动化测试如何解决验证码问题——软件测试圈
  • 恬恬圈 2021-11-09 13:47:30 字数 1998 阅读 1556 收藏 15

注意:本标题的“自动化测试”包括性能测试与UI级的自动化测试

经常会被问到如何解决验证码的问题,在此记录一下我所知道的几种方式。

对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性。但对于测试人员来说,不管是进行性能测试还是自动化测试都是一个棘手的问题。

1.png

下面来谈一下处理验证码的几种方法。

去掉验证码

这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险。

设置万能码

去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为验证通过,否则按照原先的验证方式进行验证。

#coding=utf-8
importrandom
#生成0到10之间的随机数
#d=random.uniform(0,10)
#printd
#生成一个1000到9999之间的随机整数
d=random.randint(1000,9999)
printu"生成的随机数:%d"%d
i=input(u"请输入随机数:")
printi
ifi==d:
printu"登录成功!!"
elifi==1111:
printu"登录成功!!"
else:
printu"请重新输入验证码!"

运行结果:

>>>================================RESTART================================
>>>
生成的随机数:3764
请输入随机数:1111
1111
登录成功!!
>>>================================RESTART================================
>>>
生成的随机数:3763
请输入随机数:3763
3763
登录成功!!
>>>================================RESTART================================
>>>
生成的随机数:1928
请输入随机数:1354646
1354646
请重新输入验证码!

random

random用于生成随机数

randint()

randint()方法用于生成随机整数,传递的两个参数分别是随机数的范围,randint(1000,9999)第二个参数要大于第一个参数。

我们要求用户输入随机数,并且对用户输入做判断,如果等于生成的随机数那么,登录成功,如果等于1111也算登录成功,否则失败。那么等于1111的判断就是一个万能码。

验证码识别技术

例如可以通过Python-tesseract来识别图片验证码,Python-tesseract是光学字符识别TesseractOCR引擎的Python封装类。能够读取任何常规的图片文件(JPG,GIF,PNG,TIFF等)。不过,目前市面上的验证码形式繁多,目前任何一种验证码识别技术,识别率都不是100%。

记录cookie

(适用于UI自动化测试,且目前在大部应用的用户名密码不记录在cookie或进行加密处理。)

通过向浏览器中添加cookie可以绕过登录的验证码,这是比较有意思的一种解决方案。我们可以在用户登录之前,通过add_cookie()方法将用户名密码写入浏览器cookie,再次访问系统登录链接将自动登录。例如下面的方式:

....
#访问xxxx网站
driver.get("http://www.xxxx.cn/")
#将用户名密码写入浏览器cookie
driver.add_cookie({'name':'Login_UserNumber','value':'username'})
driver.add_cookie({'name':'Login_Passwd','value':'password'})
#再次访问xxxx网站,将会自动登录
driver.get("http://www.xxxx.cn/")
time.sleep(3)
....
driver.quit()

使用cookie进行登录最大的难点是如何获得用户名密码的name,如果找到不到name的名字,就没办法向value中输用户名、密码信息。

我建议是可以通过get_cookies()方法来获取登录的所有的cookie信息,从而进行找到用户名、密码的name对象的名字;当然,最简单的方法还是询问前端开发人员。


作者:虫师

原文链接:https://www.cnblogs.com/fnng/p/3606934.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据长城汽车官方消息,近日,公司旗下芯动半导体与意法半导体在深圳签署战略合作协议,稳定 SiC 芯片供应。  据介绍,新能源汽车逐渐由 400V 向 800V 高压平台推进,以满足消费者日常出行和长途旅行的市场需求。SiC 芯片(碳化硅)因其出色的耐高压、高结温应用等特性,被广泛应用于电驱逆变器、电动汽车车载充电(OBC)和直流-直流变换器(DC-DC)等关键零部件中。  长城汽车表示,此次与意法半导体就 SiC 芯片业务签署战略合作协议,将进一步推动长城汽车垂直整合,加大新能源发展力度。  意法半导体公司去年 12 月还与理想汽车签署了一项碳化硅(SiC)长期供货协议。按照协议,意法半导体...
            0 0 242
            分享
          • 近日界面新闻了解到,丰巢智能柜小程序已专门辟出“生活服务”专区,为丰巢进军的洗衣业务打起了广告。据丰巢方面透露,目前这一服务已经从深圳拓展至全国市场,但仍处于摸索阶段。快递柜作为物流最后一公里的服务形态之一,正与驿站产生竞争。但无论是快递柜还是驿站,目前都面临服务业态相对单一、投入成本较大的问题,盈利情况并不理想。根据丰巢智能柜小程序的信息,“丰巢洗护”服务内容包括衣物、鞋靴的通用洗护,以及干洗、水洗等专业分类洗护。这一定程度上增加了快递柜使用的场景。在使用“丰巢洗护”这一功能时,用户可以通过丰巢小程序下单,选择通过“投丰巢柜”和“上门取件”任一完成配送,之后等待衣物返还即可。其中“投丰巢柜”...
            0 0 632
            分享
          • 作为一个合格的测试工程师,必须掌握测试的日常工作流程。那么在一个产品周期里面,测试工程师是什么时候介入工作的呢?具体承担了哪些工作呢?这两问题,也是在日常面试中经常遇到的,这里我用一张思维导图进行简单的概括(如下图)今天我们就来说说“测试用例设计”和“测试用例评审”。测试用例设计常见的测试用例方法大家都在网上和日常测试过程中都有用到过。这里给大家讲解一些特殊的测试点该如何进行用例设计。详情页字段校验方法:场景组合设计用例实现:同一个详情页不同字段,通过场景组合用例设计,可实现在“同一条测试数据”的基础上,校验“不同字段,不同枚举值”,节约测试工作量。通过上面这个场景,实现在“同一条测试数据”的...
            0 0 1845
            分享
          •   苹果公司CEO库克日前到达浙江嘉善立讯精密工厂,并接受专访。(浙江嘉善立讯精密工厂主要生产、组装全新AppleWatch。)  库克在采访中表示,截至目前,苹果有超过95%的产品仍在中国制造组装,在过去30年的时间里推动了中国供应链的蓬勃发展。  同时,库克表示苹果希望和供应链企业在合作中实现“双赢”:不限于产品制造的合作、企业相关的应收,还应该包括环境保护、企业社会责任及教育等多方面。  9月21日,立讯精密董事长王来春接受澎湃新闻记者采访时透露,今年立讯精密为苹果生产三款iPhone15,该业务在过去一年翻了一番。她同时还透露一个重要的信息,公司正在为明年初上市的苹果头显AppleVi...
            0 0 534
            分享
          • 一、virtualenv 与 virtualenvwrapper 的安装配置pip install virtualenvwindows下virtualenvwrapper的安装pip install virtualenvwrapper-win创建一个虚拟环境存放的目录virtualenv配置环境变量cmd查看虚拟环境virtualenv命令workon 列出所有的虚拟环境mkvirtualenv [环境名称]  创建虚拟环境workon [已存在的环境名称]  切换虚拟环境rmvirt...
            0 0 1928
            分享
      • 51testing软件测试圈微信