Python中requests做接口测试的方法


Posted in Python onMay 30, 2021

一、介绍

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

二、前提

pip install requests

三、get的请求

3.1 GET无参请求

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

3.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/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中的表单提交

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",params=params)
        #print(r.status_code)
        return r.status_code

五、Requests响应

r.status_code        响应状态码
r.heards             响应头
r.cookies            响应cookies
r.text               响应文本
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+pytest+allure

7.1 流程如下

读取文件中的数据

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

通过断言验证返回状态码和200对比

生成allure的测试报告

7.2 模块总览

dataDemo(存放数据)>> readDemo(读取数据)

useRequests(发送请求)>>testDemo(生成报告)

Python中requests做接口测试的方法

7.3 读取csv文件流程

7.3.1 存储数据(csv)

通过excel另存为csv即可。

Python中requests做接口测试的方法

7.3.2 读取数据(readDemo)

Python中requests做接口测试的方法

代码展示

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请求接口返回状态码

Python中requests做接口测试的方法

代码展示

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生成测试报告

Python中requests做接口测试的方法

代码展示

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 测试报告展示

Python中requests做接口测试的方法

7.4 读取excle文件流程

7.4.1 存储数据(xlsx)

Python中requests做接口测试的方法

7.4.2 读取数据(readDemo)

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请求接口返回状态码

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生成测试报告

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:测试报告展示

Python中requests做接口测试的方法

到此这篇关于Python中requests做接口测试的方法的文章就介绍到这了,更多相关Python requests接口测试内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python三元运算符实现方法
Dec 17 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
Python实现二叉堆
Feb 03 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
python主线程捕获子线程的方法
Jun 17 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
python实现的自动发送消息功能详解
Aug 15 Python
Python使用进程Process模块管理资源
Mar 05 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
python 爬取华为应用市场评论
python 开心网和豆瓣日记爬取的小爬虫
May 29 #Python
You might like
PHP 字符串 小常识
2009/06/05 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
js的写法基础分析
2011/01/17 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
python科学计算之narray对象用法
2019/11/25 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
大学生自荐信
2013/12/11 职场文书
公益广告宣传方案
2014/02/28 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
学校团代会开幕词
2016/03/04 职场文书