史上最强,接口测试+接口自动化测试,超细讲解(二)


前言

1、Cookie和Sessionid合作流程

快速理解:
用户登录成功服务器创建session,返回给客户端,客户端浏览器把session保存到它的cookie里

过程描述:
登录成功服务器立马创建session,并通过(响应头)中的set-cookie属性把session返回给客户端

浏览器把响应头中的set-cookie内容保存起来,存在浏览器自己的cookie中
以后浏览器每次发送请求时,都会把该站点的全部cookie封装到请求头中,传递给服务器

2、Tooken令牌

token:
令牌(令牌代表身份信息,身份标识----身份校验(数据库db校验,每发个请求就需要校验很麻烦,避免频繁访问数据库,token就表示身份))

cookie和token(cookie里面最关键的就是session id值)
cookie里面有时候有sessionid和token值
一般为了减少对数据库的访问,校验,数据库的账号密码,
做个令牌:token需要身份校验,账号密码校验,获取token值(返回token字符串))

token也是由服务器参数的,存在服务器的内存或者硬盘中
有一套产生规则,会涉及到加密算法

用token来实现登录
开发提供一个获取token接口,根据用户名+密码,获取一个token值–返回一个token(字符串)

token值服务器通过什么发给客户端  
通过响应头传给客户端      次要
通过响应消息体传给客户端      主要
通过cookie传递给客户端     很少

token使用场景:
服务器访问的同时,vip学员访问服务器,怎么保证vip学员的权限,普通用户也能访问,vip学员的访问的时候加一个验证,vip访问的同时加个验证,
访问网站同时校验身份,必须去vip官网去认证,通过vip账号密码拿到token值,去访问服务器时候时候token带上。

做二次校验,身份的校验,不是每个人都能访问这个网站,只有vip学员才可以
访问之前vip学员拿vip账号去网站认证一下,获取到token值然后每次访问都带上这个token就可以了

这个token可以在cookie里面,token放头headers里面和cookie里面都可以,这时候token值,cookie里面自行加token值,自行组装
额外增加某些校验参数,cookie里面可以加一些值,如token值,自行封装cookie  
认证的时候token身份二次校验,token放cookie里面和头里面都行(校验是不是vip学员)

3、接口测试数据格式

接口自动化测试数据源(测试用例来源哪里)测试用例一般存放在哪里
1:excel测试用例
2:yaml格式用例
3:csv

自动化脚本中的数据类型:
1:表单格式:
[urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式(type类型为表单形式,传数据表单形式)
表单格式是键值对组成的,键和值之间用=,多个值之间用& 如:name=zhengsan&age=16

2:json格式(str字符串:键值对类型的字符串) 
json有对象,数组两种结构,有字符串,数字,逻辑值,空值四种数据类型

用大括号{}表示对象,对象由属性组成的,属性由键值对组成的,键和值用冒号隔开,属性之间用逗号隔开,键必须用双引号引起来
用中括号[]表示数组,数组由单独的值组成
json灵活,json可以嵌套

4、Json格式详解

对象:大括号表示,对象由属性组成,属性由键值对组成,键和值对之间用冒号隔开,属性之间用逗号隔开,另外键必须双引号
{“姓名”:“姚明”,“年龄”:38}
数组:用中括号表示

["小明","小李","小百"]
[{"姓名":"姚明","年龄":38}]

嵌套:对象中可以再嵌套对象和数组

{"姓名":"姚明","年龄":38,"家禽":["小明","小李","小百"]}

5、requests库响应消息体四种格式

四种返回格式:         说明          用处

r.text:文本响应内容       返回字符串类型   获取页面html
r.content:字节响应内容    返回字节类型(byte)下载图片或者文件,r.content返回的是字节流
r.json:json解码响应内容   返回字典格式  明确服务器返回json数据才能用
r.raw:原始响应内容     返回原始格式(和fiddler一样,抓取源数据)

6、request库的使用,查看请求信息和响应信息,设置编码等

r.status_code            得到响应状态码
r.headers               打印出响应头,获取一个字典
r.cookies               获取cookies  
reps.text                打印响应体
reps.json()             查看响应体,返回一个json格式   
r.request.headers          打印请求头
r.request.body            打印请求体
reps.encoding="unicode_escape"    编码设置,为了看到中文(设置响应的编码格式)

7、加密的token,token加密+上传文件接口

上传文件接口请求头需要Cookie: token=通过获取 token 接口获取(cookie里面放sessionid还是token都可以,看开发和接口文档)
如果判断不了,可以使用fiddler抓个包查看

import requests, json
import hashlib                  # 这是加密库


def get_md5_data(psw):              # MD5加密--password  String md5(‘zr’+111111 +‘hg’)
    password = f"zr{psw}hg"
    md5 = hashlib.md5()            #1:创建一个md5对象         
    md5.update(password.encode("utf-8"))  #2:完成加密,updata方法加密   对象.方法(需要加密的对象.encode("utf-8")),加密时候最好设置编码
    # 对字符串进行编码后再进行一个加密
    # md5(b"zr111111hg")                      #也可以传二进制数据直接进行编码:如下
    # import hashlib
    # md5 = hashlib.md5()
    # md5.update(b'zr11111111hg')
    # print(md5.hexdigest())

    # 方法二:一行也可以写
    # print(hashlib.md5(b'zr11111111hg')).hexdigest()---这样写也可以,(传bytes类型。可以这么写)

    # 3要输出结果,return
    return md5.hexdigest()


# 1:获取接口需要的token
HOST = "http://121.41.14.39:2001"

def get_token(inname, inpsw):
    token_url = f"{HOST}/token/token"  # url
    header = {"Content-Type": "application/x-www-form-urlencoded"}      # 请求头,封装成字典

    # password  String md5(‘zr’+111111 +‘hg’)----password需要md5加密
    # 打开md5加密网页(百度查询)  把“zr111111hg”加密码提取出来:5c4fcc5add5d087de1e8534189c687f7
    # md5加密网站;http://tools.jb51.net/password/CreateMD5Password/
    payload = {"mobile": inname, "password": get_md5_data(inpsw)}
    reps = requests.post(token_url, data=payload, headers=header)
    return reps.json()["data"]  # 这里的data就是我们要的token


# 2:文件上传接口
# post方法,文件上传接口,先抓个包
# Content-Type: multipart/form-data; boundary=WebKitFormBoundaryLpsjAVSe95yonybu--文件上传有个随机参数boundary,算法可以做
#         做文件接口一般不带这个type,也不带头,除非真的校验,要去找对应的算法---麻烦(传type会有问题)

# 文件body---
# ------WebKitFormBoundaryLpsjAVSe95yonybu
# Content-Disposition: form-data; name="file"; filename="QQ图片20201009011422.png"
# Content-Type: image/png
# name="file"---你传给那个变量,文件名
# filename="QQ图片20201009011422.png"---文件对象
# Content-Type: image/png 文件类型
# 文件不要写绝对路径(写相对路径)---不然代码移植很麻烦


def file_doUpload():
    file_url = f"{HOST}/user/doUpload"

    # {变量:(文件名,文件对象,文件的类型)} ----文件对象需要open打开,open函数返回文件对象---文件对象有三个部分
    # 文件的打开不能用read,会乱码,只能用rb模式打开,二进制模式打开,读出是bytes字节的
    # 传文件的话一般这样做的需要--文件变量(文件对象)--组装好
    payload = {"file": ("QQ图片20201009011422.png", open("../data/QQ图片20201009011422.png", "rb"), "jpg/png/gif")}
    reps = requests.post(file_url, files=payload)
    print(reps.json())

file_doUpload()

8、测试用例的设计

大部分是功能的用例:中文描述很多,用例为人设计,前置条件—步骤–预取结果–实际结果
自动化用例设计不同,用例为代码设计(代码好处理才行),用例需要数据分离。
用例设计需要了解功能,有哪些模块得知道。

最全Python自动化测试进阶之路视频教学 (全集)

下面是我整理的2025年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生最珍贵的不是最终抵达的终点,而是沿途突破自我的每个瞬间。当你觉得撑不住时,请记住:蝴蝶破茧时的挣扎,正是它获得飞翔力量的关键。你的坚持,正在为生命谱写最动人的乐章!

别被暂时的风雨模糊了视线!那些看似坎坷的路途,都在引领你走向更美的风景。当别人选择放弃时,你的坚持就是最有力的宣言。向前奔跑吧,整个世界都在期待你的光芒绽放!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值