一、Python之requests学习
数据存储在别的地方的数据库中,我想在我的电脑上看到数据。如何从别的设备上把数据拿过来,然后做一定的处理,放在我的界面上展示出来呢?
接口是个中间桥梁,帮你把数据从数据库里拿出来,顺便处理再一下返回给你。
前提是你主动向我请求这个数据。
1.它是谁?向谁请求数据?----地址接口地址。
得知道对方是谁。打电话的时候,要知道对方的电话号码,才能将号码拨出去。
2.事情的类型:请求的方法(get,post)
3.找它什么事儿?请求数据。
4.得到答复。返回数据。
关注的是什么?数据。数据的正确性。请求数据与返回数据的一个匹配性。
1)发送数据。
2)验证数据。
#1.准备了测试数据
import requests #http -- get post
#地址 ----用这个数据之前需要先申请一下。
url="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
#字典
req_datas={"apiKey":"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"金毛"}
#2.调用了post请求,发送一个http请求。并得到响应结果。
#函数 -实现了功能
res=requests.post(url,req_datas)
print(res)
#3.获取响应的状态码和返回数据。
#状态码、消息头 、返回数据
#状态码
print(res.status_code)
#返回数据
# print(res.text)
print(res.json())
# 断言:断言状态码,断言返回数据里面的某个字段。
#jsonpath ==
#正则表达式。
##############################用例二#######################
print("========测试用例二=============")
#1.准备了测试数据
import requests #http -- get post
#地址
url="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
#字典
req_datas={"apiKey":"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"###"}
#2.调用了post请求,发送一个http请求。并得到响应结果。
#函数 -实现了功能
res=requests.post(url,req_datas)
print(res)
#3.获取响应的状态码和返回数据。
#状态码、消息头 、返回数据
#状态码
print(res.status_code)
#返回数据
# print(res.text)
print(res.json())
#### 流程是一样的,只是数据(url+请求数据)不一样。-----流程和数据分离开。
#### 准备一个流程,多组数据。
运行结果
总结:
利用requests库发送请求分为:
1.准备测试数据:接口url地址、请求类型、请求数据。
2.调用get/post:根据请求类型来决定调用哪个方法。
3.通过res.text获取响应数据。
流程是一样的,只是数据(url+请求数据)不一样。-----流程和数据分离开。
二、excel基本操作与读取测试数据
必会2
代码里面的表单名称要与Excel里面的表单名称一致。
文件目录结构
python代码在excel中读取出来的数据默认都是字符串。 用eval()这个函数可以将字符串转换成字典。
但是请求的数据是json格式,json格式中有一个Null,这个东西,python是不认识的。python认识的是None。如果json字符串中有个Null,eval()是没有办法把Null转成None。
有一个json库来解决这个转换问题,json库不需要额外安装,直接引入就可以了。如果json字符串中有个Null,会自动将它转换成None。可以将json字符串转换成python的字典。
req_datas=json.loads(datas)
# 函数:功能。拿到测试数据,发送http请求,获取响应结果。
# 定义函数、类的时候不能与python的自带的函数重名。因为名字一样,代码运行后会先从你定义的函数下面找内容,找不到就报错了。
import json
import requests
def myRequests(url ,method ,datas):
# 判断请求类型
if method =="get":
res =requests.get(url,datas)
else:
res =requests.post(url,datas)
print(res.text)
'''
返回数据的格式不用设置,默认返回的是个字符串。
服务器返回来的都是字符串,无论它的数据格式是json、xml、html,
对于客户端来说,拿到的首先是字符串的格式。其次想转成json、xml、html,
调用对应的库转换就可以了。
'''
# ##用例一
# url1 ="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
# datas ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"金毛"}
# method ="post"
# myRequests(url1 ,method ,datas)
#
#
# ##用例二
# print("=======测试用例2=====")
#
# datas_2 ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":88}
# method ="post"
# myRequests(url1 ,method ,datas_2)
#
# ##用例三
# print("==========测试用例3============")
#
# url2="https://api.apishop.net/common/dogFamily/queryDogInfo"
# datas_3 ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","petID":8}
# method_3 ="post"
# myRequests(url2 ,method_3 ,datas_3)
from openpyxl import load_workbook
#加载测试文件
wb=load_workbook("sample.xlsx")
#找到测试数据所在的表单
sh=wb["Sheet1"]
#获取某个单元格的值,第二行第二列
#第二行数据
# url=sh.cell(row=2,column=2).value
# method=sh.cell(row=2,column=3).value
# datas=sh.cell(row=2,column=4).value
# print("url:",url,"method:",method,"datas:",datas)
# myRequests(url, method, datas)
#第三行数据
# url=sh.cell(row=3,column=2).value
# method=sh.cell(row=3,column=3).value
# datas=sh.cell(row=3,column=4).value
# print("url:",url,"method:",method,"datas:",datas)
# myRequests(url, method, datas)
#测试数据有多少行
rows=sh.max_row #[1,2,3,4]
#range(4) #[1,2,3]
#range(起始值,终点值) range(2,5) [2,3,4]
#for循环实现遍历---遍历行号。
for item in range(2,rows+1):
#拿到第一行的行号
print(item)
#获取每一行的请求数据、地址、请求方法。
url=sh.cell(row=item,column=2).value
method=sh.cell(row=item,column=3).value
datas=sh.cell(row=item,column=4).value
print("url:",url,"method:",method,"datas:",datas)
#将datas转换成字典。默认从excel中读取出来的是字符串。
#将json字符串转换成python字典。
req_datas=json.loads(datas)
#发送一次接口请求。
myRequests(url, method, req_datas)
现在我邀请你进入我们的软件测试学习交流群:【746506216
】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!