目录:导读
前言
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性能测试
九、总结(尾部小惊喜)
人生最珍贵的不是最终抵达的终点,而是沿途突破自我的每个瞬间。当你觉得撑不住时,请记住:蝴蝶破茧时的挣扎,正是它获得飞翔力量的关键。你的坚持,正在为生命谱写最动人的乐章!
别被暂时的风雨模糊了视线!那些看似坎坷的路途,都在引领你走向更美的风景。当别人选择放弃时,你的坚持就是最有力的宣言。向前奔跑吧,整个世界都在期待你的光芒绽放!