|
requests接口自动化基础
首先,dos命令 pip install requests 第三包
1、模拟get请求
import requests
response = requests.get(url="https://www.baidu.com")
2、获取响应的一些信息
print(response.status_code) #响应状态码
print(response.reason) #响应信息
print(response.headers) #响应头
print(response.text) #响应正文
3、requests传参的几种参数
①先把参数放进字典,再去引用
②get传参数可直接放在地址栏,也可生成字典,再去通过params引用,如果get传的参数为关联参数,也需要通过params传参
③post传参数需要生成字典,再通过data引用
④当需要传请求头的时候,需要将请求头生成字典,再通过headers引用
response = session_obj.post(url="http://47.107.178.45/phpwind/index.php",data = data_info,headers=headers_info,params=params_info)
4、响应正文在字符串和json间的切换
①导入json模块:import json
②text转换为json,json_data = json.loads(response.text)
③json转换为text,str_data = json.dumps(json_data,ensure_ascii=False)
ensure_ascii=False 这句代码的使用,是因为把json格式的数据转换成字符串,默认会把中文转化成unicode编码,
使用这句代码,可以让它不进行转化成unicode编码
5、使用jsonpath解析数据
①安装第三方库:pip install jsonpath / import jsonpath
②使用jsonpath.jsonpath方法,$代表json数据,用[]表示索引值,表示所有
json的数据放在前面,json表达式放在后面,记得在最后加[0]
因为返回的值是一个列表,取值的加[0]
value = jsonpath.jsonpath(json_data_02 ,"$[1].books[1].price")[0]
③用$..用相对路劲表示
6、jmeter随机参数
import random
import time
#随机整数
def get_randomid(min,max):
return random.randint(min,max)
# if __name__ == "__main__":
# print(get_randomid(1,1000))
#随机字符串
def get_randomstr(str_base,str_lenth):
randomstr = ""
a = str_base
for i in range(str_lenth):
randomstr = randomstr + a[random.randint(0, len(a) - 1)]
return randomstr
# if __name__ == "__main__":
# print(get_randomid(1,1000))
#随机时间
def get_randomtime(str_base,str_lenth): #随机时间
a = '2022-11-02'
b = time.strptime(str(a),"%Y-%m-%d")
b1 = int(time.mktime(b))
a1 = '2022-10-02'
c = time.strptime(str(a1),"%Y-%m-%d")
c1 = int(time.mktime(c))
random_time = random.randint(c1,b1)
d = time.strftime("%Y-%m-%d",time.localtime(random_time))
return d
7、强制将响应正文解码为utf-8格式
①response.encoding = 'utf-8'
②response.encoding = response.apparent_encoding 解决响应正文乱码问题
③响应头中的charset 和 响应正文中的charset一致的话,响应正文基本不会乱码
8、响应正文的4中获取方式
①print(response.text)
②print(response.content.decode('utf-8'))
③#下载图片
from PIL import Image #pillow库是python图形图像处理工具
from io import BytesIO
response =requests.get(url="https://bkimg.cdn.bcebos.com/pic/5bafa40f4bfbfbedd055756d7af0f736afc31f97?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U4MA==,g_7,xp_5,yp_5")
EJZ = response.content #获取二进制
tupian = Image.open(BytesIO(EJZ)) #BytesIO字节流
tupian.save("123.png") #Image打开字节流的图片,并进行保存
④以原始套接字的方式获取响应正文 raw 必须加参数 stream = True
response =requests.get(url="",stream = True)
print( response.raw.read())
9、响应.json()-->可直接将响应正文转换成json格式
token = jsonpath.jsonpath(response.json(),"$.access_token")
10、python中的正则表达式,自带的re模块
import re
value = re.findall("c(\d+)k",放置文件)[0]
\d 匹配数字 \D 非数字 \s 匹配空白符 \S 匹配非空白符 [] 匹配括号中的任意一项
[\s\S]--》相当于(.+?)的加强版,可以匹配任意字符
(.+?)不能匹配非空字符和换行符
11、requests如何设置请求超时
timeout参数,可通过元组设置两中时间
用python的requests模拟jmeter发送请求,可以通过添加 proxies参数,调用代理服务器的参数
12、requests重定向操作
requests默认支持自动重定向
allow_redirects=False用来取消自动重定向
13、如何利用第三方库进行参数化---》pip install faker
https://www.cnblogs.com/dream66/p/13233797.html
14、jmeter中web的接口测试会用 cookies管理器来实现请求之间的关联,不然就是独立的请求,运行就会报错
在requests中,通过session_obj = requests.session()生成session的对象
然后每一个请求都用session_obj来发送,即可实现请求之间的关联
|
|