一. 使用场景说明
在接口自动化测试中,一般各业务接口会对登录接口有所依赖,而登录接口中会存在有要求输入图片验证码的问题,最终导致接口自动化测试难以顺利展开。
二. 图片验证码分析
1. 本文中遇到的验证码特点为:字符有扭曲,字符彼此拥挤在一起,字符中存有遮挡线
2. OCR图像识别可以识别出一些比较规范的字体,不适用于本场景。
3. 如果想成功识别出本文中遇到的验证码,有如下几种方案:
方案1:使用TensorFlow,通过模型训练,搭建一套符合自身业务特点的验证码识别系统
方案2:使用开放的AI模型训练平台,如百度的EasyDL, 有一定的免费使用次数
方案3:使用收费的图像识别接口,如图鉴平台,大概价格是1块钱可识别500次验证码
三. 设计方案说明
1. 用mitmproxy工具来监控UI端操作(mitmproxy服务会以子线程方式启动),它主要包含有两个操作: 1)下载验证码图片;2)获取认证信息。
2. 通过1-2-3步骤,在UI端模拟用户登录操作。由于图片识别接口有一定的失败率,所以登录失败后,会进行登录重试。
3. 登录成功后,抓包线程会成功抓取到认证信息,并将其放入队列中。主线程从队列中取出认证信息,并保存至config.ini中。
4. 业务API会优先从config.ini中读取认证信息,如果config.ini中的认证信息失效了,则通过步骤8来刷新认证信息,并自动重新执行业务API。
5. 本方案中涉及到的两处重试场景(已用下划线标出), 均使用tenacity库完成的。