接口自动化【二】(图形验证码处理)

文章目录

  • 前言
  • 一、图形验证码图片获取(需要实际截图做对比补充)
  • 二、调第三方接口获取验证码
  • 三、后端登录接口(举例)
  • 总结

前言

讲解了图片验证的处理;在接口测试中遇见的一些问题;多部分编码的注意点


一、图形验证码图片获取(需要实际截图做对比补充)

F12,抓取图形验证码的获取接口。(先F12,再访问登录页面)

url : http://mall.lemonban.com:8108/captcha.jpg?uuid=bc193953-8242-4d16-8663-dc8a1ffa56f4

接口自动化【二】(图形验证码处理)_第1张图片

接口自动化【二】(图形验证码处理)_第2张图片

注意:open("code.png","wb")这个函数里面的code.png,并不是在文件里早已经建立好的图片,而是只是作为一个图片文件的名字(也可以理解为一个名叫code.png的空文件,需要我们写入数据,我个人认为这种理解方式更好一点。)fs.write(resp.content)这个函数,resp.content是获取的图片的内容(这里用content是以二进制的方式获取,一般图片都是以二进制方式获取)。fs.write()这个函数是把已经获取的二进制图片的内容,写入code.png的空文件。

在代码执行完成后,就会生成一个带有实际内容的code.png文件。

二、调第三方接口获取验证码

图片识别-广告识别-目标检测-图鉴网络科技有限公司

注意:第三方图片识别是需要收费的,所以就自己充点钱进去做测试了。

接口自动化【二】(图形验证码处理)_第3张图片

 接口所需要的参数和URL:

url : http://api.ttshitu.com/predict
method:post
请求数据:
    username:simple
    password: yuan5311645
    typeid: 3
    image: 文件

依据接口文档里面的方式(2种):

第一种(直接使用data数据进行上传):

文件上传,要用requests的files参数
('filename', fileobj, 'content_type')
{"image":("code.png",resp.content,"image/png")}

我们对比一下request库里面的说明

接口自动化【二】(图形验证码处理)_第4张图片

接口自动化【二】(图形验证码处理)_第5张图片

成功的请求案例:

接口自动化【二】(图形验证码处理)_第6张图片

 在这里我也发现了,用data传递json格式的数据的时候,才会指定Content-Type

在源码中不容易理解的地方:

 这种写法很容易让初学者看不懂,我也是仔细分析了才明白。

最基础的对应就是:name:file-tuple

这一句话:`file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``

也就是说:file-tuple也可以变成('filename', fileobj) 或者 变成 ('filename', fileobj, 'content_type')

就会写成:

name:file-tuple

name:('filename', fileobj)

name:('filename', fileobj, 'content_type')

注意:多部分编码

也就是每个部分有不同的内容类型:

有data,有file类型(图片或者其他)

参考一位博主的:

Python+requests库 POST接口图片上传 - 简书

接口自动化【二】(图形验证码处理)_第7张图片

 第二种(直接使用json参数进行上传):

图片里面的数字和字母

接口自动化【二】(图形验证码处理)_第8张图片

注意:这里的第二种方式并不是我们随意想的第二种方式,而是接口文档里面提供的第二种方式。

接口自动化【二】(图形验证码处理)_第9张图片

 

注意:

(1)不进行解码时:

接口自动化【二】(图形验证码处理)_第10张图片

 (2)使用encode的编码方式

接口自动化【二】(图形验证码处理)_第11张图片

三、后端登录接口(举例)

import requests

# 时间chuo的生成
import time
t = int(time.time()*1000)
print(t)

# 生成uuid
import uuid
sessionuuid = uuid.uuid4()
print(sessionuuid)

url = 'http://mall.lemonban.com:8108/adminLogin'
method = "post"

# 1、正场场景 -
req_body = {"principal":'student',
            "credentials":"123456a",
            "imageCode":"lemon"}

resp = requests.request(method,url,json=req_body)
print(resp.text)
try:
    resp_dict = resp.json()
except:
    print("纯粹的字符串")
    result = resp.text  # 比对字符串是否相等、包含一部分
else:
    result = resp_dict # 提取值,来比对。


总结

暂无

你可能感兴趣的:(python接口测试,python,pandas,开发语言)