前提
pip install requests
一,get的请求
1.1,GET 无餐请求
r = requests.get('http://www.baidu.com')
1.2:GET传参
payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
r = requests.get('http://www.baidu.com ', params=payload)
案例:测试聚合数据
import requests
class UseRequestClass(): #get传参的第一种方式
def XWTTMethod(self):
r = requests.get("http://v.juhe.cn/toutiao/indextype=guonei&key=4b72107de3a197b3bafd9adacf685790")
print(r.text,r.json(),r.status_code) #get传参的第二种方式
def XWTTMethod(self):
params = {"type":"guonei","key":"4b72107de3a197b3bafd9adacf685790"}
r = requests.get("http://v.juhe.cn/toutiao/index",params=params)
print(r.text)
二,post请求
类似python中的表单提交
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
案例:测试聚合数据
import requests
class UseRequestClass():
def XWTTPostMethod(self):
params = {"type":"guonei","key":"4b72107de3a197b3bafd9adacf685790"}
r = requests.post("http://v.juhe.cn/toutiao/index",data=params) #print(r.json())
return r.json()
三,Requests响应
r.status_code 响应状态码 r.heards 响应头
r.cookies 响应cookies r.text 响应文本
r.json() 响应的字典类型数据
r. encoding 当前编码
r. content 以字节形式(二进制)返回
最常用的是根据响应状态码判断接口是否连通,经常用于做接口中断言判断
四,Request扩充
1:添加等待时间
requests.get(url,timeout=1) #超过等待时间则报错
2:添加请求头信息
requests.get(url,headers=headers) #设置请求头
3:添加文件
requests.post(url, files=files) #添加文件
文件传输
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
五 requests+unittest+HtmlTestRunner/requests+pytest+allure
5.1:流程如下
- 读取文件中的数据 requests
- 拿到数据请求接口返回状态码
- 通过断言验证返回的数据和预期结果
- 生成allure的测试报告
5.2:模块总览
dataDemo(存放数据)>> readDemo(读取数据)>> restDemo(发送请求生成报告)
5.3读取csv文件流程
5.3.1:存储数据(csv)
5.3.2:读取数据(readDemo)
代码展示
import csv
class ReadCsv():
def readCsv(self):
item = []
rr = csv.reader(open("../dataDemo/123456.csv"))
for csv_i in rr:
item.append(csv_i)
item = item[1::]
return item
5.3.3:在测试用例中执行requests请求,验证预期结果和实际结果
import unittest,requests
from readDemo.readcsv import ReadCsv
rc = ReadCsv()
lists = rc.readCsv()
class APIClass(unittest.TestCase):
def test001(self):
for list_i in lists:
cs = eval(list_i[1])
if list_i[2] =="get":
objects = requests.get(url = list_i[0],params=cs)
self.assertEqual(objects.json()["error_code"],int(list_i[3]))
else:
objects = requests.post(url=list_i[0], data=cs)
self.assertEqual(objects.json()["error_code"], int(list_i[3]))
if __name__ == '__main__':
unittest.main()
5.3.4:生成测试报告
from dataDemo.HTMLTestRunner import HTMLTestRunner
from restDemo.requests001 import APIClass import unittest
class HtmlClass():
def htmlmetohd(self):
suite = unittest.TestSuite() # 创建测试套件
case_list = ["test001"]
for case in case_list:
suite.addTest(APIClass(case))
with open("../report.html", "wb") as f:
HTMLTestRunner(stream=f,
title="单元测试",
description="测试一期",
verbosity=2 ).run(suite)
hc = HtmlClass()
hc.htmlmetohd()
6.4:读取excle文件流程
6…4.1:存储数据(xlsx)
6.4.2:读取数据(readDemo)
代码展示
from openpyxl import load_workbook
class UseExcel():
def get_TestExcel(self): # 打开表
workbook = load_workbook('D:\install\python\python\Test_allure\DataDemo\test1.xlsx') # 定位表单
sheet = workbook['Sheet1'] print(sheet.max_row) #3 行
print(sheet.max_column) #3 列
test_data = []
#把所有行的数据放到列表中
for i in range(2,sheet.max_row+1):
sub_data = {}#把每行的数据放到字典中
for j in range(1,sheet.max_column+1):
sub_data[sheet.cell(1,j).value] = sheet.cell(i,j).value
test_data.append(sub_data)#拼接每行单元格的数据
return test_data
t = UseExcel()
f = t.get_TestExcel()
print(f)
6…4.3测试用例中发送请求,设置断言并生成测试报告中
import requests,pytest,os,allure
from readDemo.readexcel import UseExcel
ue = UseExcel()
data= ue.get_TestExcel()
class TestExcelClass():
def test001(self):
for list_i in data:
path = eval(list_i["parameter"])
if list_i["method"] =="get":
objects = requests.get(url=list_i["url"],params=path)
assert objects.json()["error_code"] == int(list_i["assert"])
else:
objects = requests.post(url=list_i["url"],data=path)
assert objects.json()["error_code"] == int(list_i["assert"])
if __name__ == '__main__': # 生成测试报告json
pytest.main(["-s", "-q", '--alluredir', 'report/result', 'request002.py']) # 将测试报告转为html格式
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' os.system('cd D:\install\python/python\Test_allure\Test/test\report')
os.system(split)
测试报告展示