leadscloud

Google SEO|外贸营销推广

LNMP安装后,打开 ftp 空白页面,原来是发生了内部500错误。说下解决办法

你可以在发生错误的php页面头部加入以下代码,显示详细错误信息

1
2
ini_set('display_errors','1');
error_reporting(E_ALL);

然后根据详情查看错误原因。

我的是出现下面这样的错误

open_basedir restriction in effect. is not within the allowed path(s):

修改php.ini,找到下面的这几行,删掉就行了。
vi /usr/local/php/etc/php.ini

1
2
3
4
[HOST=www.vpser.net]
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/
[PATH=/home/wwwroot/www.vpser.net]
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/

今天,之前一起学车的一个朋友打电话给我,说他准备辞职去现在的工作,我问他为什么要辞职,他说工作得没有激励、感觉很乏味,既没有上升空间,也没有加薪机会,我进一步问他为什么会觉得很乏味?他说因为很长时间以来都做同样的工作,而且是很简单的工作,总结一下,大概就是——周而复始的简单重复。

这人很年轻,在一家美资公司工工厂工作,是厂里基层管理人员,据我的了解,因为是外资公司,比较正规,福利待遇在同行同岗位来讲应该算是比较高的。但是他还是决心要辞职,就是因为工作的枯燥、乏味、单调。事实上,在我看来,工厂里生产类的工作,很多都是单调、乏味的,尤其自1991年科学管理问世后,它将一件产品的生产分成无数道工序,每个人只负责一道工序(这样能最大化提升效率),周而复始的做同样一件事,是人就会觉得枯燥乏味,而且,我觉得长时间的做同一个简单的动作,还会影响人的智商。那么是不是意味着企业应该弃用这种管理方式呢?当然不是。我们认为一个更可取的方法就是将几道工序分给一个小团队,然后这个团队里面要求他们定期轮岗,以增加工作的趣味性。有点类似我们上学时每周转动位置一样。

还有一个方法就是加强对一线基层人员的激励。我们认为企业经营业绩的获取主要来源于市场一线、生产一线,而不是高层领导。要想保持基层员工的忠诚度,一定要让基层员工能够得到充分的支持和帮助。我们在很多企业做过调查,问到企业存在的主要问题,统计结果显示:排在前三个问题中,一定有一个问题,就是“公司缺乏对一线的支撑”。事实上,要想营造一个正面、积极、向上的组织氛围,一定要让基层员工能得到充分地支持和帮助,组织结构的调整也应该以此为核心。

但是,据我们的观察发现,很多企业常常会把激励的重点放在高管上。我们去过的很多国企,他们常常谈节省成本,于是员工工资很难涨上去,而且要多招一个人,流程手续也特别麻烦、时限也特别长,常常是看好的人,到通知人家来上班时,人家已经在新的东家工作很长一段时间了。但是我们却发现他们的高管人员工资却始终居高不下,某企业中层管理人员就向我们“抱怨”说——天天喊控制下面员工的成本,殊不知上面随便一个领导者的工资是下面数十个人的工资,下面的人怎么勒紧裤腿带,只要上面任意来个副总(在大型国企,上级管理部门会定期不定期的往公司安排“副总”,我们曾服务的一家公司就是1个董事长,一个总经理,8个副总),下面就白忙活了。

比如,华为就一直强调“让听得见炮声的人获得更多的利益”。以1996年为例,同是市场部的副总裁,主管销售的月薪大概是2万,而主管职能部门的则是1-1.5万。也就是说主管销售的副总裁离“炮声”更近。

企业里随着年轻员工越来越多,管理的方式肯定不能似以前一样一成不变,企业需要花更多合理的心思、精力、资源使员工(尤其是一线员工)工作得更有趣、更有激情。

葛大爷的《大腕》电影非常有趣,看了很多篇,依然感觉回味无穷。其中,有一个桥段印象最为深刻,是Lucy(关之琳饰)和葛大爷在一座寺庙里的一段对话:

Lucy:我听师傅一直在说一个词,佛的“境界”,我不知道这个词应该怎么翻译?

葛大爷:你给我10美元,我就告诉你。

Lucy:财迷心窍…。说着,Lucy给了葛大爷10美元。

于是葛大爷从地上拾起3个碎石子,走到一个台阶前,然后,把第一个石子放在第一个台阶上,说:这是你的境界。又把第二个石子放在第二个台阶上,说:这是我的境界。接着,把第三个石子一下子扔到很远,指着说:那是佛的境界。

当然这是个小的笑话,看完一乐。然而,在看完后,突然想,如果说人生真的存在各个境界的话,那么到底有哪些境界呢?这个问题一下子引起了我的兴趣。然后,在接下来的几年里,不断的思考,从我们人生的成长经历来看,给出了如下的答案:人生的六层境界。

从我们出生接触这个世界,到小学开始学习知识。这个时候我们学会了理解这个世界的最基本的知识,如算术,语言(语文)等。这些都是最基本的知识点和技术点,那么我们将这称之为第一层境界:概念常识。每个人大概都能达到这个境界,从而在这个社会中获得基本的生存技能。

而等我们到了初中和高中,开始学习不同的科目,如物理、化学、生物、地理、历史、政治、数学、英语等。这个时候,我们发现知识被进行了分类,划分到了不同的学科中。每个学科中的知识是不同的,我们开始掌握一些概念,这些概念是在抽象层次上对自然和社会中事物的描述和定义。同时,我们还要开始注重不同学科知识的融合,如现在高考的小综合、大综合。我们需要从深一个层次来了解这个世界的各个方面。因此,我们将这称为第二层境界:学科体系。完成了九年义务教育的人,基本能够达到这个层次,掌握了若干不同学科的知识。对自然和社会具有一定科学上的认识。

那么,接下来,等我们上了大学,或者进入社会,我们欠缺什么呢?上了大学,来到另外一个城市,来自五湖四海的同学聚在一个宿舍中。大家相互交谈,相互了解。慢慢发现,对同一个问题,大家的想法是不一样的。不同的生活环境和成长经历导致了大家的人生观和价值观是不同的。联想起,在改革开放的三十年中,为什么沿海一带的人都下海创业获得了成功,而内地的人却固守着计划经济的铁饭碗,这就是价值观的不同。沿海一带的人更有机会接触到外来的思想,而且他们的环境也使得他们发现经商比种田或工作更能获得利益。慢慢地,他们就形成了一种不同于内地或者中国传统思想的观念。传统观念中认为“士农工商”,“学而优则仕”,最好的是当官;然后是当农民有地可种;其次是做手工艺者,有门手艺养活自己;最差的是经商,倒买倒卖,改革开放前甚至这都是一项违法的活动。然而,沿海一带,由于自然条件等因素,认为经商才是最好的。例如,温州商人,都想着把孩子培养成商人,而不是什么科学家,工人。这就是观念的不同。同一件事情,不同观念的会有不同的看法和做法,而这也就导致了结果的巨大差别。因此,观念是多么重要的一点。观念并没有对与错之分,每一种观念都有它存在的土壤和环境。然而,不适应社会发展的观念会让你与社会的进步背道而驰,最终被淹没。顺应社会发展潮流和方向的观念能够使我们紧跟时代的步伐,在社会的发展中实现自己的价值。因此,人生的第三层境界是:价值观念。

在大三的时候,大概想明白了人生的前三层境界,然而,之后是什么,却困扰了我很长一段时间。直到上了研究生,了解了更多的知识,经历了更多的事,见到了更多的人,去过了更多的地方,才慢慢有所感悟。

首先,价值观是如何形成的。为什么东方人的价值观和西方人的价值观如此的不同。举个例子,“Free”这个词,中国人见到这个词第一反应是“免费”,而西方人见到这个词第一反应是“自由”。同一个事物,大家看法如此不一样,为什么?那是因为,西方国家有着和我们不一样的历史,在我们为了吃饱肚子而发动战争改朝换代时,西方国家的国民已经在为了自由而流血牺牲。自由,已经成为了西方人基因里的东西,挥之不去。而中国人骨子里却是儒家和道家的思想,君臣天下、天人合一。因此,不同的历史文化造就了不同的价值观念。中国悠悠五千年历史,经历了多少个朝代,但这都没有给中国人带来国民性。以前,中国人的意识里是没有“国”的概念的,只有家的概念,而国则是一个更大的家,是一个掌握着权势的家族。所以,梁启超才会说“少年之中国”,中国称之为“国”,只能从清朝覆灭,民国成立算起。腐朽的是朝代,而中国则还处于蓬勃之少年阶段。所以,民国中华之青年才会高喊着“德先生”和“赛先生”( Democracy,民主,Science,科学),才开始向我国人介绍西方的民主和科学。只有有了民主和科学的认识,才会有国家的概念,才会由人民成长为国民。因此,在价值观念之上的第四层境界是:历史文化。从另一个角度来讲,为什么现代科学没有诞生在中国而是在西方。其实,从历史和文化上能够给出一定的解释。虽然我们的祖先比西方人更早的注视天空,比西方人更早的认识自然。然而,由于东方文化中,人与自然是合一的,而不是对立的。自然不是独立于人客观存在的一个客体。人是自然的一部分,道家中讲究天人合一,顺天而为。从而,东方人从来不会把自然当做一个客体去研究,更谈不上去战胜自然。但,西方人的文化中却认为人与自然是两个独立存在的客体,是对立的,人是能够战胜和改造自然的。因此,西方诞生了现代科学,西方人去研究和分析自然。而东方人则把所有的精力放在了诗词歌赋,权术,人与人的关系(仁)上了。当然,并没有绝对的孰对孰错,存在就有其道理。近年来,东西方文化也在强烈的碰撞和融合中,西方人也开始提倡人与自然的和谐统一,东方人也开始学习西方的现代科学,去更好的认识自然。不同的历史和文化决定着我们的价值观和人生观。

那么,沿着这个思路,历史和文化又是怎么形成的呢?中国是个大国,人口众多,如何吃饱肚子在以前一直是个主要问题,一个朝代的兴衰往往也出于此。中国,自秦统一六国,制定法制和政策之后,历朝历代似乎都没有太大的突破。因此,历史在不断的重复,朝代在不断的更替,每个朝代由于同样的原因而诞生,又由于同样的制度缺陷而腐朽和覆灭。因此,政治制度和经济在引导着历史。西方的资本主义法制和市场经济维护着他们的民主和自由文化。而中国过去的封建制度和小农经济也在桎梏着中国的前进,使得历史只是在不断的重复。因此,在历史文化之上的第五层境界是:政治经济。文化可以被制度塑造,而经济则提供文化的土壤。举个例子,在朝鲜,之前好像有规定女性不许穿裙子,只能穿长裤。我想,如果这个规定被强制执行50年,那么朝鲜就诞生了一种新的文化:朝鲜女性是不穿裙子的。当然,不知道这个规定后来有没有执行。这也解释了,为什么在一些非洲国家,有一些我们看起来非常奇特的习俗和文化,其实,这说不准是他们哪一代的族长突发奇想给出的规定,然后被一代代强制执行和传承下来,成为了今天的一种文化。其存在也许本身并没有太大的意义和价值,或者在那个茹毛饮血时代有意义,而现代环境改变了,也就失去了原来的意义,而仅仅是一种传承的现象。

站在了政治和经济这个层次,其实已经是一个很高的境界了。那些政治家和经济学家往往都是这个社会精英中的精英。那么,政治经济之上是否还有其它层次呢?如果有,我认为就只有哲学了,这个一切知识的本源。哲学是一种思维的方式,是一种解决问题的方法,是一种直指内心的信念。不同的哲学思想诞生了不同的政治理念。古希腊哲学推动了现代科学;西方的基督教信念或者哲学对资本主义政治制度和经济制度有着深远的影响。而中国的儒家哲学或者道家哲学也影响着中国的政治,例如,秦始皇不信儒家和道家,而遵从法家,因此以严格的法纪制国。而东汉开国的汉武帝刘邦的夫人信奉道家,采取无为之治,注重修生养息,称为“黄老之治”。而现代的中国,也许儒家哲学更被推崇,又或根本就什么都不信,直接信奉“实用主义”,因此在我们的政策中也多有体现。哲学,已然是人类迄今为止的终极知识了,是一切知识之源,是人们思考和认识这个世界的方法。因此,人生的第六层境界是:终极哲学。如果参透了这层境界,我想也就离超然物外,羽化成仙不远了,呵呵。

至此,人生的六层境界也就明确了:概念常识、学科体系、价值观念、历史文化、政治经济、终极哲学。细细一想,发现这些境界之间并不是互相独立的,而是相互关联和影响着的。从古希腊哲学分化出了各个学科,而各个学科又包含着各种知识技术。同时,哲学还影响着政治制度,而一种制度又决定了经济的发展,同时,经济也能制约制度的实施。政治能够引导历史,历史能够形成文化,文化能够产生观念,而观念则支撑着政治制度的执行。

可以看出这些概念之间互相复杂关联着,这也是为什么这个社会如此复杂。很多问题不是简单的靠一个规定或制度就能解决的,任何制度的实施都需要有观念和经济的支撑。好比,西方高福利制度,目前在中国就无法实施,因为我们的经济不允许,而且我们国人的观念里也没有西方人那么强烈的民主和法制观,不知从法制的途径获得和维护自己的个人权益。这个社会中的很多事往往是牵一发而动全身的,很难从一种途径去完全的解决。中国现在不可能像西方那样实行完全的民主和自由,因为我们现在的文化和观念无法对其形成支撑。当然,我们的社会是在不断的进步,相比以前,我们的生活更好了,言论更自由了。我们需要更多的时间来慢慢的发展和前进。

当我们纵向的贯穿了这些境界时,会认识到,其实在每个层次都有无尽的知识可以学习,只是需要综合的学习各个层次的知识,相互融汇和贯通,这样才能够更深刻的理解问题、认识世界、洞察人心,而最终回归内心的平静和豁然。也许,这就是佛家所谓的智慧吧。

来源:http://jianshu.io/p/ce0c3162becf

小时候写作文的时候总要遵守些规矩。除了首尾呼应突出主题等等之外还有一条最重要:人物的心境要反映到景物描写上。如果丢了钱,就不能蓝天上飘着朵朵白云;要是做了好事,就要觉得自己胸前的红领巾更红了一些。要是树上的树叶都无精打采地耷拉着,那一定是摊上什么大事了——虽然往往只是丢了考卷和同桌吵了架或者作业被狗吃了——基本上和天塌下来差不多。

我们的心情会影响看待这个世界的角度,的确是这样。情绪像是个过滤器,能够筛选出那些和我们心境相适应的景物,把对它们的印象变得更深一点。小学生可能还没办法理解大脑的这一机制,于是只好死记硬背地让他们记住:要是蓝天白云或者天气晴朗,就一定不能发生什么坏事。

失恋的人“看整个世界都是灰的”,并不是得了临时色盲。我们总是试图将自己的想法投射到外部世界上,并且永远都在为自己找合理化的证据;而这些证据反馈回来,又进一步刺激情绪的产生,于是high者愈high,low者愈low。

一旦正循环开始,人们可能会越来越乐观积极;而负循环开始的话,结果可能就没多么好。毕竟情绪这种东西,如果不经训练的话,还是不大受自己控制的。在我们所处的环境中,也许只有愤怒情绪能受到一定的控制,而其他更温和一点的情绪似乎没人在意。

这显然是不够的。我们已经知道,无论是快乐这种正向的情绪还是忧伤等等温和的负向情绪,如果任由发展的话,也可能会带来糟糕的结果。特别是后者——在最近二十年中,抑郁患者的比例已经攀升到20%左右,这已经和70岁以上患阿尔兹海默氏症的比例相当。然而阿尔兹海默氏症是无解的绝症,而抑郁情绪虽然可以调节,但人们却往往对其了解不足。

情绪其实只是复杂一点的反射活动罢了。和我们的本能反射虽然不大一样,但是基本原理也还有些相似之处。这个系统的反应很快,在理智还没来得及做出反应之前,就已经产生了情绪,速度只在毫秒级——情绪产生行为,而行为则决定了生死,能快一点是一点。

在产生强烈的情绪的时候,这个来自低等动物的中枢接管了身体的所有权,把理智暂时赶到了一边。大脑已经被情绪控制,没有理智的容身之地;只有等情绪稍微平静一点的时候,理智才会重新回来。于是种种冲动犯罪也就找到了依据;事实上,当一时昏头的时候,人们是不知道自己在做什么的。

不过幸好也不是全无办法。大部分情绪反应是在成长过程中逐渐产生并定型的,也就是说,它其实可以被视为一种习惯。既然是习惯,就可以改。我们的确可以用一些方法来学会识别、改变对特定事件的情绪反应,并且慢慢将自己的情绪调节到适合自己需要的程度。这些方法历史悠久,并且早已被证明行之有效了。

情绪可以被视为一种由过去的经验所形成的反应机制——要是每一个外部刺激都需要通过理智来分析再做出决策,人会崩溃的。在面对简单刺激的时候,感觉比思维要高效和快捷得多。情绪是预装在大脑中的程序;当然,后天也可以慢慢debug。

前一阵子有个研究,探讨了在不同情绪状况下人体体温分布的差异。在害怕时,上半身会变冷,流向下半身的血液会变多——这可能是为了拔腿就跑做准备;而在愤怒的时候,流向手臂的血也会变多,看起来像是时刻准备着对愤怒的原因饱以老拳。结合一下考虑,就会发现情绪的本质是驱动力,驱动人们进行一些特定的行动。

在没有意识到的时候,情绪是很难控制的。它看起来太过自然,以至于人们甚至忘记了还可以去改变它。无论是愤怒、悲伤、恐惧、喜悦、喜爱、惊讶、厌恶还是羞耻,看起来都像是不在我们自己手里。“他让我讨厌。”“他真让我生气。”“我一见他就开心。”以及“妈的他化的妆吓死我了。”——看,我们往往以为自己的情绪是由环境引起的,主动权不在我们自己手里。

这些情绪——或者说感觉——与理性完全不是一个系统。情绪系统和理性系统共同运作才决定了我们的心理状态,如果只有情绪或者只有理性,都会造成障碍。情绪系统更像是一个预处理系统,可以做一些简单的判断,避免理性系统负担过重。失去情绪能力的人往往无法做出快速判断,他们的理性系统会深思熟虑地考虑每一个可能方案,最终花费太多时间或者始终游移不定。内心的喜好和偏爱比经由理性系统分析得出的结论更稳固也更令自己信服;感觉越强烈,情绪对心理的主导力量就越强。

当情绪强烈到超过某个阈值的时候,就达到了著名的“情绪失控”状态,理性完全被扔到一边。边缘系统完全接管了控制,新皮层无计可施地成了看客。这是另一种极端:只有情绪,而不计后果。

我们可以在人身上的许多地方看到平衡,理性和情绪也是这样的一对平衡。甚至可以说,我们有两个脑,它们共同决定我们的行为——只有理性,人将无法做出决策;只有情绪,人就会退化到以本能生活。任何一个过强,都不能算是好事。

我们可以在特定环境中看到大量有情绪控制问题的人,例如幼儿园或者监狱里。前者是因为还没有学会如何有效控制情绪来适应这个不大一样的世界;而后者的情绪控制问题可能正是他们进监狱的原因。虽然大多数人在成长过程中都能将自己的情绪控制到一个可以被大众接受的程度,但是并不意味着这样已经足够。事实上,在如今这样迅速变化的时代里,我们成长过程中的传统方法,似乎已经不足以让我们的情绪保持在一个健康的水平上。

我们生活环境的迅速变化,让人们传统上控制情绪的方式变得不再有效,过多的信息让情绪失去锚点——这可能也是为什么现在抑郁、焦虑、甚至病态的仇恨和暴力盛行的原因吧。

之前我们谈到过,情绪是预设的、对外界刺激的反应,它的产生速度比理性分析的速度要快得多;它和理智差不多可以算是两个系统,协同工作来帮我们作出决策。当情绪太过强烈时,理性就不再发挥作用。

在生理上,海马体存储记忆,而杏仁核存储关于情绪的记忆。当感觉信号传递到丘脑时,分两路分别送达杏仁核和新皮层。杏仁核基本上是独立地完成对产生情绪的反应,如果情绪不那么强烈的话,新皮层会以理智为它保驾护航;但是若是情绪失控的话,新皮层也帮不了什么忙了。

我想也许每个人有过情绪失控的经历。严重一点的是暴怒、狂喜和迷恋,不那么严重的可能是沉浸在忧伤或焦虑的情绪中不可自拔。任何尝试改变这些情绪的努力——如果有的话——都会如泥牛入海,我们让自己开心起来或者不再担心的想法很快就会消失不见,直到某种不利的情绪状态成为常态。

这的确是可以改变的。如果我们认为情绪是不可控的,是由外界刺激而自然产生的、如同开关一样不由分说就会切换的机制的话,自然也会放弃改变情绪的尝试;但是如果认为情绪是可以由自我控制和调节的话,那么它也就的确变成可以调节的了。

虽然不容易,但是我们的确可以自我调节情绪。我们与其他动物之间最大的不同之处,就在于在外界刺激和产生反应之间,有属于理性的空间;有一块可以由我们自己选择的地方。这一部分,就是我们为自己所塑造的解释外界刺激的方式。到底是半杯水还是半空的杯子,是我们自己的选择。

这种选择会慢慢固化,变成我们价值观的一部分,也就决定了我们是偏向于乐观还是悲观。乐观的人对世界有乐观的解释方式,悲观的人则相反。遗传在很大程度上决定了我们的乐观或悲观倾向,但是并非不可改变——归根到底,解释世界的方式,无非是长期养成的习惯罢了。

另一方面,是我们可以学会留着一丝清明的理性,在我们自身的情绪产生时,感知和判断这种情绪是否正确、强度是否在可接受范围之内。这像是我们分裂成两个自己,其中一个任由情绪控制,另一个则站在一边观察,并且随时准备出手干预。

这不简单。不要相信人在狂怒时还有智商;这时候的人基本上和野兽没什么区别——肾上腺素狂飙,只有两种选择或战或逃。疯狂的迷恋也是类似;陷入热恋中的人完全看不到除了对方之外的其他存在。而识别情绪的重要性,刚好是在这种时候避免犯下追悔莫及的错误。

一些方法可以让我们慢慢“分裂”自己,在情绪快达到危险水位时及时叫停。做一些正念练习,会让我们建立更好的自我意识,不作反应、不作判断地关注自己的内心状态;当我们可以熟练地掌握这一方法时,便可以冷静地意识到自己正在产生激烈的情绪。在这种时候,我们将可以分心二用,同时意识到自己的情绪,以及自己对这种情绪的想法。

识别出情绪,是管理情绪的第一步;就像定义出问题,是解决问题的第一步一样。

Source: http://jianshu.io/p/edc6c66f4840

sublime text 3 安装好SublimePythonIDE后,提示代码有很多问题,经查原来是代码不符合pep8规范。

一行列数 : PEP 8 规定为 79 列,这个太苛刻了,如果要拼接url一般都会超。
一个函数 : 不要超过 30 行代码, 即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数。
一个类 : 不要超过 200 行代码,不要有超过 10 个方法。
一个模块 : 不要超过 500 行。

不要在一句import中多个库

不推荐

1
import os, sys

推荐

1
2
import os
import sys

  在整理自己代码的时候记录的问题。

错误记录:W292 no newline at end of file
处理:打个回车有新的一空行即可(新行不要有空格)。

错误记录:E302 expected 2 blank lines, found 1
处理:上面只有一行空白,但是需要两个空白行

错误记录:E231 missing whitespace after ‘,’
翻译:“,”后要有空格
举例:
错误 print(“%s %s %s %s %s %s” % (A,B,D,E,K,L))
正确 print(“%s %s %s %s %s %s” % (A, B, D, E, K, L))

错误记录:E225 missing whitespace around operator
翻译:
举例:
错误 print(“%s %s %s %s %s %s”%(A, B, D, E, K, L))
正确 rint(“%s %s %s %s %s %s”% (A, B, D, E, K, L))

错误记录:E225 missing whitespace around operator
举例:
错误 f=open(“D:\test.txt”, “ab”)
正确 f = open(“D:\test.txt”, “ab”)

参考:

http://www.elias.cn/Python/PythonStyleGuide

selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点:

*  免费,也不用再为破解QTP而大伤脑筋

*  小巧,对于不同的语言它只是一个包而已,而QTP需要下载安装1个多G 的程序。

*  这也是最重要的一点,不管你以前更熟悉C、 java、ruby、python、或都是C# ,你都可以通过selenium完成自动化测试,而QTP只支持VBS

*  支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome

*  支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器的执行,相当于分发机的功能。

关于selenium的基础知识与java平台的结合,我之前写过一个《菜鸟学习自动化测试》系列,最近学python,所以想尝试一下selenium的在python平台如何搭建;还好这方法的文章很容易,在此将搭建步骤整理分享。

搭建平台windows

准备工具如下:


下载python

http://python.org/getit/

下载setuptools 【python的基础包工具】

http://pypi.python.org/pypi/setuptools

https://pypi.python.org/packages/2.7/s/setuptools/

下载pip 【python的安装包管理工具】

https://pypi.python.org/pypi/pip


因为版本都在更新,pyhton选择2.7.xx ,setuptools 选择你平台对应的版本,pip 不要担心tar.gz 在windows下一样可用。

window安装步骤

1、python的安装 ,这个不解释,exe文件运行安装即可,既然你选择python,相信你是熟悉python的,我安装目录C:\Python27

2、setuptools 的安装也非常简单,同样是exe文件,默认会找到python的安装路径,将安装到C:\Python27\Lib\site-packages 目录下。

通过上面提供的setuptools的连接,拖动页面到底部找到,setuptools-1.3.2.tar.gz 文件(版本随着时间版本会有更新),对文件进行解压,找到ez_install.py文件,进入windows命令提示下执行ez_install.py:

C:\setuptools-1.3>python ez_install.py 没有报错表示安装成功。

(如果提示python不是内部或外部命令!别急,去配置一下环境变量吧)

修改我的电脑->属性->高级->环境变量->系统变量中的PATH为:

变量名:PATH

变量值:;C:\Python27

3、安装pip ,我默认解压在了C:\pip-1.3.1 目录下

4、打开命令提示符(开始—cmd回车)进入C:\pip-1.3.1目录下输入:

C:\pip-1.3.1 > python setup.py install

5、再切换到C:\Python27\Scripts 目录下输入:

1
C:\Python27\Scripts > easy_install pip

6、安装selenium,(下载地址: https://pypi.python.org/pypi/selenium    )

如果是联网状态的话,可以直接在C:\Python27\Scripts  下输入命令安装:

1
C:\Python27\Scripts > pip install -U selenium

如果没联网(这个一般不太可能),下载selenium 2.33.0 (目前的最新版本)

并解压把整个目录放到C:\Python27\Lib\site-packages 目录下。

=======如果你不分析wedriver 原理的话,下面两步可以省略=============

7、下载并安装(http://www.java.com/zh_CN/download/chrome.jsp?locale=zh_CN)什么?你没整过java,参考其它文档吧!这不难。

8、 下载selenium 的服务端(https://code.google.com/p/selenium/)在页面的左侧列表中找到

selenium-server-standalone-XXX.jar

对!就是这个东西,把它下载下来并解压;

在selenium-server-standalone-xxx.jar目录下使用命令 java -jar selenium-server-standalone-xxx.jar启动(如果打不开,查看是否端口被占 用:netstat -aon|findstr 4444)。

===============================================

ubuntu 下安装方式:

1、安装:setuptools

1
root@fnngj-H24X:~# apt-get install python-setuptools

2、安装pip

1
2
3
4
5
root@fnngj-H24X:/home/fnngj/python# tar -zxvf pip-1.4.1.tar.gz

root@fnngj-H24X:/home/fnngj/python# cd pip-1.4.1/

root@fnngj-H24X:/home/fnngj/python# python setup.py install

3、安装selenium

1
root@fnngj-H24X:/home/fnngj/python/pip-1.4.1# pip install -U selenium

恭喜~! 你前期工作已经做了,上面的步骤确实有些繁琐,但是并不难,不过我们已经完成成了,下面体验一下成果吧! 拿python网站上的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
assert "Yahoo!" in browser.title
elem = browser.find_element_by_name("p") # Find the query box
elem.send_keys("seleniumhq" + Keys.RETURN)
time.sleep(0.2) # Let the page load, will be added to the API
try:
browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
except NoSuchElementException:
assert 0, "can't find seleniumhq"
browser.close()

(运行过程中如果出现错误:

WebDriverException: Message: u'Unexpected error launching Internet Explorer.

Protected Mode settings are not the same for all zones. Enable Protected Mo

de must be set to the same value (enabled or disabled) for all zones.'

更改IE的internet选项->安全,将Internet/本地Internet/受信任的站定/受限制的站点中的启用保护模式全部去 掉勾,或者全部勾上。)


selenium + python的一份不错文档

http://selenium.googlecode.com/git/docs/api/py/index.html

===========================如果想通过其它浏览器(IE Chrome)运行脚本=================================

安装Chrome driver

chrome driver的下载地址在这里

1. 下载解压,你会得到一个chromedriver.exe文件(我点开,运行提示started no prot 9515 ,这是干嘛的?端口9515被占了?中间折腾了半天),后来才知道需要把这家伙放到chrome的安装目录下…\Google\Chrome\Application\ ,然后设置path环境变量,把chrome的安装目录(我的:C:\Program Files\Google\Chrome\Application),然后再调用运行:

1
2
3
4
5
6
7
8
9
10
11
# coding = utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://radar.kuaibo.com')

print driver.title

driver.quit()

又报了个错:

Chrome version must be >= 27.0.1453.0\n  (Driver info: chromedriver=2.0,platform=Windows NT 5.1 SP3 x86)

说我chrome的版本没有大于27.0.1453.0 ,这个好办,更新到最新版本即可。

安装IE driver

在新版本的webdriver中,只有安装了ie driver使用ie进行测试工作。

ie driver的下载地址在这里,记得根据自己机器的操作系统版本来下载相应的driver。

暂时还没尝试,应该和chrome的安装方式类似。

记得配置IE的保护模式

如果要使用webdriver启动IE的话,那么就需要配置IE的保护模式了。

把IE里的保护模式都选上或都勾掉就可以了。

乙醇的安装方式:

http://easonhan007.github.io/python/2013/05/07/setup-env/

5分钟安装好selenium webdriver + python 环境:

http://v.youku.com/v_show/id_XNjQ1MDI5Nzc2.html?qq-pf-to=pcqq.group

使用此命令可以设置列宽:

1
worksheet.column_dimensions['A'].width = 25

则A列的宽度为25

1
2
3
4
5
6
7
8
9
10
11
12
column_widths = []
for row in data:
for i, cell in enumerate(row):
if len(column_widths) > i:
if len(cell) > column_widths[i]:
column_widths[i] = len(cell)
else:
column_widths += [len(cell)]

for i, column_width in enumerate(column_widths):
worksheet.column_dimensions[get_column_letter(i+1)].width = column_width

来源: Python openpyxl column width size adjust

在本地服务器通过php创建sqlite数据库,或者通过工具比如sqliteadmin创建的sqlite数据库,使用是正常的,但如果上传到服务器上,再通过php打开会现错误:Error: database disk image is malformed, 提示你的数据库文件有损坏,以前一直找不到原因,今天从同事那儿得到解决办法,原来是因为自己使用FTP工具 filezilla上传数据库文件时没有更改传输模式,我使用的是默认,改为二进制模式即可解决此问题,另外,你把数据库压缩成zip格式后,再上传也能解决此问题。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到IBM VM系统,在对方系统上,此文件不能执行。(但是,它可以从VM系统上以二进制方式拷贝到另一macintosh,是可以执行的)。

如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

数据库文件记得使用二进制模式!

测试代码如下:

1
2
3
4
5
6
7
<?php
if (extension_loaded('sqlite')) {
echo 'Support';
}else{
echo 'Not Support';
}
?>

另外一个测试代码,测试sqlite3的

1
2
3
4
5
6
7
8
<?php
$db = new SQLite3('mysqlitedb.db');

$results = $db->query('SELECT bar FROM foo');
while ($row = $results->fetchArray()) {
var_dump($row);
}
?>

在linux命令下测试:

1
php -i | grep -i sqlite3

应该会出现以下代码:

1
2
3
4
sqlite3
SQLite3 support => enabled
SQLite3 module version => 0.7-dev
sqlite3.extension_dir => no value => no value

我的php5.2.3默认是支持sqlite3的,如果不支持,你可以升级下PHP

SQLite3 扩展自 PHP 5.3.0 起已默认启用。 允许在编译时使用 –without-sqlite3 禁用之。

Windows 用户必须启用 php_sqlite3.dll 方可使用该扩展。自 PHP 5.3.0 起,此扩展的 DLL 文件 已包含于 Windows 版的 PHP 发行包中。

windows sqlite3启用办法:

    在php.ini中把extension=php_sqlite3.dll前面的分号去掉

军哥的LNMP0.9 PHP 5.2.17p1 (cli) 可能不支持sqlie3
你可以选择升级PHP,或者使用以下方法安装:

1
2
3
4
5
6
7
8
9
cd ~
wget http://pecl.php.net/get/sqlite3-0.6.tgz
tar -zxf sqlite3-0.6.tgz
cd sqlite3-0.6/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
/etc/init.d/httpd restart

安装完成后如果还是不行,需要修改php.ini( vi /usr/local/php/etc/php.ini)一个配置
[在命令下查看配置文件路径的方法: php -i | grep 'Configuration File']

1
2
3
4
; Directory in which the loadable extensions (modules) reside.
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "memcache.so"
extension = "pdo_mysql.so"

修改为

1
2
3
4
5
; Directory in which the loadable extensions (modules) reside.
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "sqlite3.so"

重启服务即可。

但是当我执行 文件时出错了
SQLite header and source version mismatch
解决办法参考:
http://stackoverflow.com/questions/6696861/how-do-i-upgrade-my-sqlite3-package-on-debian-lenny

其它

sqlite3 数据库错误,Error: database disk image is malformed 目前搜索的解决的方案都说无法解决。只能通过备份解决,此问题是在本地测试正常,上传到服务器时出现此错误,你可以在本地通过备份操作,先导出数据库为sql文件,然后上传sql文件,在服务器端重新创建。

备份操作:

1
2
3
sqlite3  testdb ".dump" > dump
mv testdb.mdb testdb.mdb.backup
cat dump | sqlite3 testdb.mdb

更新: 由于使用ftp工具直接上传的sqlite数据库,所以出现问题,你可以把传输模式改为二进制。或者打包成压缩后再传输。经测试可以解决上传之后的sqlite数据库database disk image is malformed问题。

windows7 64位 XAMPP python3.3.2 web环境搭配

本来根据网上的资料想使用mod_python,可是没有对应python3.3.2的版本,在http://stackoverflow.com/questions/3319545/mod-wsgi-mod-python-or-just-cgi这个问题上,发现是建议使用mod_wsgi
http://code.google.com/p/modwsgi/wiki/DownloadTheSoftware?tm=2 了解到mod wsgi在window下的安装过程。

mod_wsgi的下载地址为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

根据版本号下载相应文件,python3.3.2对应
http://www.lfd.uci.edu/~gohlke/pythonlibs/bmsicnqj/mod_wsgi-3.4.ap24.win-amd64-py3.3.zip

解压mod_wsgi.so并复制到你的apache安装目录下的modules文件夹下,比如我的使用的是xampp,相应的apache目录为 D:\xampp\apache\modules

在httpd.conf文件中加入

LoadModule wsgi_module modules/mod_wsgi.so

但总是失败 can not load modules/mod_wsgi.so into server ,最后是把xampp中的apache替换成 http://www.apachelounge.com/download/ 这个网站上的相应版本的apache,然后才成功。 【Apache2.4.4需要VC10库支持】

下载2.4后,mod_wsgi可以用了,但xampp与php的联系不可用了,重新下载php5.4 VC11 x64解决问题。
http://windows.php.net/downloads/releases/php-5.5.10-Win32-VC11-x64.zip

还需要修改httpd.conf ,添加以下代码

1
2
3
4
5
WSGIScriptAlias /googlescrape "D:/workfiles/wwwroot/googlescrape/"
<Directory "D:/workfiles/wwwroot/googlescrape">
Order allow,deny
Allow from all
</Directory>

在xampp中,你也可以添加到httpd-vhosts.conf中

也行你会发现新装php后,mysql连接不能用了
解决办法
复制一份php.ini-development为php.ini, 在PHP.ini中找到
extension_dir = "ext" (大约852行)
改为
extension_dir = "d:/php/ext"
并去掉注释

找到;extension=php_mysql.dll (大约1005行)
将’;’去掉,改为
extension=php_mysql.dll

重启apache服务即可。

Django 是 使用 easy_install Django 安装的。

进入相应目录(例如:D:\workfiles\wwwroot\)使用Django-admin.py startproject googlescrape 生成相应项目
如果需要数据库使用:
执行 manage.py syncdb 生成数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
D:\workfiles\wwwroot\googlescrape>manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session

You just installed Django's auth system, which means you don't have any superuse
rs defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'administrator'): admin
Email address: xxx@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

注:
有个相关教程在里:http://enkoding.blogspot.jp/2013/01/setup-python-for-web-in-7-steps-on.html, 可能需要翻墙,我的安装比较麻烦,主要是我的xampp不支持上面的各种mod_wsgi,我最后不得不在http://www.apachelounge.com/download/重新下载apache2.4

查到相关资料,可能是因为mod_wsgi必须是apache版本64位的,所以32位的会出问题,可以尝试下载一个64位的xampp试试,我目前还没有尝试。

参考资料:
http://agong.org/2013/windows64-python3-apache-wsgi-django.html
http://www.cnblogs.com/zhoujie/archive/2013/05/11/django1.html
http://www.cnblogs.com/wang_yb/archive/2011/04/14/2016513.html
http://www.vimer.cn/2010/09/apachemod_wsgidjango%E5%9C%A8windows%E4%B8%8B%E7%9A%84%E9%83%A8%E7%BD%B2.html

0%