一、介绍
Requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,Requests是Python语言的第三方的库,专门用于发送HTTP请求
二、前提
三、get的请求
3.1 GET无参请求
1 | r? = requests.get( 'http://www.baidu.com' ) |
3.2 GET传参
1 2 | payload = { 'key1' : 'value1' , 'key2' : 'value2' , 'key3' : None } r = requests.get( 'http://www.baidu.com ' , params = payload) |
案例:测试聚合数据
代码
1 2 3 4 5 6 7 8 9 10 11 | import requests class UseRequestClass(): ???? #get传参的第一种方式 ???? def XWTTMethod( self ): ???????? r = requests.get( "http://v.juhe.cn/toutiao/index?type=guonei&key=4b72107de3a197b3bafd9adacf685790" ) ???????? print (r.text) ???? #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中的表单提交
1 2 | payload = { 'key1' : 'value1' , 'key2' : 'value2' } r = requests.post( "http://httpbin.org/post" , data = payload) |
案例:测试聚合数据
代码
1 2 3 4 5 6 7 | import requests class UseRequestClass(): ???? def XWTTPostMethod( self ): ???????? params = { "type" : "guonei" , "key" : "4b72107de3a197b3bafd9adacf685790" } ???????? r = requests.post( "http://v.juhe.cn/toutiao/index" ,params = params) ???????? #print(r.status_code) ???????? return r.status_code |
五、Requests响应
1 2 3 4 5 6 | r.status_code??????? 响应状态码 r.heards???????????? 响应头 r.cookies??????????? 响应cookies r.text?????????????? 响应文本 r. encoding????????? 当前编码 r. content????????? 以字节形式(二进制)返回 |
最常用的是根据响应状态码判断接口是否连通,经常用于做接口中断言判断
六、Request扩充
1 2 3 4 5 6 7 8 | 1. 添加等待时间 requests.get(url,timeout = 1 )????????? #超过等待时间则报错 2. 添加请求头信息 requests.get(url,headers = headers)??? #设置请求头 3. 添加文件 requests.post(url, files = files)????? #添加文件 |
文件传输
1 2 3 | url = 'http://httpbin.org/post' files = { 'file' : open ( 'report.xls' , 'rb' )} r = requests.post(url, files = files) |
七、requests+pytest+allure
7.1 流程如下
读取文件中的数据
requests拿到数据请求接口返回状态码
通过断言验证返回状态码和200对比
生成allure的测试报告
7.2 模块总览
1 2 3 | dataDemo(存放数据)>> readDemo(读取数据) useRequests(发送请求)>>testDemo(生成报告) |
?
7.3 读取csv文件流程
7.3.1 存储数据(csv)
通过excel另存为csv即可。
7.3.2 读取数据(readDemo)?
代码展示
import csv class ReadCsv(): ???? def readCsv( self ): ???????? item = [] ???????? rr = csv.reader( open ( "../dataDemo/123.csv" )) ???????? for csv_i in rr: ???????????? item.append(csv_i) ???????? item = item [ 1 :] ???????? return item |
7.3.3 request请求接口返回状态码
?
代码展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import requests from readDataDemo.readcsv import ReadCsv r = ReadCsv() ee = r.readCsv() # print(ee) class RequestCsv(): ???? def requestsCsv( self ): ???????? item = [] ???????? for csv_i in ee: ???????????? if csv_i[ 2 ] = = "get" : ???????????????? rr = requests.get(csv_i[ 0 ],params = csv_i[ 1 ]) ???????????????? item.append(rr.status_code) ???????????? else : ???????????????? rr = requests.post(csv_i[ 0 ],data = csv_i[ 1 ]) ???????????????? item.append(rr.status_code) ???????? return item |
7.3.4 pytest断言设置并结合allure生成测试报告
代码展示
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pytest,os,allure from userequests.userequestsDemo.requestscsv import RequestCsv r = RequestCsv() ee = r.requestsCsv() print (ee) class TestClass02(): ???? def test001( self ): ???????? for code in ee: ???????????? assert code = = 200 if __name__ = = '__main__' : ???? pytest.main([ '--alluredir' , 'report/result' , 'test_02csv.py' ]) ???? split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' ???? os.system(split) |
7.3.5 测试报告展示
?
7.4 读取excle文件流程
7.4.1 存储数据(xlsx)
?
7.4.2 读取数据(readDemo)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from openpyxl import load_workbook class Readxcel(): ???? def getTestExcel( self ): ???????? # 打开表 ???????? workbook = load_workbook( "G:\python\pythonProject\pytest05a\\requestdemo\\a.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 = Readxcel() f = t.getTestExcel() print (f) |
7.4.3 request请求接口返回状态码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import requests from requestdemo.readexcel import Readxcel class GetStatusCode(): ???? def getStatusCode( self ): ???????? t = Readxcel() ???????? f = t.getTestExcel() ???????? item = [] ???????? for excel_i in f: ???????????? if excel_i[ "method" ] = = "get" : ???????????????? rr = requests.get(excel_i[ "url" ], params = excel_i[ "params" ]) ???????????????? item.append(rr.status_code) ???????????? else : ???????????????? rr = requests.post(excel_i[ "url" ], data = excel_i[ "params" ]) ???????????????? item.append(rr.status_code) ???????? return item print (GetStatusCode().getStatusCode()) |
7.4.4 pytest断言设置并结合allure生成测试报告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import allure, pytest, os from requestdemo.getStatusCode import GetStatusCode get = GetStatusCode() statusCodes = get.getStatusCode() class TestReadExcel(): ???? def testReadExcel( self ): ???????? for code in statusCodes: ???????????? assert code = = 200 if __name__ = = "__main__" : ???? # 生成测试报告json ???? pytest.main([ "-s" , "-q" , '--alluredir' , 'report/result' , 'testreadexcel.py' ]) ???? # 将测试报告转为html格式 ???? split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' ???? os.system(split) |
7.4.5:测试报告展示
?现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?希望能帮助到你!【100%无套路免费领取】