iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python requests实现上传excel数据流
  • 127
分享到

python requests实现上传excel数据流

2024-04-02 19:04:59 127人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录requests上传excel数据流数据驱动之python+requests+excel数据驱动1. 首先设计好测试用例2.建立文件结构3.封装模块4.配置文件5.将ATP文件6

requests上传excel数据流

headers=self.headers
        #获取导入模版
        file_home = self.import_template
        log.info(file_home)
        
        wb = load_workbook(filename=file_home)
        ws = wb['sheet1']
        # 修改产废单位名称,以及备注
        ws['b3'] = 'itest产废单位'+self.dic["t"]
        ws['s3'] = 'i原料销售'+self.dic["t"]
        wb.save(file_home)
        url=self.url_1+"/companies/import?companyType=2"
        payload={}
        
        m=MultipartEncoder(
            fields={
                "parent_dir":'/',
                "name":'file',
                "filename":'name.xlsx',
                'file':('name.xlsx',open(file_home,'rb'),'application/vnd.ms-excel')
            }
        )
        headers['Content-Type']=m.content_type
        r=requests.post(url,headers=headers,data=m)
        log.info(r.JSON())

数据驱动之Python+requests+excel

数据驱动

是根据数据来测试的,如读取 excel表中的测试用例自动填写测试结果,发送测试报告包括以下模块:

  • 1.获取用例
  • 2.调用接口
  • 3.校验结果
  • 4.发送测试报告
  • 5.异常处理
  • 6.日志模块

1. 首先设计好测试用例

2.建立文件结构

自动化测试框架命名为:ATP,bin目录下写主程序,cases目录下放测试用例,conf目录下放配置文件,lib目录下放各个封装好的模块,logs目录下放日志文件,和readme文件。

3.封装模块

common.py:封装读取excel用例、调用接口、检验结果、写入报告这几个模块。

"""
第一步:读取excel中用例
第二步:根据用例发送请求
第三步:校验结果
第四步:将测试结果、返回报文写入excel
"""
import xlrd,requests
from xlutils import copy
from lib.log import atp_log
class OpCase(object):
    def get_case(self,file_path):
        cases= []   #定义一个列表存放所有的cases
        if file_path.endswith('.xls') or file_path.endswith('.xlsx'):
           try:
               book = xlrd.open_workbook(file_path)
               sheet = book.sheet_by_index(0)
               for i in range(1,sheet.nrows):
                   row_data = sheet.row_values(i)   #获取的每一行数据存到列表row_data
                   cases.append(row_data[4:8])
               atp_log.info('共读取%s条用例'%(len(cases)))
               self.file_path = file_path   #因为该函数已经传了参数路径,为方便write_excel引用,在此实例化
           except Exception as e:
               atp_log.error('[%s]用例获取失败,错误信息:%s'%(file_path,e))
        else:
            atp_log.error('用例文件不合法,%s'%file_path)
        return cases
    def my_request(self,url,method,data):
        data = self.dataToDict(data)
        try:
            if method.upper() == 'POST':
                res = requests.post(url,data).text
            elif method.uper() == 'GET':
                res = requests.get(url,params=data).text
            else:
                atp_log.warning('该请求方式暂不支持')
                res = '该请求方式暂不支持'
        except Exception as e:
            msg = '【%s】接口调用失败,%s'%(url,e)
            atp_log.error(msg)
            res = msg
        return res
    def dataToDict(self,data):  #把数据转成字典。
        res = {}
        data = data.split(',')
        for d in data:  #
            k, v = d.split('=')
            res[k] = v
    def check_res(self,res,check):  #res:实际结果,check:预期结果
        res = res.replace('": "','=').replace('": ','=')
        for c in check.split(','):
            if c not in res:
                atp_log.info('结果校验失败,预期结果:【%s】,实际结果【%s】'%(c,res))
                return '失败'
            return '成功'
    def write_excel(self,case_res):
        book = xlrd.open_workbook(self.file_path)
        new_book = copy.copy(book)
        sheet = new_book.get_sheet(0)
        row = 1
        for case_case in case_res:
            sheet.write(row,8,case_case[0])
            sheet.write(row,9,case_case[1])
            row += 1
        new_book.save(self.file_path.replace('xlsx','xls'))

log.py:封装日志模块

import logging,os
from logging import handlers
from conf import setting
class Mylogger():
    def __init__(self,file_name,level='info',backCount=5,when='D'):
        logger = logging.getLogger()  # 先实例化一个logger对象,先创建一个办公室
        logger.setLevel(self.get_level(level))  # 设置日志的级别
        # f1 = logging.FileHandler(filename='a.log',mode='a',encoding='utf-8')    #找到写日志文件的这个人
        c1 = logging.StreamHandler()  # 负责往控制台输出的
        b1 = handlers.TimedRotatingFileHandler(filename=file_name, when=when, interval=1, backupCount=backCount, encoding='utf-8')
        fmt = logging.FORMatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
        c1.setFormatter(fmt)
        b1.setFormatter(fmt)
        logger.addHandler(c1)
        logger.addHandler(b1)
        self.logger = logger
    def get_level(self,str):
        level = {
            'debug':logging.DEBUG,
            'info':logging.INFO,
            'warm':logging.WARNING,
            'error':logging.ERROR
        }
        str = str.lower()
        return level.get(str)
path = os.path.join(setting.LOG_PATH,setting.LOG_NAME)
atp_log = Mylogger(path,'debug').logger
#直接在这里实例化,用的时候不用再实例化了
#别的地方用的时候,直接atp_log.warnning('xxxx')

send_mail.py:封装发送邮件模块

import yagmail
from conf import setting
from lib.log import atp_log
def sendmail(title,content,attrs=None):
    m = yagmail.SMTP(host=setting.MAIL_HOST,user=setting.MAIL_USER,
                 passWord=setting.MAIL_PASSWRD,smtp_ssl=True)
    m.send(to=setting.TO,
           subject=title,
           contents = content,
           attachments = attrs)
    atp_log.info('发送邮件完成')

4.配置文件

setting.py,配置文件:设置邮件地址、日志默认级别、用例存放路径、日志存放路径、日志文件名

import os
BASE_PATH = os.path.dirname(
    os.path.dirname(os.path.abspath(__file__))
)   #三层目录定位到ATP目录
MAIL_HOST = 'smtp.qq.com'
MAIL_USER='12*****89@qq.com'
MAIL_PASSWRD = 'gjn*****bcgh'
TO = [
    '12*****9@qq.com'
]
LEVEL = 'debug' #设置日志默认级别
LOG_PATH = os.path.join(BASE_PATH,'logs')   #日志文件在logs目录下
CASE_PATH = os.path.join(BASE_PATH,'cases') #用例文件在cases目录下
LOG_NAME = 'atp_log'    #设置日志文件名

5.将ATP文件

Mark directory  as Sources Root

6.编写主程序

start.py

import os,sys
BASE_PATH = os.path.dirname(
    os.path.dirname(os.path.abspath(__file__))
)
sys.path.insert(0,BASE_PATH)
from lib.common import OpCase
from lib.send_mail import sendmail
from conf import setting
class CaseRun(object):
    def find_case(self):
        op = OpCase()
        for f in os.listdir(setting.CASE_PATH): #每次循环的时候读一个excel
            abs_path = os.path.join(setting.CASE_PATH,f)
            case_list = op.get_case(abs_path)
            res_list = []
            pass_count,fail_count= 0,0
            for case in case_list:  #循环每一个excel里面的所有用例
                url,method,req_data,check = case
                res = op.my_request(url,method,req_data)    #调用完接口返回的结果
                status = op.check_res(res,check)
                res_list.append([res,status])
                if status == '通过':
                    pass_count += 1
                else:
                    fail_count += 1
            op.write_excel(res_list)
            msg = '''
            xx你好,
                本次共运行%s条用例,通过%s条,失败%s条。
            '''%(len(res_list),pass_count,fail_count)
            sendmail('测试用例运行结果',content=msg,attrs=abs_path)
CaseRun().find_case()

OK,数据驱动自动化测试框架编写完成,运行 start.py 程序,收到邮件内容如下:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python requests实现上传excel数据流

本文链接: https://www.lsjlt.com/news/138949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python requests实现上传excel数据流
    目录requests上传excel数据流数据驱动之python+requests+excel数据驱动1. 首先设计好测试用例2.建立文件结构3.封装模块4.配置文件5.将ATP文件6...
    99+
    2024-04-02
  • 怎么用python requests实现上传excel数据流
    本篇内容主要讲解“怎么用python requests实现上传excel数据流”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用python requests实现上传exc...
    99+
    2023-06-29
  • 用Python的requests库实现自动上传文件
    女朋友下班后听她吐槽自己领导安排了一件又要让她加班的工作。大致任务是:在公司网址上为近10万客户上传签订的合同的基础信息并上传对应的资料附件。月底前必须完成,人工一天才传了1000左右,按这个节奏根本...
    99+
    2023-09-09
    python 开发语言
  • Java实现上传Excel文件并导入数据库
    目录Java实现上传Excel文件并导出到数据库 1、导入依赖2、domain3、utils4、Controller5、xmlJava实现上传Excel文件并导出到数据库 1、导入...
    99+
    2024-04-02
  • python 使用第三方库requests-toolbelt 上传文件流的示例
    python 使用第三方库requests-toolbelt 上传文件流,内容如下所示: # pip install requests-toolbelt 使用第三方库上传文件流 f...
    99+
    2024-04-02
  • Vue怎么实现Excel上传功能
    这篇文章主要讲解了“Vue怎么实现Excel上传功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么实现Excel上传功能”吧!1、HTML部分<Col span=&...
    99+
    2023-07-04
  • Python如何实现数据写入Excel
    这篇文章主要讲解了“Python如何实现数据写入Excel”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何实现数据写入Excel”吧!写入后的格式如下图所示:以下为数据用例:i...
    99+
    2023-06-15
  • python实现ftp上传
    #!/usr/bin/python2.7serviceip12='172.16.64.12'serviceip13='172.16.64.13'user='ebossapp'password12=',Mb(Jo0@'password13='...
    99+
    2023-01-31
    上传 python ftp
  • django怎么实现数据上传到数据库
    Django提供了多种方法将数据上传到数据库,以下是其中的一种常用方法:1. 定义数据库模型:首先需要在models.py文件中定义...
    99+
    2023-09-26
    django 数据库
  • Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现
    本篇内容主要讲解“Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+Requests+PyT...
    99+
    2023-07-05
  • Qt怎么用QNetwork实现上传数据
    这篇文章主要介绍了Qt怎么用QNetwork实现上传数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt怎么用QNetwork实现上传数据文章都会有所收获,下面我们一起来看看吧。1、利用Qt提供的类实现向服务...
    99+
    2023-07-05
  • Django怎么上传excel表格并将数据写入数据库
    本文小编为大家详细介绍“Django怎么上传excel表格并将数据写入数据库”,内容详细,步骤清晰,细节处理妥当,希望这篇“Django怎么上传excel表格并将数据写入数据库”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-02
  • Python实现修改Excel文件的元数据
    目录应用场景效果如下所示测试数据源代码源代码说明应用场景 这段代码可以用于修改Excel文件的元数据,例如作者、主题、描述等,通过使用Python和Openpyxl模块,以及wxPy...
    99+
    2023-05-18
    Python修改Excel元数据 Python修改Excel数据 Python修改Excel Python Excel
  • Python怎么实现Excel数据快速合并
    这篇文章主要介绍了Python怎么实现Excel数据快速合并,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些python的数据类型:1. 数字类型,...
    99+
    2023-06-14
  • elemetUi 组件--el-upload如何实现上传Excel文件
    这篇文章将为大家详细讲解有关elemetUi 组件--el-upload如何实现上传Excel文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。elemetUi 组件--...
    99+
    2024-04-02
  • python实现FTP上传下载
    要求:支持多用户在线的FTP程序 要求:1、用户加密认证2、允许同时多用户登录3、每个用户有自己的家目录 ,且只能访问自己的家目录4、对用户进行磁盘配额,每个用户的可用空间不同5、允许用户在ftp server上随意切换目录6、允许用户查看...
    99+
    2023-01-31
    上传下载 python FTP
  • Vue + iView实现Excel上传功能的完整代码
    1、HTML部分 <Col span="2">上传文件:</Col> <Col span="22" class="uploadExcelBox"&g...
    99+
    2024-04-02
  • fastadmin实现导出Excel和导入Excel数据
    public function export() { if ($this->request->isPost()) { require_once(VENDOR_...
    99+
    2023-08-31
    php Powered by 金山文档
  • Python怎么实现Excel数据读取和写入
    这篇“Python怎么实现Excel数据读取和写入”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现Exce...
    99+
    2023-06-30
  • python操作excel实现数据清洗的示例
    本文将为大家详细介绍“python操作excel实现数据清洗的示例”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“python操作excel实现数据清洗的示例”能够给你意想不到的收获,请大家跟着小编的思路慢慢深...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作