Python
文章平均质量分 66
点点寒彬
积一时之跬步,臻千里之遥程,烙成功之印记
展开
-
从零开始写博客系统——环境搭建
环境相关内容关于Python的安装,环境变量等配置这里就不单独出文章了,网上有大量的文章可以参考。我使用的Mac电脑,使用Windows也是同样可以的。只不过某些配置可能略有差异。$ python3 -VPython 3.6.6我的Python版本如上,我们的博客不会涉及到很复杂的代码,因此版本向上或者向下都是可以的。搭建环境首先找一个文件夹,打开终端进入到这个文件夹,执行命令python3 -m venv blog此时在当前目录下会生成一个blog的文件夹。同时venv命令会给我们创原创 2022-04-24 22:09:19 · 997 阅读 · 0 评论 -
从零开始写博客系统——开篇
背景我从2015年底开始慢慢的学习编码相关的知识。在这个博客我把自己学习的记录全部都记了下来,这么多年过去了,版本不停的在更替,当年的那个系列确实已经没啥参考意义了,并且受限于当时的水平,写出来的东西也没啥价值,甚至在某些时候会误导初学者,因此决定重新写一下这个系列的内容,如果可以的话,也配套录制一些视频,方便后来人学习。需要有那些基础不能说完全零基础,完全没有基础很难上来就写一个博客系统,如果读者属于零基础,那么建议去把Python的基本语法都学习一下。阅读本系列的读者至少对于Python的基础语原创 2022-04-23 11:48:09 · 1257 阅读 · 0 评论 -
理解unittest测试框架(一)从入口说起
背景作为一名测试人员,自动化测试框架可能是我们日常工作中使用的最多的东西了,以我为例,日常工作中天天打交道的框架就是unittest,深入理解unittest测试框架的原理,再工作中能避免我们踩到某些大坑。启动方式unittest的启动方式有两种python -m unittest xxx.xxxunittest.main()第一种方式是以命令行的方式,也是我们正常执行用例和调试的...原创 2019-11-26 21:16:25 · 525 阅读 · 0 评论 -
leetcode——两数之和
问题给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路过程...原创 2019-10-20 22:25:50 · 196 阅读 · 0 评论 -
Django+MongoDB+localStorage做一个简单的权限校验
背景最近一直在用自己写的bug管理系统,在某些必要的时候需要对权限做一下控制,比如非相关人员是不能关闭缺陷的。当然,这种控制也是非常简单的控制。正常使用Django的话,可以直接使用它的Session模块,可以很容易达到效果,不过我使用的是MongoDB作为数据库,Django没有官方的支持,所以就只能自己来写了。版本相关 操作系统:Mac OS X EI Caption Python版本:2.7原创 2016-10-04 10:27:24 · 1266 阅读 · 0 评论 -
RobotFramework初识
背景RF这个自动化框架在很早的时候我就有看,不过当时被网络上坑爹的教程欺骗了,所有的网络教程写的都是用它的ride来编写脚本,局限性太大,当时也很懒,并没有去看官方文档,所以一直感觉这框架很无聊,不如直接去敲代码。最近换工作,新工作要求使用RF来写自动化脚本,没办法,硬着头皮去看了一下官方文档,然后自己写了几个demo,发现完全不是以前自己认识的那么回事。新接触框架,还是建议先看看官方文档。结构Ro原创 2017-04-21 09:45:27 · 1992 阅读 · 1 评论 -
聊聊接口测试(二)——测试脚本的规划
背景最近接口测试做的多了,略有一点思想,总结一下怎么做我之前专门写过接口测试的文章,也对比过好多现有的工具,发现现有的工具并不是非常好用,至少扩展性不好。所以自己写才是最好的。方法嘛有很多,用Java、Python都行,最近在用RobotFramework,感觉都差不多,只要能实现定制化,都没问题。测试脚本怎么规划文章标题是测试脚本的规划,那就专门说说这个。以前的代码都是一个人玩,所以怎么玩都行,换原创 2017-07-28 20:08:46 · 769 阅读 · 0 评论 -
Python装饰器的一些小知识
调用时机装饰器的调用时机是在导入时,或者是加载时就执行,如下代码:register = []def regester(func): print 'running regisster ({0})'.format(func) register.append(func) return func@regesterdef f1(): print "r...原创 2018-06-21 17:34:53 · 298 阅读 · 0 评论 -
记一个ajax下载的坑.md
背景我们用了一个开源的测试管理平台,但是这个平台只支持用例用XML导入,用XML来写测试用例那简直就是反人类,因此,我要写一个脚本来把Excel转成XML格式。然而,脚本要给大家用的,因此要放在WEB上,功能就是上传写好的测试用例,然后脚本转成XML之后下载到用户本地。结论先说结论。ajax并不支持下载文件!ajax并不支持下载文件!ajax并不支持下载文件!过程项目结构是Flask+Vue.js。原创 2017-10-19 15:55:29 · 515 阅读 · 0 评论 -
自己驱动自己—Python代码写接口测试(一)
背景在《聊聊接口测试》中我提到了使用Jmeter的问题和局限性。 这里其实是有一个问题的。Jmeter的学习成本其实挺大的,基础的发请求断言这类功能当然是很简单,再往后,很多细节上的处理问题,解决起来就非常非常困难,网络上很难找到类似的问题和解决方法,即使是自己去翻官方文档,也不一定就能很快的找到。那自己写一个接口测试就迫在眉睫了,本着自己驱动自己的想法,我直接把所有内容写在代码中,自己维护起原创 2016-10-25 20:55:15 · 5490 阅读 · 0 评论 -
Python爬取网页的编码处理
不是中秋节的中秋快乐!!!背景中秋的时候,一个朋友给我发了一封邮件,说他在爬链家的时候,发现网页返回的代码都是乱码,让我帮他参谋参谋(中秋加班,真是敬业= =!),其实这个问题我很早就遇到过,之前在爬小说的时候稍微看了一下,不过没当回事,其实这个问题就是对编码的理解不到位导致的。问题很普通的一个爬虫代码,代码是这样的:# ecoding=utf-8import reimport requests原创 2016-09-17 12:03:11 · 5565 阅读 · 1 评论 -
简单的装饰器和测试用例生成的脚本
七(nue)夕(gou)节过了,是时候发一篇文章了。背景标题党,其实两个并没有很大的关联,第一个装饰器是用来处理博客上的登录模块,让页面方法以一种简单的方式来实现登录的校验。而测试用例的生成脚本是工作中的一个需求,今天尝试了多种方法,总结了一个最简单的方式。装饰器装饰器是Python的一个语法糖,实现起来并不难,只是理解起来有点绕,简单来说,装饰器就是给一个函数加上装饰,比如函数执行前执行一些东西,原创 2016-08-11 00:05:52 · 1101 阅读 · 0 评论 -
Python+Git+FTP实现内部分发网站数据的自动更新
需求我们的内部分发平台可以算是半个静态页面,前端用AngularJS写的,数据是拿一个json来实现动态展示,每次我要在本地修改完代码,然后再通过FTP传到服务器上。整个步骤有点繁琐,尤其是打包打的多的时候,每次要花上1~2分钟来折腾这个东西,我就在想自己写一个脚本来处理这个繁琐的操作,内容编辑只能手工编辑,但是上传到服务器这种操作,肯定是可以通过脚本来处理,而且必须要自动处理。思路最初的思路我是想原创 2016-08-29 23:46:30 · 1524 阅读 · 0 评论 -
多线程自动执行类中的所有函数
背景电脑每次开机总有许多服务要起,比如MongoDB、爬虫、本地网站的服务等等,这些都分布在各个文件夹,每次重启电脑都需要到各个目录下去启动服务,虽然也不会花多少时间,但是非常麻烦,所以就看了一下多进程来解决这个问题。思路每一个服务都是独立的,切启动之后不会关闭,那么传统的直线型写代码肯定不行,必须要多个进程来处理这些东西。开始多线程的内容我就不多写了,最初我是按照网上的demo来写的,非常简单粗暴原创 2016-08-07 12:00:28 · 1021 阅读 · 0 评论 -
Django开发博客(十四)—用户登录和站点统计
背景由于博客一直没有自己的CMS,所以导致博客维护起来有点麻烦,每次我都是去数据库添加文章,太麻烦了,但是之前没有做用户登录系统,就导致了内容的维护很麻烦。So,是时候加一个用户系统了思路同样,思路是非常简单的,网站进行会话校验一般是使用Cookie或者Session。不过Cookie有那么些不安全,加了密的Session比较符合我们的要求。实现起来就是加一个登陆页,验证通过就写一个Session,原创 2016-08-02 14:39:26 · 1724 阅读 · 0 评论 -
Python+MongoDB自增键值的实现
背景最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段。传统的关系型数据库要实现起来是非常容易,只要直接设置一个自增字段就行了,插入数据时不用管这个键值,只管自己处理的数据就行了,会自动实现自增的功能,但是非关系型数据库好像没有这个功能(或者我不知道)。百度之后发现都是MongoDB的设置方法,并不是我想要原创 2016-06-17 22:06:39 · 2484 阅读 · 0 评论 -
RobotFramework之Python调用RF关键字
背景这个需求说实话是有那么些奇葩,因为正常的框架不会用到这个需求,要么就纯Python来实现,要么就纯RobotFramework来实现,用RobotFramework的时候是可以正常调用Python的,但是反过来就有点蛋疼了。我们现在的框架就是基于RobotFramework实现的,但是由于RobotFramework在某些地方的扩展性太低,某些时候用Python来实现更为高效,不过现有...原创 2018-02-11 17:40:38 · 11373 阅读 · 12 评论 -
从零开始写一个契约测试工具
背景最近微服务越来越流行了,我们公司的应用都开始往微服务迁移,但是目前来看,针对微服务的测试技术还是比较少的,网上看的比较多的是一个叫做契约测试的东西,但是实际上写出来的都是一些demo,离真正能使用,还是有非常远的距离,所以自己想根据契约测试的一些理论知识,自己撸一个契约测试的工具出来。环境Python:2.7 操作系统:Mac OS X思路首先,它要实现...原创 2018-04-06 01:52:20 · 974 阅读 · 0 评论 -
从零开始写一个契约测试工具——数据库设计
接上文,第一步需要设计我们的表结构,我初步的构想是两张表来装下它,后续肯定会有一些变动,因为我也是一边写工具一边记录的。设计说明工具应该有两块内容,第一块是契约的信息,这部分记录的契约的结构体。第二快是子契约,所有具体的值必须由子契约来承载,子契约的内容一旦定义后是不可变更的。而契约工具对消费端和生产端的具体报文内容都由子契约来承载。环境说明我使用的是sqlalchemy这...原创 2018-04-06 02:39:09 · 854 阅读 · 2 评论 -
Python基于unix socket的并发技巧
背景在开发Mock中心的过程中,每个server与client通讯的时候,需要使用unix socket这种高效的本机通讯协议来交换数据,但是unix socket通讯协议是基于文件的,也就是当并发量大的时候,单个文件作为通讯信道会出现拥堵的情况。思路解决的思路很简单,不使用单文件作为通讯信道。TCP协议中,应对并发是有多种方式的。最常规的方式就是以多线程的方式,监听多个通讯信道,还有Li...原创 2019-07-28 14:24:25 · 2548 阅读 · 5 评论 -
requests源码简略阅读
背景requests库号称是为人类设计的HTTP请求库,个人也经常使用这个库,因此对它的源码产生了兴趣,带着这个目的去看看它的源码。apirequests的最外层是api层,这里提供了对外暴露的接口,比如我们使用requests.get那么这个get方法就是在api这里定义的方法。def get(url, params=None, **kwargs): """Sends a GET...原创 2019-06-20 00:13:04 · 1087 阅读 · 0 评论 -
从实践来看HTTP
背景了解HTTP一直是从各种渠道来了解,但是一直都没有真正的从它实际的样子来了解这个协议,这次借着写Mock的机会,从TCP的层面来理解一下它。初步窥视首先用Python写一个基本的TCP Server,然后用浏览器打开这个地址,收到的数据不直接print,而是用print repr()打印出来,类似这样:print repr(recv)。这样就能看到它原来的样子。''GET /test/...原创 2019-06-19 00:03:56 · 527 阅读 · 0 评论 -
基于UnixSocket抽象命名空间的采坑记录
基于UnixSocket抽象命名空间的采坑记录背景Unix Socket显式文件的缺陷解决方案和测试难点问题浮现峰回路转后续思考背景最近接手的某平台的某个服务与业务的通讯交互方式是通过Unix Socket的方式,这种通讯方式相对于已有的TCP来说,效率更高,传输效率大约是TCP的两倍。高效的同时,也是数据可靠的,但是它的缺点是必须本机通讯。由平台的机制,通过这种方式收进行通讯,对性能开销小、...原创 2019-03-10 10:23:10 · 902 阅读 · 0 评论 -
Google Protocol Buffers学习笔记
背景最近由于工作需要,需要做一些IDL的事情,参考对象就是Google Protocol Buffers。学习的过程中做一些记录介绍官方文档:https://developers.google.com/protocol-buffers/Github:https://github.com/protocolbuffers/protobuf/tree/master/python安装安装其实比...原创 2018-12-17 01:11:18 · 472 阅读 · 0 评论 -
从self、cls看Python的实例化.md
背景刚开始学习Python的时候经常会有一个疑问,为什么每个类方法的第一个参与一定要加一个self?经过一定的编码后发现,怎么还有一些类方法里面写的是cls?实例化在使用类方法的时候,我们通常会把一个类做实例化之后再进行调用,比如这样:class Calc(object): def add(self, x, y): print x + yif __name__ == '__ma...原创 2018-11-05 00:54:37 · 989 阅读 · 0 评论 -
在实际场景中学习设计模式——单例模式
在实际场景中学习设计模式——单例模式背景场景具体的编码说明意外的收获参考背景在编码的成长过程中,慢慢的会往高级的方向发展,比如设计模式。但是如果单独去硬啃这些设计模式,真的是非常非常的抽象,并不容易掌握,如果能够在实际的应用中使用这些设计模式,那么学习起来非常快。场景本次的单例模式是在我重构博客的过程中实际上应用的场景,也就是登录错误的控制,常规的做法是登录校验失败之后,把本次的登录数据...原创 2018-10-15 00:07:12 · 282 阅读 · 0 评论 -
利用Python3和Flask1.0重写博客
背景最近准备重构博客,看了一下Flask更新到了1.0了,于是抽时间看了一下更新的内容。具体的变动信息请参考官方文档。刚好在腾讯云上买了台服务器,于是想着用Python3.6来重写博客。Flask1.0支持版本Flask1.0之后,不再支持Python2.6和Python3.3。Flask1.0的启动方式此项改动应该是本次最大的变动了。普通模式传统的方式是在...原创 2018-09-17 00:34:30 · 565 阅读 · 1 评论 -
基于Python的Jenkins的二次开发
背景最近我们在整一个云执行的平台,底层用的是Jenkins来做执行引擎,方便的把我们的脚本做一个统一的调度。Jenkins确实是一个非常方便的框架,它提供了一整套的RESTful的API,可以非常方便的做二次开发,而且提供了一个python的库,操作起来就更加方便了。常用的Jenkins概念我们在使用Jenkins的时候,一般看到的都是Jenkins的View。也就是说我们...原创 2018-07-06 20:25:04 · 10574 阅读 · 5 评论 -
说说Python中的queue
背景最近在看Python基础,刚好看到生产者与消费者这快内容,视频使用了queue模块来处理,这里记录一下学习的内容概念生产者与消费者是一个比较容易理解的概念,比如游泳池中一头进水一头出水,就是很典型的例子。视频中的内容视频中的代码主要是下面这块:# ecoding=utf-8# Author: 翁彦彬 | Sven_Weng# Email : sven_w...原创 2018-06-24 01:06:42 · 3055 阅读 · 0 评论 -
使用SQLAlchemy进行组合分页查询
背景最近在写web端的时候经常会遇到一个问题,查询数据的时候需要组合条件来查询,并且需要对结果做分页,在网上找了好久,都是到处“借鉴”,无奈之下只能自己研究,这里吧研究的结果记录下来拼SQL来做组合查询拼SQL是一个最基本的方式,总体的执行难度也不大,不过容易引起SQL注入。但是拼的方式有点讲究,不同的拼法对后续的影响也是不一样的。用Python的语法进行格式化在Pyt...原创 2018-05-09 02:45:58 · 9031 阅读 · 5 评论 -
Git学习小记——文件分块提交
前言真的是非常难得的周末啊,好不容易可以静下心来慢慢的学习,慢慢的整理一些东西。一第一次见到Git的这个功能,我简直惊呆了。尤其是我这种非专业开发人员,常年线性撸代码,简直就是福音啊!二我们来做一个实验,首先先在本地生成一个git仓库,建立一个文件叫做file.里面的内容是五行A。如下所示:SvenWeng@wengyanbin:~/Desktop/gittest|master⇒ echo a原创 2016-07-03 15:53:11 · 1102 阅读 · 0 评论 -
Django接受前端数据的几种方法
菲律宾猴子真是逗,各种被国际打脸,什么乱七八糟的狗屁裁决,是中国的就是中国的,祖国领土是神圣不可侵犯的。背景测试工具箱写到一半,今天遇到了一个前后端数据交互的问题,就一起做一下整理。环境版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:PyCharmDjango: 1.8.2注: 我测试的是Get方法,POST方法也同样适用字符型字符型的数据相对好获取,前原创 2016-07-14 13:25:17 · 8321 阅读 · 1 评论 -
Django博客开发(十三)—一个简单的站内搜索
最近在努力的翻译Apple的测试文档,英文差果然是一个硬伤。背景博客内容越来越多了,慢慢的发现有时候需要一个搜索引擎来处理一些搜索的要求。当然,不需要那么复杂的逻辑,我们的博客只需要一个很小很小的搜索引擎,甚至不需要很高大上的算法。PS:百度站内搜索也是一个解决方案,不过用它的搜索,整个网站风格就变了,所以还是决定自己写一个。思路思路其实很简单,把关键字拿去比对标题和内容就好了,比如输入一个关键字,原创 2016-07-24 11:09:11 · 5858 阅读 · 0 评论 -
Django开发博客(七)——markdown优化
背景上一次把markdown集成之后,发现还是有很多问题。这次需要做一些优化。 1、markdown与普通文本的区别显示。 2、增加点击量的统计 3、添加名片卡的滑动版本相关 操作系统:Mac OS X EI Caption Python版本:3.4 Django版本:1.9 IDE:PyCharmmarkdown的优化我试着转载其他博客的内容过来,发现非markdown格式的原创 2016-01-14 10:30:33 · 4862 阅读 · 2 评论 -
Python批量更改文件名
背景由于后台数据有好多,但是文案提供过来的图片命名全部没有按照格式来命名,Python这么强大的语言,肯定是能够处理这个问题的,于是我就写了一个小脚本批量改文件名。版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime思路我的思路是这样的,在当前文件下创建一个新的目录newfile,然后把所有的文件拷贝过去重命名一下就行了素材文案提供过原创 2016-01-27 23:26:51 · 1040 阅读 · 0 评论 -
Python读写Json涉及到中文的处理
今天在帮前端准备数据的时候,需要把数据格式转成json格式,说实话,涉及到中文有时候真的是很蛋疼,除非对Python的编码规则比较了解,不然处理起来真的很蛋疼。整个逻辑我们需要处理的是把一些文章处理,生成多个html文件,然后用json来显示文章的列表,图片,摘要和标题。思路为了以后的数据扩展,那必须有一个数据库,我的想法就是自己写一个简单的网页做为提交输入,然后post到后台以后录入到数据库中,再原创 2016-01-22 14:53:18 · 1874 阅读 · 0 评论 -
测试多个文件
写测试案例的过程中,我们可以需要写多个py文件,一个一个的去执行再生成报告,不仅麻烦而且多份报告还要重新去整合,浪费时间,有没有一种方法可以把我们写的所有py文件同时执行呢?其实这种方法类似之前的测试多个类的方法。编写多个测试案例文件我们之前写了一个针对百度搜索的测试案例baidu.py,在这个文件的目录下,我们再写一个搜狗搜索的测试案例sougou.py。和百度搜索的代码类似,代码如下:# -*-原创 2015-12-03 14:46:39 · 907 阅读 · 0 评论 -
加上测试报告
执行完Pyunittest后,会输出一个测试结果,显示效果如下:testSum (__main__.testNum) ... ok----------------------------------------------------------------------Ran 1 test in 0.000sOK结果显示的比较清晰,报错的时候也能具体到某行,但是别人是没办法看的,我们需要一个更漂亮原创 2015-12-03 13:29:36 · 875 阅读 · 0 评论 -
第一个web自动化
Pyunittest的内容我们看的也差不多了,主体功能大致如此,现在我们来看看selenium如何使用Pyunittest执行自动化测试。本期目标打开百度,搜索“selenium”,关闭浏览器打开百度,设置搜索的最大条数为20条(默认是10条),关闭浏览器编写测试案例先编写我们的测试类,在初始化的时候要做一些处理,代码如下class Baidu(unittest.TestCase): d原创 2015-12-03 11:02:24 · 1057 阅读 · 0 评论 -
测试多个类
前两篇文章中学习了如何做一个简单的单元测试。现在问题来了,如果多一个测试类呢?要写两个文件吗?# -*- coding: utf-8 -*-import unittestdef sumnum(a,b): return a + bdef delnum(a,b): return a - bdef hello(): return "hello world"def chengfa(原创 2015-12-01 20:31:19 · 878 阅读 · 0 评论