一、通过代码,实现Jmeter
1、项目要放在虚拟环境里面,解释器要使用虚拟环境的
上面是虚拟环境,下面是系统环境。2选一
venv目录
查看当前虚拟环境已存在的依赖包
2、安装Requests依赖包
1)安装命令
pip install requests
如果是mac电脑需要注意,python2是使用pip命令。python3 是使用 pip3 命令
2) 安装完之后,查看安装的版本
pip show requests
或者使用 pip list 去看,但是如果包太多,list内容就太多了
3)requests对应的方法有13个参数
接口响应码及对应的含义:
3:重定向
2:成功
1:响应正确
4:客户端问题
5:服务器问题
3、编写代码
注意:
Requests 是用Python语言编写HTTP库,专门用于发于请求的库
注意:
params 一般就是拼接在url当中(问号后面的参数)
Requests对应的方法中,有13参数。
http请求和https请求没有什么区别,只是https多了SSL证书,如果你们证书验证不通过,你们可以尝试把 verity= False
1、get请求
获取对应的响应数据
获取对应的响应数据:res.方法
# 1. 获取对应的请求URL
# print(res.url)
# 2. 获取对应响应数据---并且以文本信息显示
# print(res.text)
# 3. 获取对应响应数据---并且以JSON格式显示,如果你的数据非Json格式则会报错
# print(res.json()) # 用案例三可以看到效果
# 4. 获取对应响应数据---并且以字节方式显示,会自动为你解码 gzip 和 deflate 压缩
# print(res.content)
# 5. 获取响应的状态码
# print(res.status_code)
# 6. 获取对应的响应头 ,数据显示是什么格式由:'Content-Type': 'text/html; 决定
# print(res.headers)
获取对应的请求数据
# 获取对应的请求数据:res.request.方法
# 1、对应的请求方法
# print(res.request.method)
# 2、对应的请求的url
# print(res.request.url)
# 3、对应的请求的头部
# print(res.request.headers)
1)以文本打印的方式,将请求的文本信息打印出来
import requests
urldata = "http://shop-xo.hctestedu.com/"
r = requests.get(urldata) # 直接传urldata (位置传参)
# 获取对象的文本信息
print(r.text)
运行结果
2) Params,请求的参数是拼接在问好后面
下面get里面的两个url不同。前一个紫色的是 get请求的参数,后面的黑色的,是请求地址的变量
3)查看请求的url ,params参数直接拼接在URL里面
# params 参数应用,直接拼在链接里面
urldata = "https://www.baidu.com/s?wd=hello"
r = requests.get(urldata)
#打印请求的url
print(r.url)
4) 查看请求的url ,params参数不拼接在URL里面,而是使用公共参数
# # params 参数应用,通过变量方式使用
urldata = "https://www.baidu.com/s"
paramsdata = {"wd": "hello11"}
r = requests.get(url=urldata,params=paramsdata)
print(r.url)
2、post请求
1)普通的表单提交
import requests
# 案例 : 登录案例
# 分析: 四要素 :请求url 请求方法(POST) 请求数据 响应数据
# requests默认的post请求数据方式是:'Content-Type': 'application/x-www-form-urlencoded'
url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "xxx", "pwd": "xxx", "type": "username"}
res = requests.post(url=url, params=public_data, data=data)
# ----------------------------------------
# 1. 获取对应的请求URL
print(res.url)
# 2. 获取对应的文本信息
# print(res.text)
# 3. 获取请求头
print(res.request.headers)
结果
2) Json表单的提交:
方法一:json提交数据直接
# 方法一:json提交数据直接:json = 请求数据
url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}
res = requests.post(url=url, params=public_data, json=data)
# ----------------------------------------
# 1. 获取对应的请求URL
print(res.url)
# # 2. 获取对应的文本信息
# print(res.text)
# # 3. 获取请求头
# print(res.request.headers)
方法二:设置请求头为json格式
(字典是数据类型,JSON是数据格式.字典不是JSON类型)
# 方法二:设置请求头为json格式
url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
#下面是自己手写header
header = {'Content-Type': 'application/json; charset=utf-8'}
# data在这个位置,它只是一个字典(字典是数据类型,JSON是数据格式.字典不是JSON类型),而我们需要进行处理变成字符串格式。
data = {"accounts": "hami", "pwd": "123456", "type": "username"}
# 下面转化为JSON,是将 dict 转换为 string
new_data = json.dumps(data)
res = requests.post(url=url, params=public_data, headers=header, data=new_data)
# ----------------------------------------
# # 1. 获取对应的请求URL
# print(res.url)
# # 2. 获取对应的文本信息
# print(res.text)
# # 3. 获取请求头
# print(res.request.headers)
3)上传图片
3.1)上传图片,需要使用一个轻量级的WEB框架,Flask,创建了一个应用程序,去保存图片文件。
pip install flask
下面这部分代码相当于服务端,处理图片上传和存储逻辑
3.2)上传文件
下面的代码,相当于前端,去上传图片
import requests
# 分析: 四要素 :请求url 请求方法(POST) 请求数据 响应数据
#这个是老师自己写的一个上传图片的接口,服务器不一定还能再用了
url = "http://127.0.0.1:5000/upload"
data = {"image": open("20240223220740.png", "rb")}
res = requests.post(url=url, files=data)
# ----------------------------------------
# 1. 获取对应的请求URL
print(res.url)
# 2. 获取对应的文本信息
# print(res.text) # unicode编码
print(res.json())
# 3. 获取响应头
print(res.headers)
# 4. 获取请求头
print(res.request.headers)
面试点
接口请求的时候,如何一直保持会话:
# 总结:如果说工作当中有需要保持会话,不能直接用requests去发送请求
# 需要实例化一个session的请求对象,发送请求(在这一个会话里面,后续其他请求都用session对象进行发送即可)
# 面试题: session\token\cookies\签名 区别:
token是请求参数
cookie 、session是保持会话
# 核心点:都是用来鉴权 (一般用哪种,这个不一定,看开发)
# 1. token 一般就是一个请求参数,放在请求头 (时效性\也有可能是其它名字)。开发用算法生成的
# 2. 存储位置不同 :cookie存储在客户端,session存储在服务器端。
# 3. 大小限制不同 :cookie有大小限制,而session没有大小限制。
# 4. 安全隐患不同 :cookie存在安全隐患,通过拦截或本地文件找得到存储在其中的信息。
# 5. 时效性不同 :cookie有到期时间,而session只在用户关闭浏览器时消失。
3、接口断言
# 断言:期望结果和实际结果进行对比
# assert 表达式,信息
# 如果说正确的话不会有什么提示,错误的话,会有异常信息
assert 1 == 1, "因为是正确的,所以这行提示不会打印"
assert 1 == 2, "两者不等于的报错提示"
断言成功--不会打印断言提示
断言失败--才会打印断言提示
绿色的是断言的值,蓝色的才是提示信息