在UI自动化测试中常见的一个痛点是验证码的处理,由于目前常见的自动化测试框比如webdrive,Robot Framework,QTP,selenium 目前都无法很好处理,本主要介绍常见验证码的处理思路。
1. 万能验证码:修改处理后端验证码逻辑,在数据库里面加入一个万能的验证码,对验证程序做开关处理
2. 特定登录用户绕过:对于特定的用户逻辑处理不展示验证码
3.通过ocr识别验证码图片获取到验证码
3.1 文本类型验证码识别--识别准确率在98%以上
# -*- coding:utf-8 -*-
#自动化测试图形验证码处理
import ddddocr
from PIL import Image
class code():
def __init__(self):
pass
def viewTextCode(self,opemedImg):
'''文本验证码识别,返回识别的文本'''
try:
ocr = ddddocr.DdddOcr(beta=True)
with open(opemedImg, 'rb') as f:
image = f.read()
res = ocr.classification(image)
return res
except Exception as e:
print("识别失败:{}".format(e))
3.2 点选类验证码,目前可以是被文字和物体,但是无法解决顺序问题。传入的图片识别效果最好的是只有需要点选目标的区域图片
# -*- coding:utf-8 -*-
#自动化测试图形验证码处理
import ddddocr
from PIL import Image
class code():
def __init__(self):
pass
def viewClickCode(self,opemedImg):
'''点选验证码识别,返回需要点选的坐标'''
try:
det = ddddocr.DdddOcr(det=True)
with open(opemedImg, 'rb') as f:
image = f.read()
poses = det.detection(image)
return poses
except Exception as e:
print("识别失败:{}".format(e))
def tagInimg(self,imgname,poses):
try :
im = Image.open(imgname)
for box in poses:
# x1, y1, x2, y2 = box
#被识别的图片上描红识别结果
# im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)
image=im.crop(box) #抠图结果
image.show()
ocr = ddddocr.DdddOcr(beta=True)
res = ocr.classification(image)
print(res)
except Exception as e:
print("抠图失败:{}".format(e))