• 08.26 requests接口测试


    1.介绍

            requests是一个很实用的python http客户端库,编写爬虫和测试服务器响应数据时经常会用到,requests是python语言的第三方的库,专门用于发送http请求

     2.前提

    pip   install   requests

     3:get的请求

    无参请求

    r = requests.get('http://www.baidu.com')

    get传参 

    payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
    r = requests.get('http://www.baidu.com ', params=payload)

    案例:

    代码

    1. import requests
    2. class UseRequestClass():
    3. #get传参的第一种方式
    4. def XWTTMethod(self):
    5. r = requests.get("http://v.juhe.cn/toutiao/index?type=guonei&key=4b72107de3a197b3bafd9adacf685790")
    6. print(r.text,r.json(),r.status_code)
    7. #get传参的第二种方式
    8. def XWTTMethod(self):
    9. params = {"type":"guonei","key":"4b72107de3a197b3bafd9adacf685790"}
    10. r = requests.get("http://v.juhe.cn/toutiao/index",params=params)
    11. print(r.text)

    4.post请求

    案例:
    1. import requests
    2. class UseRequestClass():
    3. def WeatherMethod(self):
    4. params={"city":"北京","key":"0e56bbb0ed90af8c99589c267389d361"}
    5. r=requests.get("http://apis.juhe.cn/simpleWeather/query",params=params)
    6. print(r.json())
    7. if __name__ == '__main__':
    8. u=UseRequestClass()
    9. u.WeatherMethod()

    5:Requests响应

    r.status_code    响应状态码

    r.heards             响应头

    r.cookies            响应cookies

    r.text                   响应文本

    r.json()                响应的字典类型数据

    r.encoding          当前编码

    r.content              以字节形式(二进制)返回

     最常用的是根据响应状态码判断接口是否连通,经常用于做接口中断言判断

    6:request扩充

    1:添加等待时间

    request.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)

    7:requests+unittest+HtmlTestRunner/requests+pytest+allure

    7.1流程如下

    读取文件中的数据

    requests拿到数据请求接口返回状态码

    通过断言验证返回的数据和逾期结果

    生成allure的测试报告

     7.2模块总览 

    datademo(存放数据)>>readDemo(读取数据)>>restDemo(发送请求生成报告)

     7.3:读取csv文件流程

    7.3.1:存储数据(csv)

     7.3.2:读取数据(readDemo)

    代码展示

    1. import csv
    2. class ReadCsv():
    3. def read_csv(self):
    4. file=csv.reader(open("../dataDemo/data.csv"))
    5. item=[]
    6. for i in file:
    7. item.append(i)
    8. item=item[1::]
    9. return item
    10. r=ReadCsv()
    11. print(r.read_csv())

     7.3.3:在测试用例中执行requests请求,验证预期结果和实际结果

     

    代码展示

    1. import unittest,requests
    2. from boke.readDemo.readcsv import ReadCsv
    3. r=ReadCsv()
    4. a=r.read_csv()
    5. class APIclass(unittest.TestCase):
    6. def test001(self):
    7. for i in a:
    8. cs=eval(i[1])
    9. if i[2]=="get":
    10. object=requests.get(url=i[0],params=cs)
    11. self.assertEqual(object.json()["error_code"],int(i[3])) #断言验证
    12. else:
    13. object=requests.post(url=i[0],data=cs)
    14. self.assertEqual(object.json()["error_code"],int(i[3]))
    15. if __name__ == '__main__':
    16. unittest.main()

    7.3.4生成测试报告 

     

    代码展示
    1. import unittest
    2. from boke.common.HTMLTestRunner import HTMLTestRunner
    3. from boke.testDemo.testcsv import APIclass
    4. class HtmlClass():
    5. def send_html(self):
    6. suite=unittest.TestSuite()
    7. list=["test001"]
    8. for i in list:
    9. suite.addTest(APIclass(i))
    10. with open("../report.html","wb") as f:
    11. HTMLTestRunner(
    12. stream=f,
    13. verbosity=1,
    14. title="接口自动化测试",
    15. description=None
    16. ).run(suite)
    17. h=HtmlClass()
    18. h.send_html()

    7.4读取excle文件流程

    7.4.1:存储数据(xlsx)

     7.4.2:读取数据(readDemo)

     代码展示

    1. from openpyxl import load_workbook
    2. class ReadExcle():
    3. def read_excel(self):
    4. #打开表
    5. wb = load_workbook("../dataDemo/test001.xlsx")
    6. sheet =wb["Sheet1"]
    7. test_data=[]#把所有行的数据放在列表中
    8. for i in range(2,sheet.max_row+1): #控制行数
    9. sub_data={}#把每行的数据放在字典中
    10. for j in range(1,sheet.max_column+1): #控制列数
    11. sub_data[sheet.cell(1,j).value]=sheet.cell(i,j).value
    12. test_data.append(sub_data) #拼接每行单元格数据
    13. return test_data
    14. if __name__ == '__main__':
    15. r=ReadExcle()
    16. print(r.read_excel())

    7.4.3:测试用例中发送请求,设置断言并生成测试报告中

    1. import requests,pytest,os
    2. from boke.readDemo.readxlsx import ReadExcle
    3. r=ReadExcle()
    4. aa=r.read_excel()
    5. class TestXlsxClass():
    6. def test001(self):
    7. for i in aa:
    8. cs=eval(i["params"])
    9. if i["method"]=="get":
    10. object=requests.get(url=i["url"],params=cs)
    11. assert object.json()["error_code"]==i["dy"]
    12. # print('resultobject.json()["error_code"]', type(object.json()["error_code"]))
    13. # print('i["dy"]', type(i["dy"]))
    14. else:
    15. object=requests.post(url=i["url"],data=cs)
    16. assert object.json()["error_code"]==i["dy"]
    17. if __name__ == '__main__':
    18. # 生成测试报告json
    19. pytest.main(["-s", "-q", '--alluredir', 'report/result', 'testxlsx.py'])
    20. # 将测试报告转为html格式
    21. split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
    22. os.system('cd D:\install\python/python\Test_allure\Test/test\report')
    23. os.system(split)

    7.3.4测试报告

     ( ̄▽ ̄)~*------ ٩(๑❛ᴗ❛๑)۶谢谢阅读!!!!!!!!!!!!!

  • 相关阅读:
    React中的Hooks--useReducer()
    tamarin运行
    想学设计模式、想搞架构设计,先学学 UML 系统建模吧
    【必知必会的MySQL知识】⑤DQL语言
    论文【harFormer:一种基于字形融合的高精度字符图像去噪框架】翻译
    linux下安装/升级GCC到较高版本
    IDEA 整合 Tomcat 开发 Javaweb 工程 2022-7-28
    要做出高品质的docker镜像,一个靠谱的dockerfile必不可少!
    8、python中的模块和包
    【JUC系列-11】深入理解LinkedBlockingQueue的底层实现
  • 原文地址:https://blog.csdn.net/qq_57411925/article/details/126548862