
Python
文章平均质量分 70
达西布鲁斯
8年IT一线经验,历任DevOps和DevTest岗位,熟悉Python开发。关注API自动化测试、GUI自动化测试、性能测试、DevOps、CICD等方向
展开
-
Flask之项目设计(5)
1 包结构设计我们可以把应用程序中不同的组件分解成有联系的模块 — 一个包。模型的定义类一起放入 models.py,路由的定义放在 views.py 以及表单定义在 forms.py常用包结构设计如下:config.py #应用所需要的配置变量。requirements.txtrun.pyinstance/ config.py #包含了不应该出现在版本控制中的配置变量。 这...原创 2019-11-11 13:51:46 · 782 阅读 · 0 评论 -
Flask之WTF和SQLAlchemy(4)
1 Flask WTFWeb应用程序的一个重要方面是为用户提供用户界面。HTML提供了一个标签,用于设计界面。可以适当地使用Form(表单)元素,例如文本输入,单选按钮,选择等。用户输入的数据以Http请求消息的形式通过GET或POST方法提交给服务器端脚本。服务器端脚本必须从http请求数据重新创建表单元素。因此,实际上,表单元素必须定义两次 一次在HTML中,另一次在服务器端脚本中。...原创 2019-11-06 20:31:05 · 697 阅读 · 0 评论 -
Flask之Request请求(3)
对于web应用,客户端与服务端之间的数据交互至关重要。在 Flask 中由全局的 request 对象来提供这些信息。1 Request对象属性Request对象的重要属性如下:属性说明Form它是一个字典对象,包含表单参数及其值的键和值对。args解析查询字符串的内容,它是问号(?)之后的URL的一部分。Cookies保存Cookie名称和值的字典对象...原创 2019-11-05 16:44:02 · 2175 阅读 · 0 评论 -
Flask之模版(2)
Flask默认使用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。下面主要回顾模版的渲染使用,以及Jinja2的语法。1 模版渲染1.1 目录结构Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:场景1: 模块appl...原创 2019-11-04 14:15:04 · 756 阅读 · 0 评论 -
Flask之基础入门(1)
最近项目逐渐稳定,趁着不太忙的时候对之前搭建的自动化测试框架做些重构升级。现存的测试框架比较简单,主要功能是基于csv文件中定义的数据自动生成测试用例,然后使用pytest执行用例生成html格式报告。实际使用中,在macos上编辑csv文件很容易出错。基于此,我们决定将该平台重构封装成一个通用的自动化测试框架,QA能简单在页面上提交测试数据,也可以导入csv/yaml格式测试数据或者直接导入po...原创 2019-11-03 21:37:59 · 494 阅读 · 0 评论 -
mako模版库实践
介绍这几天在编写一个数据驱动测试框架,其中一个核心模块是根据数据输入,自动转换为测试用例代码。测试数据格式固定,对应的用例代码结构也相对稳定。基于此场景,联想到web页面根据数据从template渲染页面,决定使用类似的方式,采用模版库动态生成测试用例代码。Python库有两个常用的模版库:Jinja2和Mako。两个库功能都很齐全强大,Jinja2广泛用于各种语言环境如Java/Go,Mak...原创 2019-10-21 15:46:49 · 2435 阅读 · 0 评论 -
Python设计模式之外观模式(7)
外观模式(Facade Pattern):简化复杂对象的访问。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。1 介绍系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种...原创 2019-06-23 10:37:28 · 472 阅读 · 0 评论 -
Python设计模式之装饰器模式(6)
装饰器模式(Decorator Pattern):在不修改原对象结构的前提下,实现扩展对象功能。通常给一个对象添加新功能有三种方式: - 直接给对象所属的类添加方法。 - 使用『组合』 - 使用『继承』,优先使用组合而非继承。 装饰器模式提供了第四种选择,通过动态改变对象扩展对象功能。其他编程语言通常使用继承实现装饰器装饰器模式,而python内置了装饰器。装饰器有很多用途,比如数据校验,事务...原创 2019-06-22 11:46:31 · 250 阅读 · 0 评论 -
Python设计模式之适配器模式(5)
适配器模式(Adapter Pattern):用于解决接口不兼容的问题,作为两个不兼容接口之间的桥梁。1 介绍首先,解释一下不兼容接口的真正含义。如果我们希望把一个老组件用于一个新系统中,或者把一个新组件用于一个老系统中,不对代码进行任何修改两者就能够通信的情况很少见。但又并非总是能修改代码,或因为我们无法访问这些代码(例如,组件以外部库的方式提供),或因为修改代码本身就不切实际。在...原创 2019-06-20 21:32:54 · 432 阅读 · 0 评论 -
Python设计模式之建造者模式(3)
建造者模式(Builder Pattern)构造模式: 控制复杂对象的构造过程当对象需要多个部分组合起来一步步创建,并且创建和表示分离的时候。可以这么理解,你要买电脑,工厂模式直接返回一个你需要型号的电脑,但是构造模式允许你自定义电脑各种配置类型,组装完成后给你。这个过程你可以传入builder从而自定义创建的方式。1 介绍建造者模式(Builder Pattern)使用多个简单的对象...原创 2019-06-17 20:30:58 · 628 阅读 · 0 评论 -
Python设计模式之工厂模式(2)
工厂模式(Factory Pattern):解决对象创建问题,将对象的创建和使用解藕。1 介绍工厂模式(Factory Pattern),顾名思义就是我们可以通过一个指定的“工厂”获得需要的“产品”,在设计模式中主要用于抽象对象的创建过程,让用户可以指定自己想要的对象而不必关心对象的实例化过程。这样做的好处是用户只需通过固定的接口而不是直接去调用类的实例化方法来获得一个对象的实例,隐藏了实...原创 2019-06-16 17:10:26 · 600 阅读 · 0 评论 -
Python设计模式之原型模式(4)
原型模式(Prototype Pattern):复制已有的对象,实现功能复用和优化1 介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操...原创 2019-06-19 21:51:58 · 391 阅读 · 0 评论 -
Python高级用法之反射
1,什么是反射在程序开发中,常常会遇到这样的需求:在执行对象中的某个方法,或者在调用对象的某个变量,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入。举个具体的例子:当我们需要实现一个通用的DBM框架时,可能需要对数据对象的字段赋值,但我们无法预知用到这个框架的数据对象都有些什么字段,换言之,我们在写框架的时候需要通过某种机制访问未知的属...原创 2019-04-18 16:59:50 · 754 阅读 · 0 评论 -
Python设计模式之单例模式(1)
1,什么是设计模式1.1 设计模式分类软件设计中,设计模式是指软件设计问题的最佳推荐方案,一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。根据设计模式的参考书Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中所提到的,总共有 23 种设计模式。...原创 2019-04-23 10:51:24 · 395 阅读 · 0 评论 -
Python高级用法之消息队列zmq
1,ZMQ介绍ZMQ是一套嵌入式的网络链接库,是一个基于内存的消息队列,工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的快速足以胜任集群应用产品。它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务。套接字事实上是用于网络编程的标准...原创 2019-03-31 22:44:57 · 44088 阅读 · 0 评论 -
Python高级用法之分布式锁
1,数据一致性当多个进程/线程对同一个共享资源读写,会因为资源的争夺而出现混乱,导致数据不一致。如下图:在数据库的原始数据是 d0,上图的处理流程如下:t1 时刻,有两个数据源的数据 d1,d2 分别到达数据处理层,主进程分配线程 Merge1 处理 d1,Merge2 处理 d2,两者又同时(假设还是 t1 )从数据库获取原始数据 d0 t2 时刻,Merge1 合并完 d...原创 2019-04-20 17:57:41 · 6162 阅读 · 3 评论 -
Python设计模式之MVC模式(9)
MVC模式:Model-View-Controller模式,实现业务逻辑和展现逻辑解藕。1 介绍MVC模式既是一种设计模式,也是软件架构模式。比如流行的django框架就是mvc(MTV)模式。Model层负责和数据库交互,View层负责展现逻辑,Controller层负责粘合Model和View层,将各个部分解耦,使代码更易扩展和维护。模型—视图—控制器(Model-View-Con...原创 2019-06-26 14:57:38 · 1132 阅读 · 0 评论 -
Python设计模式之代理模式(10)
代理模式(Proxy Pattern):通过一层间接保护层实现更隐蔽的接口访问在访问真正的对象之前做一些操作。有四种常用的代理类型:A remote proxy.使得访问远程对象就像本地访问一样,例如网络服务器。隐藏复杂性,使得访问本地远程统一。比如ORM A virtual proxy。用来实现延迟访问,比如一些需要复杂计算的对象,python里可以实现lazy_property,性能...原创 2019-07-30 19:34:22 · 383 阅读 · 0 评论 -
Python中global和nolocal用法区别
在项目中遇到这样一个问题:定义了一个修饰器接收可变参数max_retries,实现http请求retry。def http_retry(max_retries=3): retries = max_retries def deco_retry(func): @wraps(func) def func_wrapper(*args, **kwar...原创 2019-10-09 16:19:33 · 1121 阅读 · 0 评论 -
Python设计模式之迭代器模式(17)
迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示.业务场景集合是编程中最常使用的数据类型之一。大部分集合使用简单列表存储元素。 但有些集合还会使用栈、 树、 图和其他复杂的数据结构。无论集合的构成方式如何, 它都必须提供某种访问元素的方式, 便于其他代码使用其中的元素。 集合应提供一种能够遍历元素的方式, 且保证它不会周而复始地...原创 2019-09-30 16:11:57 · 329 阅读 · 0 评论 -
Python设计模式之模版模式(16)
模版模式(The Template Pattern):抽象出算法公共部分从而实现代码复用。模板模式中,我们可以把代码中重复的部分抽出来作为一个新的函数,把可变的部分作为函数参数,从而消除代码冗余。一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。1 介绍现实生活中的例子:工人建造房子时,设计师设计的房间基本骨架结构都是一样的,工...原创 2019-09-30 11:04:04 · 504 阅读 · 1 评论 -
Python设计模式之策略模式(15)
策略模式(The Strategy Pattern): 动态选择算法策略。它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。1 介绍现实中的例子:大多数问题都可以使用多种方法来解决。以排序问题为例,对于以一定次...原创 2019-09-29 16:25:08 · 668 阅读 · 0 评论 -
Python设计模式之状态模式(14)
状态模式(The State Pattern):实现有限的状态机,类的行为是基于它的状态改变的。是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。...原创 2019-09-28 21:48:39 · 842 阅读 · 0 评论 -
Python设计模式之观察者模式(13)
观察者模式(The Observer Pattern):用来处理多个对象之间的发布订阅问题。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。有时,我们希望在一个对象的...原创 2019-09-27 15:10:57 · 411 阅读 · 0 评论 -
Python设计模式之命令模式(12)
命令模式(The Command Pattern):用来给应用添加Undo操作,将命令操作封装为对象,控制命令的执行时间和过程。命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。命令模式帮助我们把一个操作(undo,redo,copy,paste等)封装成一个对象,通...原创 2019-09-03 22:30:30 · 590 阅读 · 0 评论 -
Python设计模式之职责链模式(11)
职责链模式(Chain of Responsibility Pattern):创建链式对象用来接收广播消息。为请求创建了一个接收者对象的链,用来依次处理消息,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。职责链模式的定义如下:使多个对象都有...原创 2019-08-24 18:48:33 · 424 阅读 · 0 评论 -
Python设计模式之享元模式(8)
享元模式(Flyweight Pattern):复用现有的同类对象,改善资源使用主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。OOP编程中容易出现对象创建带来的性能和内存占用问题,需要满足以下条件:需要使用大量对象(pyth...原创 2019-06-24 16:46:04 · 348 阅读 · 0 评论 -
Python并发之异步aiohttp(8)
在我们写普通的爬虫程序时,经常会用到requests库用以请求网页并获得服务器响应。而在协程中,由于requests库提供的相关方法不是可等待对象(awaitable),使得无法放在await后面,因此无法使用requests库在协程程序中实现请求。官方专门提供了一个aiohttp库,用来实现异步网页请求等功能,就是异步版的requests库。1,aiohttp基本用法在官方文档中,推荐...原创 2019-02-23 20:51:04 · 2462 阅读 · 0 评论 -
Python并发之协程asyncio(7)
在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块。asyncio在python3.4后被内置在python中,使得python的协程创建变得更加方便。Python 3.5添加了async和await这两个关键字,分别用来替换asyncio.coroutine和yield from。自此,协程成为新的语法,而不再是一种生成器类型了。事件循环与协程的引入,可以...原创 2019-02-21 21:54:30 · 841 阅读 · 0 评论 -
Python并发之协程gevent数据结构和实践(6)
greenlet instances 之间的关系存在两种:仅有包含于 greenlet instances 集合的关系 同步关系,即存在协作关系第一种形式很常见,不同的 greenlet instance 之间没有交流,且没有共享数据需要进行操作,各自做各自的事情。对于第二种形式,gevent 提供了几种数据结构便于 greenlet instances 间进行同步。Gevent常用...原创 2019-01-23 16:45:04 · 2807 阅读 · 0 评论 -
Python高级用法之property
从其他语言转入python的程序员,可能会习惯性的实现getter(获取类属性)和setter(类属性赋值)方法,以实现对类属性的操作。在python中,为了方便对于属性的操作,自带了@property修饰器。property主要有两种使用场景:将类方法转换为只读属性 重新实现一个属性的setter和getter方法,控制属性的访问和赋值property主要有两种定义方式:方式一:...原创 2018-09-17 22:33:10 · 424 阅读 · 0 评论 -
Python高级用法之修饰器
修饰器定义:英文名叫Decorator,主要用来对功能函数进行润色,在原有功能的基础上添加一些额外修饰。有些地方也叫做切面函数,即对功能函数切面穿插新功能。修饰器能减少代码冗余重复,使整体风格更加优雅高效。常用场景:函数调用日志,函数性能统计,函数异常捕获,函数认证访问控制等。使用方法:就是在方法名前面加一个@XXX注解来为这个方法装饰一些东西。1,不带参数的修饰器##在函数...原创 2018-09-09 00:07:45 · 2074 阅读 · 0 评论 -
selenium自动化之setUp和tearDown(1)
unittest中setUp/tearDown和setUpclass/teardownclass的区别:1,执行继承了unittest.TestCase的类下每个test开头的方法(就是用例)时,都会执行setUp和tearDown如下面的例子所示:class CommonTest(Base): def setUp(self): base_page = Ba...原创 2018-09-08 17:58:44 · 2508 阅读 · 2 评论 -
Python测试框架nose之设计case(2)
官方链接:test tools1.nose 框架同unittest一样支持包,模块,类级别的setUp和tearDown所有在test模块下的函数,凡是符合正则testMatch条件((?:^|[\\b_\\.-])[Tt]est都封装入FunctionTestCase。test functions支持函数级别的setUp例:def setup_func():翻译 2014-11-25 23:02:23 · 1259 阅读 · 0 评论 -
Python测试框架nose基础(1)
1. 安装noselinux环境下安装(1)使用python的easy_install工具easy_install nose(2)使用pipi安装pip install nose(3)从官网下载源码安装python setup.py install注意:如果不是采用easy_install安装,将不能使用nose的第三方插件。2.nose的基本用法(原创 2014-11-25 22:25:25 · 5886 阅读 · 0 评论 -
python进阶之Unittest用法(2)
4. Test code组织结构4.1 在unittest中,test case都是测试类的实力,所以编写testcase时,必须预先定义测试子类。继承自Testcase或者FunctionTestcase。Testcase提供的assert*()方法是用于检测测试结果,官方说明:Note that in order to test something, we use one of原创 2014-11-25 22:10:43 · 1722 阅读 · 0 评论 -
Python基础之字符串
1.1.在python中,单引号,双引号,三引号,都可以用来标示字符串。 三引号可以用来标示字符块(即多行字符) 例如: print "hello world!"print 'hello world!'print '''hello world,this ismy first code.i lovepython''' 但是当字符串中已经包含有单引号(‘)或...原创 2014-11-24 22:56:06 · 625 阅读 · 0 评论 -
python进阶之Unittest写case(3)
官方文档:https://docs.python.org/2/library/unittest.html6.编写testcasetestcase子类中默认的方法名是runTestclass unittest.TestCase(methodName='runTest')testcase的实力默认有三种类型的方法:(1)执行case的环境相关方法setUp()运行c原创 2014-11-25 22:11:46 · 1521 阅读 · 0 评论 -
Python常用模块
sys为系统函数和得到命令行参数os为目录列表之类的操作系统函数re为正则表达式time 时间,日期,既有时间处理相的,也有转换时间格式的unittest为单元测试nose 单元测试框架loging 日志处理paramiko ssh远程连接原创 2014-11-25 23:48:06 · 498 阅读 · 0 评论 -
Python高级用法之描述符
Python内置的@property修饰器有个明显的缺点,就是不便复用。受它修饰的方法,无法为同一个类中的其他属性复用。和属性相关的方法,只能在子类里面共享,而与之无关的其他类,也无法复用同一份代码。例如:class Homework(object): def __init__(self): self._grade = 0 @property d...原创 2018-09-18 22:05:01 · 367 阅读 · 0 评论