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