自动化测试中验证码问题如何解决?

news2024/9/24 5:33:24

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

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

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

去掉验证码

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

设置万能码

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

#coding=utf-8
import random

#生成0到10之间的随机数
#d = random.uniform(0,10)
#print d

#生成一个1000到9999之间的随机整数
d = random.randint(1000,9999)
print u"生成的随机数:%d " %d

i = input(u"请输入随机数:")
print i

if i == d:
    print u"登录成功!!"
elif i == 1111:
    print u"登录成功!!"
else:
    print u"请重新输入验证码!"

运行结果:

>>> ================================ 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是光学字符识别Tesseract OCR引擎的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 对象的名字;当然,最简单的方法还是询问前端开发人员。

总结:

    最简单安全,行之有效的方式就是设置万能码,稍微和开发沟通一下就OK了。如果乐于“闷头苦干自力更生”的话也可研究验证码识别技术。

【最后有什么不懂得地方可以找我喔】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪心法——迪杰斯特拉算法

问题描述&#xff1a; 迪杰斯特拉算法Time Limit: 2000 MSMemory Limit: 5000 KB Description 给定n(n<500)个顶点,以及E(E<10000)条边&#xff0c;使用迪杰斯特拉算法计算顶点s到顶点t的最短路径.Input 第一行输入T表示有T组数据。每组数据第一行输入n、E、s、t&…

大数据图书推荐:Python数据分析与挖掘实战(第2版)

《Python数据分析与挖掘实战&#xff08;第2版&#xff09;》的配套学习视频&#xff0c;课程内容共分为基础篇&#xff08;第1~5章&#xff09;和实战篇&#xff08;第6~11章&#xff09;。 基础篇内容包括数据挖掘的概述、基本流程、常用工具、开发环境&#xff0c;Python数据…

7种超轻量级的Linux发行版,希望能够帮助你找到适合自己的操作系统

Linux是一种非常受欢迎的开源操作系统&#xff0c;而且有许多版本可以选择。有时候&#xff0c;你需要一种超轻量级的Linux发行版&#xff0c;它可以在资源有限的设备上运行&#xff0c;并且能够快速启动。本文将介绍7种超轻量级的Linux发行版&#xff0c;希望能够帮助你找到适…

【Python习题集4】字符串与正则表达式

字符串与正则表达式 一、实验内容二、实验总结 一、实验内容 1.输人一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。 (1)源代码 x input("请输入一个字符串&#xff1a;") y x[::2] print("下标为偶数的字符组成的新串为&…

1.goldeye百个靶机渗透(精写-思路为主)

1-goldeye 特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#xff0c;如使用者用来从事违法犯罪行为&#xff0c;一切与作者无关。 文章目录 1-goldeye特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#…

Multi-Band Blending

多频带融合&#xff08;Multi-Band Blending&#xff09;算法是一种图像融合技术&#xff0c;用于将两个或多个图像无缝地合并在一起&#xff0c;以创建一个平滑的过渡区域。该算法常用于图像合成、图像拼接和全景图像生成等应用中。 多频带融合算法基于频域的图像处理技术&am…

Three——三、动画执行、画布大小、渲染帧率和相机适配体验

动画渲染循环 threejs 可以借助 HTML5 的 API 请求动画帧 window.requestAnimationFrame 实现动画渲染。 请求动画帧window.requestAnimationFrame(实现周期性循环执行) // requestAnimationFrame实现周期性循环执行 // requestAnimationFrame默认每秒钟执行60次&#xff0c…

DJI RTK无人机采集后的文件分析:nav、bin、event、MRK文件

NAV文件&#xff1a; NAV文件是导航数据文件。它们通常存储有关飞行路径、GPS坐标、高度和其他相关数据的信息。这些数据可用于图像的地理参照、飞行分析或故障排除。 EVENT文件&#xff1a; EVENT文件记录了飞行过程中发生的各种事件&#xff0c;如无人机何时起飞&#xff0c…

在线办公大势所趋,细说3种主流云办公方式优劣

文章目录 前言在线协作&#xff1a;WPS优势方面部分缺点 远程控制&#xff1a;ToDesk优势方面部分缺点 云桌面&#xff1a;阿里云桌面优势方面部分缺点 总结 前言 云办公会不会在未来五到十年成为普遍现象&#xff1f;当我们在疫情期间不得不加入远程办公行列时&#xff0c;其…

DC-DC 自举电容

背景&#xff1a; 最近在调试一个DC-DC电路&#xff0c;16V/20A的芯片&#xff0c;功率算是中等偏上。 DCDC工作不正常&#xff0c;空载有输出&#xff0c;接负载后&#xff0c;电压马上掉落到大概2.3V&#xff0c;一开始以为是电感选取不对&#xff0c;瞬态响应不足&#xf…

Ribbon、LocdBalance和openFeign的实战

Ribbon 使用RestTemplate时&#xff0c;如果不加LoadBalance&#xff0c;调用不通&#xff0c;需要使用LoadBalance作为负载均衡 手写一个客户端的负载均衡器 GetMapping("order/create2")public String createOrder2(){List<ServiceInstance> instances d…

Ant Design Pro---【01 环境安装+UMI入门】

入门基础 web 技术 web 技术是指通过 JavaScript&#xff0c;HTML&#xff0c;css 来构建网站的技术&#xff0c;mdn 提供了相当方便的文档来帮助我们学习这些知识。 Node.js 前端开发基础环境 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;Node.js 的…

95后阿里P7晒出工资单:狠补了这个,真香···

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

分布式事务 --- 理论基础、Seata架构、部署

一、分布式事务问题 1.1、本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中&#xff0c;必须要满足四个原则&#xff1a; 1.2、分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&am…

[OtterCTF 2018]之Misc篇(NSSCTF)刷题记录⑦

NSSCTF-Misc篇-[OtterCTF 2018] [OtterCTF 2018]General Info[OtterCTF 2018]Play Time[OtterCTF 2018]Silly Rick[OtterCTF 2018]What the password?[OtterCTF 2018]Name Game[OtterCTF 2018]Hide And Seek[OtterCTF 2018]Name Game 2[OtterCTF 2018]Path To Glory[OtterCTF …

软光敏算法学习之二

《监控设备日夜模式的切换方法、系统、设备及存储介质》专利学习笔记 一、主要原理&#xff1a; 在夜模式下时&#xff0c;判断摄像头的传感器感知的光强度是否大于第一切换阈值&#xff1b;如果所述光强度大于第一切换阈值&#xff0c;则判断摄像头拍摄的图像中符合红外响应特…

【源码解析】Spring Cloud Gateway的断言和过滤器源码解析

路由断言(Route Predicate)工厂 Spring Cloud Gateway包括许多内置的路由断言(Route Predicate)工厂&#xff0c;所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合。 官方文档&#xff1a;https://docs.spring.io/spring-cloud-gateway/do…

TCP协议结构

文章目录 TCP---传输控制协议TCP报文结构 TCP—传输控制协议 缓冲区的意义 TCP协议是自带发送和接收缓冲区的&#xff0c;相当于malloc了两段内存空间。 系统调用接口send,write等并不是直接把数据发送到网络上&#xff0c;而是把数据拷贝到TCP的发送缓冲区&#xff0c;至此应…

Java读取Properties配置文件的6种方式

Java读取Properties的方式 项目结构&#xff1a;经典的maven项目结构 配置文件1和2内容一致&#xff1a; jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urlmysql://localhost:3306/database?useUnicodetrue&characterEncodingutf-8&serverTimezoneAsia/Shanghai jdbc.…

Axios二次封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Axios是什么&#xff1f;二、为什么要对Axios进行二次封装三、Axios二次封装1.首先&#xff0c;安装 Axios&#xff1a;2.创建一个名为 http.js 的文件&#xf…