Interface接口自动化登录图文验证码问题的解决办法

简介:我这段时间新进了一家医疗公司,为了测试的质量和效率能提升,我们需要做接口自动化测试,碰到的第一个拦路虎就是登录时的验证码,本来我是叫开发帮忙在测试环境去掉,线上环境再加上,但是开发觉得麻烦,说为了测试的完整性,不能去掉,让我们测试自己想方法,所以就出现了我们测试人员进行验证码的分析和解决验证码问题。

目的:解决Interface接口自动化碰到的登录图文验证问题

首先要进行验证码图文验证,首先要下载ocr模块,cmd命令行命令如下:

pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple

我们在页面上,进行刷新时,前端向后端发送了一个请求用于获取验证码的图片,所以我们可以知道要进行接口登录需要用到两个接口

 response响应内容如下,可知响应码就在于data下,token最好也传递给下个接口


{
    "status": "00000",
    "msg": "一切OK",
    "data": {
        "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAZAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2SuO8VeN73w79rkg8N3d1aWWz7RdyyrBF8+3b5ZIJk5ODgfKR712Ncd8Vf+Sbat/2x/8ARyV0ws5JMqnZySZ1d3dwWFlPeXL7III2lkfBO1VGScDk8DtXKWPji6kubCTUtAmsNK1ORIrG9NykpkZxmINGvKbgPfBwD6h/xQhln+HOrpFG8jBY3IRSSFWVCx+gAJPoAag+Jk0V38ObtLaRJmvWt0tRGwYzs0qEBMfeJAJGM8CnFJ2v1KhFO1+pra5rWtWN6lto/hqbVP3YkllN0lui5JAUFvvH5SSB0BX1o8M+Jv7f+221zYTadqdhII7q0kO7ZnJVg+AGBAyCP5YJ09Vtr2702aDTr/7BdtjZc+SsuzBBPytwcjI/GuT8KwvofjDVNG1CT7bqt5bpqDaku5fPjDFAroSQhUkgBOCuOmOUrOIkk4vuaHibxnF4c1fS7FrZJ1umBuZTOEFnEXRBK4wfly5GSQMjGa6ivFrrXPCOt6t4tm13VvJku/8AiX2QCyzrFDHgiRSnykNIofb/ALJ5IY59E8Aa1/b3grTbt5N86R+RPmXzG3p8pLHrlgA2Dz8w69aqcLRTHOnyxTsdLRRRWRkFc14m8F23iqT/AEzVdWggMaxta21wFhfDFgzIVIJyRz7D0rpaKabTuhptO6MnSdBi0zTJ7Ca9vtUimZi51KUTsVKgFOR93A6e59azdP8AAmm6fqENy17qd3BbNvtLK7ujLb2zDhSiEdVGQuScfXBrqKKfMx8zMDXPCkGtXqXi6pq2nTiMRO+n3Ri81QSVDDBBwWbH+8fajSPCOn6L9pnt5ruXUrmPy5dSuZfOuCO3LArxxxjB2rkHFb9FHM7WDmdrFDRNHtPD+jW2l2IcW9upVd7bmJJJJJ9SST6c8ACo9K0O20e51GW0eYJf3BupIWIKpKR8zLxu+bAJBJAxxitOildiuwooopCP/9k=",
        "token": "6b22bde1-fce6-4cb0-aa59-4fb599499a58"
    }
}

具体的获取验证码和登录代码如下
 

import json
import urllib
import ddddocr
# pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
import requests
class InterfaceYanzheng():
    #初始化函数,获取session,之所以使用session是因为用到了两个接口,为了能不手动的传递cookie所以使用了session
    def __init__(self):
        self.session = requests.Session()
    #获取验证码的方法
    def yanzhengma(self):
        header = {
            # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
            # 'content - type': 'application / json',
            # 'accept': 'application / json, text / plain, * / *',
            # 'referer': 'https: // uat.resvent.com / web / webLogin'
            'accept': 'application/json,text/plain, */*',
            'accept-encoding': 'gzip,deflate,br',
            'accept-language': 'zh-CN,zh;q=0.9',
            'authentication-info': '2bd4d0bd-df4e-4429-b930-dbee43ca68d8',
            'content-length': '74',
            'content-type': 'application/json',
            'language': 'zh',
            'origin': 'https://uat.resvent.com',
            'referer': 'https://uat.resvent.com/web/webLogin',
            'sec-ch-ua': '"Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': 'Windows',
            'sec-fetch-dest': 'empty',
            'sec-fetch-mode': 'cors',
            'sec-fetch-site': 'same-origin',
            'timezone': 'Asia/Shanghai',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
        }
        url = 'https://uat.resvent.com/web-server/code'
        yanzhengma = self.session.post(url=url,headers=header,data=json.dumps({})).json()
        image_url = yanzhengma['data']['image']
        token = yanzhengma['data']['token']
        urllib.request.urlretrieve(image_url, 'yanzhengma.png')
        ocr = ddddocr.DdddOcr()
        res = ''
        with open('yanzhengma.png', 'rb') as f:
            img_bytes = f.read()
            res = ocr.classification(img_bytes)
            print("验证码是: " + res)
        return {'res':res,'token':token}
    #登录的方法
    def login(self,yanzhengma):
        data = {"code": yanzhengma['res'], "username": "zhanghao", "password": "mima", "changAuthCode": ""}
        print(data)
        url = 'https://uat.resvent.com/web-server/login'
        header={
            # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
            # 'content - type': 'application / json',
            # 'accept': 'application / json, text / plain, * / *',
            # 'referer': 'https: // uat.resvent.com / web / webLogin'
            'cookies':'token:{yanzhengma["token"]}',
            'accept':'application/json,text/plain, */*',
            'accept-encoding':'gzip,deflate,br',
            'accept-language':'zh-CN,zh;q=0.9',
            'authentication-info':'2bd4d0bd-df4e-4429-b930-dbee43ca68d8',
            'content-length':'74',
            'content-type':'application/json',
            'language':'zh',
            'origin':'https://uat.resvent.com',
            'sec-ch-ua':'"Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"',
            'sec-ch-ua-mobile':'?0',
            'sec-ch-ua-platform':'Windows',
            'sec-fetch-dest':'empty',
            'sec-fetch-mode':'cors',
            'sec-fetch-site':'same-origin',
            'timezone':'Asia/Shanghai',
            'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
        }
        responses =  self.session.post(json=data,url=url,headers=header)
        print(responses.text)

if __name__ == '__main__':
    interfaceYanzheng =  InterfaceYanzheng()
    interfaceYanzheng.login(interfaceYanzheng.yanzhengma())



  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值