自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

布鲁斯

8年IT一线经验,历任DevOps和DevTest岗位,熟悉Python开发。关注API自动化测试、GUI自动化测试、性能测试、DevOps、CICD等方向

  • 博客(83)
  • 收藏
  • 关注

原创 前端web之vue组件(7)

环境准备安装npmbrew install npm安装cnpm在国内,使用淘宝的镜像会比较快安装一些包。npm install -g cnpm --registry=https://registry.npm.taobao.org初始化vue项目vue init webpack front(venv3.7) bruce-mac-pro: bruce.xu$ vue init webpack front? Project name portal? Project descri

2020-08-19 10:30:41 364

原创 前端web之vue基础(6)

Vue基础vue.js是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。环境准备:安装npmbrew install npm安装cnpm在国内,使用淘宝的镜像会比较快安装一些包。npm install -g cnpm --registry=https://reg...

2020-06-30 22:50:45 1345

原创 前端web之JavaScript DOM(5)

JS HTML DOM当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。通过 HTML DOM,JavaScript 能够访问和改变 HTML 文档的所有元素。DOM文档操作查找 HTML 元素方法描述例子document.getElementById(id)通过元素 id 来查找元素查找 id=“intro” 的元...

2020-03-07 15:56:52 411

原创 前端web之JavaScript语法(4)

本节主要归纳总结JavaScript语法。

2020-03-02 20:49:35 264

原创 前端web之JavaScript基础(3)

JavaScript是一种脚本语言,可以用来创建动态更新的内容,控制多媒体,制作图像动画等。主要用于交互式更新页面。用途客户端JavaScript 语言的核心包含一些普遍的编程特性,可用于以下场景:在变量中储存有用的值。比如从浏览器接受数据,然后将其储存到变量中再做额外的业务逻辑处理操作一段文本或者元素,改变其外观或者行为。运行代码以响应网页中发生的特定事件。上文的示例中,我们用一个 ...

2020-02-19 16:32:01 238

原创 前端web之CSS基础(2)

介绍CSS用于设计风格和布局。比如,使用CSS来更改内容的字体、颜色、大小、间距,将内容分为多列,或者添加动画及其他的装饰效果。CSS基础

2020-02-13 22:22:54 343

原创 前端web之HTML基础(1)

介绍web网页通常由三个部分构成,即HTML、CSS、JavaScript,合称网页三剑客。其中,HTML:控制页面的结构,即页面的布局。如文档段落、表单、图片。CSS:控制页面的表现,也就是使页面变得好看。如字体、颜色、图片大小。JS:控制页面的行为,和用户产生交互。如用户点击button后刷新页面,显示更新后的信息。HTML基础页面结构HTML是一种标记语言(markup lan...

2019-12-31 21:53:33 298

原创 Flask之项目设计(5)

1 包结构设计我们可以把应用程序中不同的组件分解成有联系的模块 — 一个包。模型的定义类一起放入 models.py,路由的定义放在 views.py 以及表单定义在 forms.py常用包结构设计如下:config.py #应用所需要的配置变量。requirements.txtrun.pyinstance/ config.py #包含了不应该出现在版本控制中的配置变量。 这...

2019-11-11 13:51:46 682

原创 Flask之WTF和SQLAlchemy(4)

1 Flask WTFWeb应用程序的一个重要方面是为用户提供用户界面。HTML提供了一个标签,用于设计界面。可以适当地使用Form(表单)元素,例如文本输入,单选按钮,选择等。用户输入的数据以Http请求消息的形式通过GET或POST方法提交给服务器端脚本。服务器端脚本必须从http请求数据重新创建表单元素。因此,实际上,表单元素必须定义两次 一次在HTML中,另一次在服务器端脚本中。...

2019-11-06 20:31:05 597

原创 Flask之Request请求(3)

对于web应用,客户端与服务端之间的数据交互至关重要。在 Flask 中由全局的 request 对象来提供这些信息。1 Request对象属性Request对象的重要属性如下:属性说明Form它是一个字典对象,包含表单参数及其值的键和值对。args解析查询字符串的内容,它是问号(?)之后的URL的一部分。Cookies保存Cookie名称和值的字典对象...

2019-11-05 16:44:02 2010

原创 Flask之模版(2)

Flask默认使用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。下面主要回顾模版的渲染使用,以及Jinja2的语法。1 模版渲染1.1 目录结构Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:场景1: 模块appl...

2019-11-04 14:15:04 671

原创 Flask之基础入门(1)

最近项目逐渐稳定,趁着不太忙的时候对之前搭建的自动化测试框架做些重构升级。现存的测试框架比较简单,主要功能是基于csv文件中定义的数据自动生成测试用例,然后使用pytest执行用例生成html格式报告。实际使用中,在macos上编辑csv文件很容易出错。基于此,我们决定将该平台重构封装成一个通用的自动化测试框架,QA能简单在页面上提交测试数据,也可以导入csv/yaml格式测试数据或者直接导入po...

2019-11-03 21:37:59 416

原创 mako模版库实践

介绍这几天在编写一个数据驱动测试框架,其中一个核心模块是根据数据输入,自动转换为测试用例代码。测试数据格式固定,对应的用例代码结构也相对稳定。基于此场景,联想到web页面根据数据从template渲染页面,决定使用类似的方式,采用模版库动态生成测试用例代码。Python库有两个常用的模版库:Jinja2和Mako。两个库功能都很齐全强大,Jinja2广泛用于各种语言环境如Java/Go,Mak...

2019-10-21 15:46:49 2062

原创 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 1029

原创 Python设计模式之迭代器模式(17)

迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示.业务场景集合是编程中最常使用的数据类型之一。大部分集合使用简单列表存储元素。 但有些集合还会使用栈、 树、 图和其他复杂的数据结构。无论集合的构成方式如何, 它都必须提供某种访问元素的方式, 便于其他代码使用其中的元素。 集合应提供一种能够遍历元素的方式, 且保证它不会周而复始地...

2019-09-30 16:11:57 243

原创 Python设计模式之模版模式(16)

模版模式(The Template Pattern):抽象出算法公共部分从而实现代码复用。模板模式中,我们可以把代码中重复的部分抽出来作为一个新的函数,把可变的部分作为函数参数,从而消除代码冗余。一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。1 介绍现实生活中的例子:工人建造房子时,设计师设计的房间基本骨架结构都是一样的,工...

2019-09-30 11:04:04 383 1

原创 Python设计模式之策略模式(15)

策略模式(The Strategy Pattern): 动态选择算法策略。它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。1 介绍现实中的例子:大多数问题都可以使用多种方法来解决。以排序问题为例,对于以一定次...

2019-09-29 16:25:08 581

原创 Python设计模式之状态模式(14)

状态模式(The State Pattern):实现有限的状态机,类的行为是基于它的状态改变的。是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。...

2019-09-28 21:48:39 757

原创 Python设计模式之观察者模式(13)

观察者模式(The Observer Pattern):用来处理多个对象之间的发布订阅问题。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。有时,我们希望在一个对象的...

2019-09-27 15:10:57 328

原创 Python设计模式之命令模式(12)

命令模式(The Command Pattern):用来给应用添加Undo操作,将命令操作封装为对象,控制命令的执行时间和过程。命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。命令模式帮助我们把一个操作(undo,redo,copy,paste等)封装成一个对象,通...

2019-09-03 22:30:30 445

原创 Python设计模式之职责链模式(11)

职责链模式(Chain of Responsibility Pattern):创建链式对象用来接收广播消息。为请求创建了一个接收者对象的链,用来依次处理消息,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。职责链模式的定义如下:使多个对象都有...

2019-08-24 18:48:33 355

原创 Python设计模式之代理模式(10)

代理模式(Proxy Pattern):通过一层间接保护层实现更隐蔽的接口访问在访问真正的对象之前做一些操作。有四种常用的代理类型:A remote proxy.使得访问远程对象就像本地访问一样,例如网络服务器。隐藏复杂性,使得访问本地远程统一。比如ORM A virtual proxy。用来实现延迟访问,比如一些需要复杂计算的对象,python里可以实现lazy_property,性能...

2019-07-30 19:34:22 317

原创 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 1011

原创 Python设计模式之享元模式(8)

享元模式(Flyweight Pattern):复用现有的同类对象,改善资源使用主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。OOP编程中容易出现对象创建带来的性能和内存占用问题,需要满足以下条件:需要使用大量对象(pyth...

2019-06-24 16:46:04 275

原创 Python设计模式之外观模式(7)

外观模式(Facade Pattern):简化复杂对象的访问。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。1 介绍系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种...

2019-06-23 10:37:28 401

原创 Python设计模式之装饰器模式(6)

装饰器模式(Decorator Pattern):在不修改原对象结构的前提下,实现扩展对象功能。通常给一个对象添加新功能有三种方式: - 直接给对象所属的类添加方法。 - 使用『组合』 - 使用『继承』,优先使用组合而非继承。 装饰器模式提供了第四种选择,通过动态改变对象扩展对象功能。其他编程语言通常使用继承实现装饰器装饰器模式,而python内置了装饰器。装饰器有很多用途,比如数据校验,事务...

2019-06-22 11:46:31 199

原创 Python设计模式之适配器模式(5)

适配器模式(Adapter Pattern):用于解决接口不兼容的问题,作为两个不兼容接口之间的桥梁。1 介绍首先,解释一下不兼容接口的真正含义。如果我们希望把一个老组件用于一个新系统中,或者把一个新组件用于一个老系统中,不对代码进行任何修改两者就能够通信的情况很少见。但又并非总是能修改代码,或因为我们无法访问这些代码(例如,组件以外部库的方式提供),或因为修改代码本身就不切实际。在...

2019-06-20 21:32:54 356

原创 Python设计模式之原型模式(4)

原型模式(Prototype Pattern):复制已有的对象,实现功能复用和优化1 介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操...

2019-06-19 21:51:58 338

原创 Python设计模式之建造者模式(3)

建造者模式(Builder Pattern)构造模式: 控制复杂对象的构造过程当对象需要多个部分组合起来一步步创建,并且创建和表示分离的时候。可以这么理解,你要买电脑,工厂模式直接返回一个你需要型号的电脑,但是构造模式允许你自定义电脑各种配置类型,组装完成后给你。这个过程你可以传入builder从而自定义创建的方式。1 介绍建造者模式(Builder Pattern)使用多个简单的对象...

2019-06-17 20:30:58 534

原创 Python设计模式之工厂模式(2)

工厂模式(Factory Pattern):解决对象创建问题,将对象的创建和使用解藕。1 介绍工厂模式(Factory Pattern),顾名思义就是我们可以通过一个指定的“工厂”获得需要的“产品”,在设计模式中主要用于抽象对象的创建过程,让用户可以指定自己想要的对象而不必关心对象的实例化过程。这样做的好处是用户只需通过固定的接口而不是直接去调用类的实例化方法来获得一个对象的实例,隐藏了实...

2019-06-16 17:10:26 515

原创 Python设计模式之单例模式(1)

1,什么是设计模式1.1 设计模式分类软件设计中,设计模式是指软件设计问题的最佳推荐方案,一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。根据设计模式的参考书Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中所提到的,总共有 23 种设计模式。...

2019-04-23 10:51:24 299

原创 Python高级用法之分布式锁

1,数据一致性当多个进程/线程对同一个共享资源读写,会因为资源的争夺而出现混乱,导致数据不一致。如下图:在数据库的原始数据是 d0,上图的处理流程如下:t1 时刻,有两个数据源的数据 d1,d2 分别到达数据处理层,主进程分配线程 Merge1 处理 d1,Merge2 处理 d2,两者又同时(假设还是 t1 )从数据库获取原始数据 d0 t2 时刻,Merge1 合并完 d...

2019-04-20 17:57:41 5889 3

原创 Python高级用法之反射

1,什么是反射在程序开发中,常常会遇到这样的需求:在执行对象中的某个方法,或者在调用对象的某个变量,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入。举个具体的例子:当我们需要实现一个通用的DBM框架时,可能需要对数据对象的字段赋值,但我们无法预知用到这个框架的数据对象都有些什么字段,换言之,我们在写框架的时候需要通过某种机制访问未知的属...

2019-04-18 16:59:50 667

原创 Python高级用法之消息队列zmq

1,ZMQ介绍ZMQ是一套嵌入式的网络链接库,是一个基于内存的消息队列,工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的快速足以胜任集群应用产品。它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务。套接字事实上是用于网络编程的标准...

2019-03-31 22:44:57 42767

原创 Python并发之异步aiohttp(8)

在我们写普通的爬虫程序时,经常会用到requests库用以请求网页并获得服务器响应。而在协程中,由于requests库提供的相关方法不是可等待对象(awaitable),使得无法放在await后面,因此无法使用requests库在协程程序中实现请求。官方专门提供了一个aiohttp库,用来实现异步网页请求等功能,就是异步版的requests库。1,aiohttp基本用法在官方文档中,推荐...

2019-02-23 20:51:04 2327

原创 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 728

原创 Python并发之协程gevent数据结构和实践(6)

greenlet instances 之间的关系存在两种:仅有包含于 greenlet instances 集合的关系 同步关系,即存在协作关系第一种形式很常见,不同的 greenlet instance 之间没有交流,且没有共享数据需要进行操作,各自做各自的事情。对于第二种形式,gevent 提供了几种数据结构便于 greenlet instances 间进行同步。Gevent常用...

2019-01-23 16:45:04 2677

原创 Python并发之协程gevent基础(5)

1,gevent介绍gevent是第三方库,通过greenlet实现coroutine,创建、调度的开销比线程(thread)还小,因此程序内部的执行流效率高。gevent 实现了 python 标准库中一些阻塞库的非阻塞版本,如 socket、os、select 等 (全部的可参考gevent1.0 的 monkey.py 源码),可用这些非阻塞的库替代 python 标...

2019-01-22 17:18:40 16199 1

原创 Python并发之协程基础(4)

1, 基本概念协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程我觉得单说协程,比较抽象,如果对线程有一定了解的话,应该就比较好理解了。那么这么来理解协程比较容易:  线程是系统级别的,它们是由操作系统调度;协程是程序级别的,由程序员根据需要自己调度。我们把一个线程中的一个个函数叫做子程序,那么子程序在执行过程中可以中断去执行...

2019-01-22 13:52:43 532

原创 Locust源码分析之stats.py模块(7)

stats.py模块是性能测试运行过程中测试数据记录的核心模块常量定义在该模块中,定义了如下一些常量,我们来分析下这些常量的作用STATS_NAME_WIDTH = 60 # STATS_NAME宽度设定CSV_STATS_INTERVAL_SEC = 2 # CSV文件写入间隔设置(s)CONSOLE_STATS_INTERVAL_SEC = 2 # 默认在console中打印...

2018-12-18 16:30:44 731

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除