精华内容
下载资源
问答
  • 最近有需求,开发WEB报表,请问大神们,python有相应模块可以调用么,比如:类似C#那种, 可以界面,又可以进行权限的管理。
  • 主要介绍了用Python的Django框架编写从Google Adsense中获得报表的应用,主要利用了官方的Google Adsense API,需要的朋友可以参考下
  • 1、Python的第三方单元测试框架,比自带unittest更简单和高效,支持315种以上的插件,同时兼容unittest框架。 2、Unittest框架迁移到pytest框架的时候不需要重写代码。 3、纯python代码的自动化测试框架。 4、可以很...

    Pytest框架简介
    1、Python的第三方单元测试框架,比自带unittest更简单和高效,支持315种以上的插件,同时兼容unittest框架。
    2、Unittest框架迁移到pytest框架的时候不需要重写代码。
    3、纯python代码的自动化测试框架。
    4、可以很好的与Jenkins集成。
    5、Allure支持pytest框架。
    与其它测试框架的比较:
    RF:报表好看、关键字语法
    Unittest:单元测试
    Pytest:加强版Unittest

    Pytest环境配置:
    安装:pip install -U pytest
    查看安装:pip show pytest
    在这里插入图片描述

    Pytest执行测试用例
    Pytest框架注意事项:
    .py测试文件必须以test_开头(或者以_test结尾)
    测试类必须以Test开头,并且不能有init方法
    测试方法必须以test_开头
    断言必须使用assert

    搭建项目
    1testcase–测试用例
    2Lib–库--模块自定义
    3报告report:log、html
    4data–测试数据
    5config–配置文件

    Pytest执行用例简单使用
    代码:
    在这里插入图片描述

    在terminal中执行:python 测试py文件(python 测试py文件 -s:表示输出print信息)
    在这里插入图片描述
    表示两个测试用例执行成功。
    如果不在terminal中运行,在main中执行可在main中pytest.main([‘-s’])。

    Pytest-html原生报告
    安装命令:pip install pytest-html在这里插入图片描述

    命令:python 测试py文件 --html=report.html
    执行后使用浏览器打开报告:在这里插入图片描述

    展开全文
  • 使用Python框架重命名财务报表(或其他文档) 建筑 应该很简单: virtualenv -p`哪个python3` env 源环境/ bin /激活 点安装-r requirements.txt -r dev-requirements.txt 运行测试 pytest 欢迎捐款 对新提取器的...
  • Mole 是纯python实现的一个极其轻量级的wsgi web框架。适合于喜欢DIY的人士,自己组装或者搭配web各个模块 (如:前端模板引擎,后端数据ORM,后端基础架子等等),代码参考了开源项目Bottle,Mole虽小但“五脏俱全”...
  • Python后台报表综合案例教程

    千人学习 2019-08-28 15:49:33
    课程背景: 企业里面很多系统管理后台,用easyui + highcharts + django 进行后台管理的整合,而这块资料在...学会使用easyui框架 3.学会使用highcharts 4.easyui_highcharts_django开发后面展示项目 案例截图: 
  • 金蝶EAS代码报表框架

    2017-07-03 14:33:00
    2019独角兽企业重金招聘Python工程师标准>>> ...

    界面

    报表界面

    报表展示界面 需要 继承 com.kingdee.eas.framework.report.client.CommRptBaseUI;

    注意事项:
       1,此界面只需要放一个table控件,其他什么也不需要啦,设置此table的铆钉,上固定 下不铆钉,左右等比
       2,发布
       3. 生成的实现类里面  增加方法 
    
    代码样例
    private void initKDtabe()
      {
        this.kDTable1.getDataRequestManager().addDataRequestListener(this);
        this.kDTable1.getDataRequestManager().setDataRequestMode(0);
        this.kDTable1.getStyleAttributes().setLocked(true);
        this.kDTable1.getSelectManager().setSelectMode(2);
        KDTableHelper.setEnterKeyJumpOrientation(this.kDTable1, 2);
        KDTableHelper.setTabKeyJumpOrientation(this.kDTable1, 2);
        enableExportExcel(this.kDTable1);
        this.kDTable1.getHeadMergeManager().setMergeMode(3);
        this.kDTable1.getSelectManager().setSelectMode(10);
      }
    

    以上方法 报表界面构造器里面调用 ,下面图中所示为其余报表界面方法说明

    报表界面

    过滤界面

    报表数据过滤需要过滤界面,继承 com.kingdee.eas.framework.report.client.CommRptBaseConditionUI;

    注意事项:
    1. 此界面 用于过滤界面,根据实际情况编写字段,比如 F7 绑定query,各字段的初始化工作
    2. 保存方案 
    3 .实现类里面 注意事项
    
    代码样例:

    过滤界面

    取数逻辑

         一般建议写到后台,那么 要建一个facade ,此facade 继承 
         com.kingdee.eas.framework.report.app.CommRptBaseControllerBean;
    
          建façade 的时候 必须要建方法,父类里面已经建好了报表所需方法,其他的方法根据自己需要
    
          createTempTable  这个方法 根据实际需要,创建临时表 _query  这个方法必须重写
    
    代码样例:

    facadefacade

    后端代码

    public RptParams createTempTable(Context arg0, RptParams arg1)
        throws BOSException, EASBizException
      {
        return super.createTempTable(arg0, arg1);
      }
    
      protected RptParams _query(Context ctx, RptParams params)
        throws BOSException, EASBizException
      {
        StringBuffer sql = new StringBuffer();
    
        sql.append(" SELECT ");
        sql.append(" t6.FNumber as caozuonum,");
        sql.append(" t2.FOperatorNam as caozuoyuanmae ,");
        sql.append(" t3.FName_l2 as fenchaname ,");
        sql.append(" t5.FGroupNam as groupnam ,");
        sql.append(" t4.FName_l2 as materialnam , ");
        sql.append(" sum(t2.FOutput) as chanliang , ");
        sql.append(" sum(t2.FCutpayment) as koukuan ");
        sql.append(" FROM T_BAS_DangCar t1 ");
        sql.append(" LEFT OUTER JOIN T_BAS_DangCarEntry t2 ");
        sql.append(" ON t1.FID = t2.FParentID ");
        sql.append(" LEFT OUTER JOIN T_ORG_Admin t3 ");
        sql.append(" ON t1.FShuplantID = t3.FID ");
        sql.append(" LEFT OUTER JOIN T_BD_Material t4 ");
        sql.append(" ON t1.FMaterialNamID = t4.FID ");
        sql.append(" LEFT OUTER JOIN T_BAS_Groupbasic t5 ");
        sql.append(" ON t1.FShugroupID = t5.FID ");
        sql.append(" LEFT OUTER JOIN T_BD_Person t6 ");
        sql.append(" ON t2.FOperatorNumID = t6.FID ");
        sql.append("  where 1=1 ");
    
        if ((params.getObject("admin") != null) && (!"".equals(params.getObject("admin")))) {
          sql.append(" and t1.FShuplantID = '" + params.getObject("admin") + "' ");
        }
    
        if ((params.getObject("group") != null) && (!"".equals(params.getObject("group")))) {
          sql.append(" and t1.FShugroupID = '" + params.getObject("group") + "'");
        }
    
        if ((params.getObject("person") != null) && (!"".equals(params.getObject("person")))) {
          sql.append(" and t2.FOperatorNumID = '" + params.getObject("person") + "'");
        }
    
        if ((params.getObject("material") != null) && (!"".equals(params.getObject("material")))) {
          sql.append(" and t1.FMaterialNamID = '" + params.getObject("material") + "'");
        }
    
        if ((params.getObject("riqi1") != null) && (!"".equals(params.getObject("riqi1")))) {
          sql.append(" and t1.FBizDate >= TO_DATE('" + (String)params.getObject("riqi1") + "')");
        }
    
        if ((params.getObject("riqi2") != null) && (!"".equals(params.getObject("riqi2")))) {
          sql.append(" and t1.FBizDate <= TO_DATE('" + (String)params.getObject("riqi2") + "')");
        }
        sql.append(" group by t6.FNumber,t2.FOperatorNam,t3.FName_l2,t5.FGroupNam,t4.FName_l2 ");
        RptParams rptparms = new RptParams();
        RptRowSet rptrowSet = executeQuery(sql.toString(), null, ctx);
        rptparms.setObject("rptrowset", rptrowSet);
        return rptparms;
      }
    

    转载于:https://my.oschina.net/u/3277181/blog/1142693

    展开全文
  • python+unittest框架整理

    2018-09-14 17:11:28
    1.单个用例维护在单个.py文件中可单个...3.加入日志,htlm报表,发送邮件功能 框架结构   结构说明: config:配置部分,浏览器种类和定位信息维护在此处 constant:常量部分,固定不变的数据维护在此处 data:...

    1.单个用例维护在单个.py文件中可单个执行,也可批量生成组件批量执行

    2.对定位参数,定位方法,业务功能脚本,用例脚本,用例批量执行脚本,常用常量进行分层独立,各自维护在单独的.py文件中

    3.加入日志,htlm报表,发送邮件功能

    框架结构

     

    结构说明:

    config:配置部分,浏览器种类和定位信息维护在此处

    constant:常量部分,固定不变的数据维护在此处

    data:存放用于参数化的文本表格等文件

    encapsulation:定位等selenium功能二次封装在此处

    error_picture:存放错误截图

    function:业务功能脚本维护在此处

    log:存放log类

    report:存放测试报告文件

    test_case:存放用例文件

    all_case.py:用来执行所有用例

    debug_case.py:本人调试用的,可以忽略

    tst.log:生成的日志

    逐个介绍各个包下面的.py文件,并附上源码(说明见注释哈哈~):

     

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-11 13:42
     4 # config/config_01.py
     5 from selenium import webdriver
     6 import time
     7 from selenium.webdriver.common.action_chains import *
     8 
     9 
    10 # config配置部分
    11 
    12 # 浏览器种类维护在此处
    13 browser_config = {
    14     'ie': webdriver.Ie,
    15     'chrome': webdriver.Chrome
    16 }
    17 
    18 # 定位信息维护在此处,维护结构由外到内为:页面名称--页面下元素名称--元素的定位方式+参数
    19 locat_config = {
    20     '博客园首页': {
    21         '找找看输入框': ['id', 'zzk_q'],
    22         '找找看按钮': ['xpath', '//input[@value="找找看"]']
    23     }
    24 }

    复制代码

    复制代码

    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3 # @Time    : 2017-05-15 13:20
    4 # constant/constant_1.py
    5 
    6 # 常量部分(固定不变使用频繁的参数维护在此处)
    7 LOGIN_URL = 'https://www.cnblogs.com/'

    复制代码

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-15 13:20
     4 # encapsulation/encapsulation.py
     5 
     6 # 封装部分维护在此
     7 
     8 from config.config_01 import locat_config
     9 from log.log import Logger
    10 from selenium.webdriver.support.wait import WebDriverWait
    11 
    12 from selenium.webdriver.support import expected_conditions as EC
    13 
    14 class UIHandle():
    15     logger = Logger()
    16 
    17     # 构造方法,用来接收selenium的driver对象
    18     @classmethod
    19     def __init__(cls, driver):
    20         cls.driver = driver
    21 
    22     # 输入地址
    23     @classmethod
    24     def get(cls, url):
    25         cls.logger.loginfo(url)
    26         cls.driver.get(url)
    27 
    28     # 关闭浏览器驱动
    29     @classmethod
    30     def quit(cls):
    31         cls.driver.quit()
    32 
    33     # element对象(还可加入try,截图等。。。)
    34     @classmethod
    35     def element(cls, page, element):
    36         # 加入日志
    37         cls.logger.loginfo(page)
    38         # 加入隐性等待
    39         # 此处便可以传入config_o1中的dict定位参数
    40         el = WebDriverWait(cls.driver, 10).until(EC.presence_of_element_located(locat_config[page][element]))
    41         # 加入日志
    42         cls.logger.loginfo(page+'OK')
    43         return el
    44     # element对象(还未完成。。。)
    45     def elements(cls, page, element):
    46         # 加入日志
    47         cls.logger.loginfo(page)
    48         # 加入隐性等待
    49         WebDriverWait(cls.driver, 10)
    50         els = cls.driver.find_elements(*locat_config[page][element])
    51         # 注意返回的是list
    52         return els
    53 
    54     # send_keys方法
    55     @classmethod
    56     def Input(cls, page, element, msg):
    57         el = cls.element(page, element)
    58         el.send_keys(msg)
    59 
    60     # click方法
    61     @classmethod
    62     def Click(cls, page, element):
    63         el = cls.element(page, element)
    64         el.click()

    复制代码

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-15 13:22
     4 # function/function_01.py
     5 # 业务功能脚本(用例脚本可调用此处的功能脚本)
     6 
     7 from encapsulation.encapsulation import UIHandle
     8 from constant.constant_1 import LOGIN_URL
     9 from config.config_01 import browser_config
    10 from time import sleep
    11 
    12 # 打开博客园首页,进行找找看搜索功能
    13 def search(msg):
    14     # 打开浏览器
    15     driver = browser_config['chrome']()
    16     # 传入driver对象
    17     uihandle = UIHandle(driver)
    18     #输入url地址
    19     uihandle.get(LOGIN_URL)
    20     # 调用二次封装后的方法,此处可见操作了哪个页面,哪个元素,msg是要插入的值,插入值得操作在另外一个用例文件中传入
    21     uihandle.Input('博客园首页', '找找看输入框', msg)
    22     uihandle.Click('博客园首页', '找找看按钮')
    23     uihandle.quit()

    复制代码

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-17 11:19
     4 # log/log.py
     5 
     6 import logging
     7 import logging.handlers
     8 
     9 # 日志类
    10 class Logger():
    11     LOG_FILE = 'tst.log'
    12 
    13     handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) # 实例化handler
    14     fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
    15 
    16     formatter = logging.Formatter(fmt)   # 实例化formatter
    17     handler.setFormatter(formatter)      # 为handler添加formatter
    18 
    19     logger = logging.getLogger('tst')    # 获取名为tst的logger
    20     logger.addHandler(handler)           # 为logger添加handler
    21     logger.setLevel(logging.DEBUG)
    22     def loginfo(self, message):
    23         self.logger.info(message)
    24 
    25     def logdebug(self, message):
    26         self.logger.debug(message)

    复制代码

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-15 15:30
     4 # test_case/test_case_1/start_case_01.py
     5 
     6 import unittest
     7 from function.function_01 import *
     8 # 用例
     9 class Case_02(unittest.TestCase):
    10     u'''哇塞好玩'''
    11     def setUp(self):
    12         pass
    13 
    14     def test_zzk(self):
    15         u'''输入哇塞好玩后点击找找看'''
    16         search("哇塞好玩")
    17         print('打印方法名:test_zzk')
    18 
    19     def tearDown(self):
    20         pass
    21 
    22 if __name__ == "__main__":
    23     unittest.main()

    复制代码

    复制代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @Time    : 2017-05-10 16:34
     4 # all_case.py
     5 
     6 import unittest
     7 import HTMLTestRunner
     8 import time,os,datetime
     9 import smtplib
    10 from email.mime.text import MIMEText
    11 from email.mime.multipart import MIMEMultipart
    12 from email.mime.image import MIMEImage
    13 
    14 
    15 
    16 # 取test_case文件夹下所有用例文件
    17 def creatsuitel(lists):
    18     testunit = unittest.TestSuite()
    19     # discover 方法定义
    20     discover = unittest.defaultTestLoader.discover(lists, pattern='start_*.py', top_level_dir=None)
    21     #discover 方法筛选出来的用例,循环添加到测试套件中
    22     for test_suite in discover:
    23         for test_case in test_suite:
    24             testunit.addTests(test_case)
    25             print(testunit)
    26     return testunit
    27 list_1 = 'test_case\\test_case_1'
    28 alltestnames = creatsuitel(list_1)
    29 
    30 #取前面时间加入到测试报告文件名中
    31 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
    32 filename = "report\\"+now+'result.html' #定义个报告存放路径,支持相对路径。
    33 fp = open(filename, 'wb')
    34 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='Report_title', description='Report_description')
    35 
    36 if __name__ == "__main__":
    37     # 执行测试用例集并生成报告
    38     runner = unittest.TextTestRunner()

    复制代码

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    RT

    转载于:https://my.oschina.net/treemanfm/blog/14300

    展开全文
  • 目 录 背 景   时不时接到客户给的一系列Excel给到的一批电子设备SN号,让我给他查一下这些设备号对应的电子设备...一开始我想给客户大大做个带参数的报表,但是考虑到客户也是架构师般的技术人才,报表着实体现不...
  • Python 编写测试用例,简便易用 可以用 文件系统目录层次 对应 手工测试用例 层次结构 灵活的 初始化清除 机制 可以灵活挑选测试用例执行 利用第三方插件,可以生成不错的报表 安装 直接...
  • Python 作为近年来热门的语言,在各个领域都有独特的...利用 Frame 搭建导航与工具框架 模块化嵌入各个功能 使用上述基本功能完成个人日常收支报表的整理 当前内容版权归码字科技所有并授权显示,盗版必究。阅读原文
  • 最近把测试框架优化了一下,原本生成的报表时txt格式的,现在搞成html格式。主要步骤如下 首先找个html处理工具,这样处理html会简单很多 我网上找了一下发现phy停好用,在这里非常感谢pyh的作者 phy源码如下 # @file...
  • Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关生成报表的插件,执行测试时会报错。原因多是因为涉及到的插件或相关代码是用python2编写的。我们通过python2自带的工具2to3.py...
  • 预期框架整理目标:1....加入日志,htlm报表,发送邮件功能框架结构 结构说明:config:配置部分,浏览器种类和定位信息维护在此处constant:常量部分,固定不变的数据维护在此处data:存放用于参数化的文...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • CAT作为服务端项目基础组件,提供了Java,C / C ++,Node.js,Python,Go等多语言客户端,已经在美团评论的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息物理,配置系统等)深度集成,为...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • Data Brewery 是一组 Python 框架和工具,用于数据处理和分析。主要功能包括:聚合数据浏览、报表和多维建模。提供一组 OLAP HTTP 服务的轻量级 Python 框架。此外还包括 ETL 数据处理框架,数据审计等。 ...
  • Web开发是重要的后端技术开发方向,而Python的Web框架Flask因为它的简洁设计、开发快捷而被各大公司广泛的采用,使用Flask可以快速开发一个网页实现内容管理、数据展示、报表可视化,也可以用Flask开发后台服务用于...
  • 先说下我的情况,我用过Python写过爬虫,用flask框架写过网站,用过Power BI做过可视化报表。可以说,我对Python的基本使用很熟悉,对数据库有操作经验,对数据和可视化也有一点见解。但就是这种条件,去年投了三...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

python报表框架

python 订阅