Web自动化测试的验证码生成与应用
2021-11-21王松赵宁社武鹏博
王松 赵宁社 武鹏博
【关键词】神经网络;验证码生成;模式识别
【中图分类号】TP311.5 【文献标识码】A 【文章编号】1674-0688(2021)10-0043-03
0 引言
互联网为人类的异地交流提供了通信的可能性和实现手段,在线交流、电子支付这些方法走入人们工作和生活的日常,成为我们生活的一部分。在大多数人享受便利的同时,也有少数不法分子利用这些手段进行非正当的互联网使用,比如充当水军对目标网站输入大量恶意评论、恶意注册和占用网络资源等。为了维持网站的正常运营、保障其正常服务,设计人员可以在用户的网站资源使用环节中加入验证码识别,比如进行用户注册、修改用户资料、发表留言等操作时,需要用户手动输入,这样就能避免受到相当一部分自动化软件的攻击。
验证码技术实际上是为了在不知情的情况下鉴别人与机器的技术,英文简称是CAPTCHA,即Completely Automated Public Turing test to tell Computers and Humans Apart,就是全自动区分计算机和人类的图灵测试[1-2]。验证码的实现方式一般分为两种,即“读取式”和“生成式”[3-4]。由于简单的验证码已经不能满足需求,为了增加验证码被识别的难度,人们开始加入扭曲字符,或者加入线段和各种“斑点”用于增加机器识别的难度,同时出现了运算公式之类的验证码,使得机器“看懂”验证码的难度增大了很多。
与此同时,验证码的使用也给Web自动化测试带来了相当大的挑战——在区别远程用户是人类还是计算机的同时,也切断了计算机的进入,而在现代化软件工程的实施过程中,常常会用到自动化的手段进行测试。以目前的技术还不能区分自动化测试与自动化攻击的访问手段,或者说从现象上看,从服务器角度来看这两者是一样的。那么,为了正常进行自动化测试,只能依靠在软件中加入验证码识别的环节,提高验证码识别准确率就成为提高Web自动化测试效率的重要保障。
1 Web自動化测试技术
自动化软件测试就是把以人力为主的软件测试工作用计算机自动执行的机器工作方式的过程。Web自动化测试就是对于基于Web页面工作的软件进行自动化测试的技术,它不仅能节约人力、财力和资源成本,而且能节约时间成本,从而大大提高软件的测试效率。随着软件生产的工程化、规模化,测试流程的不断规范化,以及软件测试技术逐步精细化,自动化软件测试已经成为软件工程开发中的一种重要手段。自动化测试可以分为单元测试、集成测试及系统测试等层次,每个层次都有其实现的框架技术。
Web自动化测试依赖的方法通常包括Web页面元素定位、获取用户操作行为及模拟用户操作行为。其中,Web页面元素定位常用的页面元素属性有id、name、classname、linktext、XPath和CSS Selector等,即依据元素属性的唯一性或者局部唯一性通过某种方法查找Web页面元素,比如标签、文本框、超链接等。获取用户操作是通过读取页面事件捕捉在页面上发生的某种操作,比如按键上的鼠标单击、悬停、按键等;模拟用户操作则是通过软件手段模拟用户页面上的单击、键盘按键、文本框输入等操作。执行Web自动化测试通常需要依赖一个运行Web页面加载的软件组件,如WebDriver。
2 基于神经网络的验证码技术
在神经网络学习中,通常为了提高网络的性能,常规做法就是增加网络深度与宽度,但也会带来一定的影响,比如巨大的参量增加了处理的复杂性,并且当输入的数据量不够大时,目标网络容易出现过拟合;当网络深度增加到一定程度时,就会失去梯度递变带来的优势,即所谓的梯度消失现象,而inception网络则能较好地解决上述问题。
2.1 inception结构神经网络介绍
神经网络是由大量节点或神经元组成的操作模型[5],每个节点代表一个特定的输出函数,称为激活函数[6]。网络的输出根据网络的连接、权值和激励功能的不同而不同。网络本身通常是某种算法或函数的近似或者是逻辑策略的表达式。神经网络是一种机器学习算法,它可以通过结构网络实现对非线性问题的无限逼近。近年来,基于卷积神经网络(CNN)的算法用于从视觉数据中确定物体的精确位置,具有更高的工作效率[7]。
卷积神经网络是一种多层结构的前馈神经网络,它的结构包括卷积层、池化层与激活函数,其特点是可以把图片数据作为一个整体进行特征识别[8-10]。卷积层由卷积核形成,通过各个卷积核提取图像的特定特征。
2.2 应用卷积神经网络的识别
卷积神经网络应用在图像识别的基本原理如下:首先,由卷积层提取图片的特征,比如最初一层卷积用来提取线条、边缘等特征,下一层卷积提取线条的组合特征,再往后每层都是提取前一层的融合特征,通过稀疏权重、等变表示及参数共享这样的卷积运算提高效率。其次,有池化层对卷积层获得的特征进行二次提取,主要是通过池化函数对指定位置的相邻输出总体统计特征代替网络的输出。最后,池化层之后的全连接层的每个神经元均与相邻上层的神经元相连,最终传递给输出层。
3 基于inception的ASCII码集识别方法
为了实现验证码识别,最开始要对验证码进行分割,然后采取对单个字符进行识别,从而达到识别整张验证码的目的,但是研究人员在生成验证码的过程中发现一个问题,就是有很多验证码的字符是连在一起的(如图1所示)。
实际上很难进行分割,因为每一个字符的边界较难确定。因此,研究人员改变了思路,采用了多任务学习(Multitask Learning)的一种方式,这样做就是可以把处理过的验证码照片放入网络进行训练,然后直接出来验证码中4个字符的预测结果,降低了整体的复杂度。图片总的处理流程使用的是inception-v4模型网络结构(如图2所示)。
最后将获得4个结果,对每个结果计算损失,然后求其算数平均,再调整参数对算数平均进行优化,使其总体达到一个完美的结果。整个网络逻辑结构如下:我们训练4个分类器,对应验证码中的4个字符,第一个输出对应的是第一个字符的预测,其他的输出以此类推,这样就可以在使用过程中获得方便。
还有一个问题是数据标注过程,在生成验证码的过程中,对图片的命名就是图片中字符,因此在写标注程序的时候,就是对命名字符串的切割,然后将字符转化成对应数字,本文在转换成数字时用到的是ASCII码,python中有计算出对应字符ASCLL码的函数ord()。
3.1 样本的生成
作为一个神经网络的应用,第一步是找到数据集,本实验所需要的数据集就是各种各样的验证码,因此使用ImageCaptcha库进行验证码的生成,研究人员生成了10 000张图片的样本,类似于图3。
3.2 样本的降噪处理
接下来是生成tf-record文件,在生成文件的过程中,研究人员进行了灰度处理(如图4所示),即黑白图片,也可以进行去噪处理,通过对图片进行腐蚀操作(如图5示),首先去掉其中的噪点,然后进行膨胀操作(如图6所示)。
扩大变小的字母线条,从以上图片中我们明显看到验证码中的噪点消失,这为后续操作中对网络准确率的提升打下了基础。
图像处理的目的有两点:一是在不损坏原有图片含义的情况下,减小图片的计算大小,因为彩色图片有3个通道(channel),但是色彩与实验无关,所以研究人员进行灰度处理后,图片就有一个channel,这样就减少了网络的计算。二是去掉图像中的噪点,突出研究人员需要的特征。
对图像进行标记,不同的字符有不同的数字与之对应,字符的顺序可以自行定义,一旦定义完成就不可在标记的过程中改变,那么定义字符的数量就会作为网络最后一层神经元的数量,注意这里是说每一个输出的神经元的个数。同时,研究人员会在训练的过程中将标记的数字转化成tensorflow中one_hot的形式,便于用于网络的训练,输出4个预测值,与标注的实际值进行对比,计算loss值,这里的计算采用交叉熵,使用的是Tensorflow中的softmax_cross_entropy_with_logits函数,本文采用的优化器是AdamOptimizer,当然也可以用其他优化器。
4 Web自动化测试中的验证码识别应用
对以上方法研究的基础上,我们在Web自动化测试中可以应用图像识别方法(如图7所示),在程序中把某科研管理系统的页面载入Web引擎测试,用输入识别后的验证码并尝试登录,图8是登录成功的页面。
5 結语
本文针对Web自动化测试中的验证码的应用实践问题进行了部分验证码生成与识别研究。在分析Web软件的自动化测试基本需求的基础上,通过ImageCaptcha库生成样本数据集,进而搭建了一种基于inceptionv4的卷积神经网络,对验证码进行图像处理、降噪及标记,通过深度学习算法执行网络训练,得到识别结果,并通过具体实例给出了在Web自动化测试中对该方法的实际应用和验证。此外,这种识别方式也可以扩展用于其他应用,比如车牌识别,可以取消传统识别过程中一些步骤,例如字符切割,但是要注意车牌开头的汉字需转换成数字,而要转成多少,取决于设计者定义。
本文的研究还存在不足之处,研究人员发现在训练过程中需要的时间太长,可以根据实际需求构建简单的网络模型进行训练。
参 考 文 献
[1]田超雄.文本类验证码识别方法研究[D].西安:西北大学,2019.
[2]程莉莉.基于ELM算法的验证码软件可用性研究[D].湘潭:湘潭大学,2016.
[3]杨彬.Web自动化测试中验证码的实现方法[J].信息技术与标准化,2010(11):39-41.
[4]司徒毅.基于LDA变换的验证码识别技术初探[J].广东广播电视大学学报,2009,18(1):102-108.
[5]邱意,陈劲杰.基于卷积神经网络的锌渣识别方法研究[J].软件工程,2021,24(1):2-5.
[6]孙诚,王志海.社会网络中基于神经网络的链路预测方法[J].数学建模及其应用,2017,6(4):10-17.
[7]S. rubin bose VSK.Efficient Inception V2 Based D-eep Convolutional Neural Network for Real-time Hand Action Recognition[J].Iet Image Processing,2020,14(4):688-696.
[8]崔新,白培瑞,张策,等.一种基于端对端深度卷积神经网络的验证码识别方法[J].山东科技大学学报(自然科学版),2020,39(2):111-117.
[9]王昊,康晓凤,卢志科,等.基于深度学习的验证码识别Web应用平台[J].软件工程,2020,23(4):41-43.
[10]王海艳,董茂伟.基于动态卷积概率矩阵分解的潜在群组推荐[J].计算机研究与发展,2017,54(8):1853-1863.