51Testing软件测试网

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2021年6月 (1)
  • 2021年3月 (1)
  • 2020年9月 (1)
  • 2020年3月 (1)
  • 2020年1月 (2)
  • 2019年12月 (3)
  • 2019年11月 (5)
  • 2019年10月 (1)
  • 2019年9月 (2)
  • 2019年8月 (14)
  • 2019年7月 (20)
  • 2019年6月 (15)
  • 2019年5月 (12)
  • 2019年4月 (19)
  • 2019年3月 (20)
  • 2019年2月 (9)
  • 2019年1月 (16)
  • 2018年12月 (17)
  • 2018年11月 (21)
  • 2018年10月 (16)
  • 2018年9月 (20)
  • 2018年8月 (22)
  • 2018年7月 (3)
  • 2018年6月 (1)
  • 2018年5月 (7)
  • 2018年4月 (1)
  • 2018年3月 (3)
  • 2018年2月 (6)
  • 2018年1月 (2)
  • 2017年9月 (8)
  • 2017年8月 (28)
  • 2017年7月 (3)
  • 2016年11月 (1)
  • 2016年6月 (1)
  • 2016年4月 (1)
  • 2016年2月 (2)
  • 2015年7月 (1)
  • 2015年5月 (1)
  • 2015年4月 (2)
  • 2015年3月 (1)
  • 2015年2月 (2)
  • 2015年1月 (6)
  • 2014年12月 (3)
  • 2014年11月 (3)
  • 2014年10月 (3)
  • 2014年9月 (2)
  • 2014年8月 (8)
  • 2014年7月 (16)
  • 2013年12月 (5)
  • 2013年11月 (1)
  • 2013年10月 (3)
  • 2013年9月 (2)
  • 2013年8月 (2)
  • 2013年7月 (3)
  • 2013年5月 (1)
  • 2013年4月 (2)
  • 2013年3月 (2)
  • 2013年2月 (3)
  • 2013年1月 (4)
  • 2012年12月 (4)
  • 2012年11月 (4)
  • 2012年10月 (3)
  • 2012年9月 (4)
  • 2012年8月 (3)
  • 2012年7月 (4)
  • 2012年6月 (2)
  • 2012年5月 (2)
  • 2012年4月 (1)
  • 2012年3月 (2)
  • 2012年2月 (2)
  • 2012年1月 (1)
  • 2011年12月 (3)
  • 2011年11月 (2)
  • 2011年10月 (1)
  • 2011年9月 (4)
  • 2011年8月 (3)
  • 2011年7月 (2)
  • 2011年6月 (4)
  • 2011年5月 (4)
  • 2011年4月 (2)
  • 2011年3月 (4)
  • 2011年2月 (4)
  • 2011年1月 (7)
  • 2010年12月 (7)
  • 2010年11月 (5)
  • 2010年10月 (4)
  • 2010年9月 (7)
  • 2010年8月 (7)
  • 2010年7月 (3)
  • 2010年6月 (3)
  • 2010年5月 (4)
  • 2010年4月 (4)
  • 2010年3月 (5)
  • 2010年2月 (3)
  • 2010年1月 (4)
  • 2009年12月 (3)
  • 2009年11月 (3)
  • 2009年10月 (1)
  • 2009年9月 (3)
  • 2009年8月 (2)
  • 2009年7月 (3)
  • 2009年6月 (1)
  • 2009年5月 (2)
  • 2009年4月 (4)
  • 2009年3月 (5)
  • 2009年1月 (1)
  • 2008年11月 (2)
  • 2008年7月 (5)
  • 2008年6月 (4)

文章分类

  • 行业资讯(45) (rss)
  • 软件业务知识(43) (rss)
  • 软件开发知识(33) (rss)
  • 软件测试工具(39) (rss)
  • 软件测试技术(157) (rss)
  • 软件测试管理(40) (rss)
  • 软件测试职业发展(57) (rss)

51testing软件测试网

搜索

  •  

最新评论

  • 1. re: 淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!
  • 关注官方公众号“Atstudy网校”,点击中间菜单栏“双11”,领取双十一技术内幕资料。
  • --51testing
  • 2. re: 软件测试流程的一点感悟
  • 提交缺陷时只需要描述现象即可,过多的分析可能会误导开发
  • --凡客诚品
  • 3. re: 软件测试流程的一点感悟
  • 阿达宿建德江阿斯顿
  • --凡客礼品卡
  • 4. re: 手机软件测试的经验总结
  • 很好啊~不错
  • --乐蜂网
  • 5. re: 手机软件测试的经验总结
  • 很好啊~
  • --罗莱家纺

阅读排行榜

  • 1. 软件测试流程的一点感悟(1091)
  • 2. 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!(940)
  • 3. 测试自动化及软件测试工具的比较(858)
  • 4. 银行线上信贷系统如何做好接口测试?手把手教你接口工具Postman(825)
  • 5. 软件为什么要做异常测试?测试员必知的22个测试点总结!(807)

评论排行榜

  • 1. 软件测试流程的一点感悟(4)
  • 2. 软件测试的原则和经验 (4)
  • 3. 嵌入式软件测试技巧(2)
  • 4. 手机软件测试的经验总结 (2)
  • 5. 常用软件测试工具的分析与比较(1)

Powered by: 博客园
模板提供:沪江博客
IT博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

移动端自动化测试框架Appium资料整理,写给新入门的同学
     摘要: 随着移动终端的普及,手机应用越来越多,也越来越重要。App的回归测试用例数量也越来越多,全量回归也越来越消耗时间。为了摆脱这些,需要引进一些自动化测试来协助我们。这里介绍一个手机自动化测试框架Appium。那究竟什么是Appium呢?1、测试对象Appium是一个开源工具,用于自动化iOS、Android设备和Windows桌面平台上的原生、移动Web和混合应用。"原生应用"指那些用iOS、And...  阅读全文
posted @ 2018-08-10 17:51 51testing 阅读(221) | 评论 (0) | 编辑 收藏
 
自动化测试:盘点Selenium页面元素定位的8种方法
     摘要: 前段时间因项目需要,学习Selenium进行自动测试。现在总结整理下Selenium中元素定位的方法,希望可以帮助一些有疑问的朋友。自动化测试步骤 :定位元素→操作元素→验证操作结果→记录测试结果在自动化测试过程中,测试程序通常的操作页面元素步骤找到Web的页面元素,并赋予到一个存储对象中 (WebElement)对存储页面元素的对象进行操作,例如:点击链接,在...  阅读全文
posted @ 2018-08-09 17:56 51testing 阅读(286) | 评论 (0) | 编辑 收藏
 
Java和Python哪个更好?解读Python对比其他语言的优势

人生苦短,我用Python,为啥这么说,因为我们码农圈有金句:学完Python,便可上天 ~

首先我要向各位坦诚,我对 Python 的喜爱也是从几年以前才开始的。不经历长期的痛苦教训,我们是不会对这门语言以及它的平台所提供的一切心生感激的。我写下这篇短文的目的就是要将你从同样的痛苦中拯救出来,让你明白为什么需要去了解Python。

在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。更可怕的是,这把火不仅仅是在程序员的圈子里越烧越旺,甚至还烧到了程序员的圈子外,从小学生到职场老司机,都在学习这样一门语言。

那么,问题来了,Python凭什么受到大家的追捧呢?难道真的只是因为它的低门槛与骚操作?我发现,事情并没有这么简单。这得好好分析一下了,Python到底是用了什么招数怼翻其他编程语言的?没有对比就没有优(shang)势(hai),我就拿Python跟其他语言来个大PK!

Java和Python哪个更好?

作为世界上使用范围最广的编程语言,Java难免总是被拿来跟Python比较,而且,在编程语言的各种对战中,Python 与Java也是打得最热烈的。

那到底是Python好还是Java好?

Java和Python的区别

Java是一种严格的类型语言,这意味着必须显式声明变量名。相比之下,动态类型的Python则不需要声明变量。在编程语言上有许多关于动态和静态类型的争论,但有一点应该注意:Python是一种语法简单的功能强大的语言,能够通过编写脚本就提供优秀的解决方案,并能够快捷地部署在各个领域。

Java可以创建跨平台的应用程序,而Python几乎兼容当前所有操作系统。对新手来讲, Python比Javaf更容易上手,而且代码易读性强,但是如果你想你的代码可以在任何地方都能执行的话,那么还是选择Java吧。不过Java的可移植性也是有代价的,使用Java你需要购买更大的机器,消耗更多的内存,并且程序更加难以开发。

Java比Python更复杂,没有技术背景的人学起来并非易事。

Python和PHP

从开发的角度来看,PHP是面向WEB的语言。PHP应用程序更像是一组单独的脚本,甚至只是一个单独入口。而Python是多用途语言,也可以用于WEB开发,基于Python的WEB应用是加载到内存的完整应用,有自己的内容声明,保存所有的查询和请求。选择Python还是PHP进行 web应用开发需要注意以下几点:

Python和PHP web开发的比较

在开始学习任何东西前,要确保你要学的技术在未来1、5或10年内仍保持流行,不会被遗忘。不过,你大可不必担心,因为PHP和Python都属于世界上最流行的编程语言。

虽然Python没有PHP那么多引以为豪的框架,但个情况很快会改变(目前最好用的是Django和Flask)。

在简单易学方面,Python继续吊打PHP,想要完全掌握PHP需要花费较多的时间和精力。对于新手来说,如果想学一项更容易、更灵活的技术,那Python就是最佳选择。

Python与c#

现在再来和看下c#。它们的技术差异很大,但都适用于web开发。

Python对c#的比较

简而言之,Python原本就被设计的类似用英语表达一样,只要你使用合适的变量名称,许多表达式就很容易读懂。另外,由于Python语法简单,没有像句法括号和大量的修饰词,各种类C的构造和不同的初始化变量,所以Python写的代码易读易学。

同时,C#从C++和Java遗传了很多原始表达的类C语法,C#必须遵循一定的规则,伴随着很多修饰词,还得将代码段放在括号内。而Python只用SHIFTS键就可以让代码看上去很整洁。

至于编写脚本方面,值得一提的是Python的脚本是真正的脚本,能够被解释器执行。而且使用Python更容易编写跨平台的脚本,甚至都不需要重新编译。

但是,我们要指出Python的一个不足,就是需要在机器上安装脚本解释器,至少要在一个包或可执行文件里打包上一个解释器,从而使脚本的大小从几KB增加到十几M,不过这也不是什么大问题。

而C#需要IDE来编写程序,C#的一个好处是,当你编写基于WINDOWS平台的脚本时,它有强大的各类WINDOWS系统组件支持。

没法说Python和C#哪个更好,Python比C#更容易学,开源库更多,但C#的标准库比Python的更好,其性能更高。

Ruby和Python的区别

就第一语言而言,Ruby和Python是最受欢迎的。

Ruby和Python

Ruby和Python都是面向对象的语言,都是动态和灵活的。这些技术的主要区别在于他们解决问题的方式。Ruby提供了不同的方法而Python通常只有一个。这个事实既是优势也劣势。

最流行的Ruby框架是Ruby on rails,它和Django非常类似。Python在数据科学和数学方面很受欢迎,所以在这里你可以找到很多的学者和教授。

开发web应用程序时,可以用RoR实现,也可以用Django,两者都是快速高效的。如果开发偏重于大量计算和数据处理的应用,应该选择Python。

Python的支持者是世界上规模最大和构成最多样化的一个团队,不仅有数以千计的个人开发者,而且还有诸如谷歌,Yandex,Dropbox,Mozilla,微软(在Visual Studio中使用),英特尔等许多巨头公司,他们和其他许多公司一起,已经用Python创建了世界上最大的和最受欢迎的项目。

总结

并没有很多的语言能提供像 Python 这样的多样性和简洁性; 能持续努力演进并让社区繁荣好几十年的就更少了。无论你是编码新手还是能信手写就脚本的大师,都需要了解一下 Python。

欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

posted @ 2018-08-08 17:21 51testing 阅读(195) | 评论 (0) | 编辑 收藏
 
web应用存在的10大安全问题,安全测试不容忽视!
随着web、社交网络等一系列新型的互联网产品的不断升级,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是web安全威胁的凸显,对web服务器的攻击可以说是形形色色。
先回顾一下前几年发生过的由于互联网安全问题引发的事件
1、携程网用户支付信息出现漏洞:漏洞泄露的信息包括用户的姓名、身份证号码、银行卡卡号、银行卡CVV码
2、UC浏览器用户敏感数据泄漏的漏洞:只要用户通过UC浏览器搜索并登录人人、新浪微博等网站,其提交的用户信息和密码都有可能被黑客截取
3、小米论坛存在用户资料泄露:泄露涉及800万小米论坛注册用户
那么造成这些问题的原因是什么呢?下面我来为大家进行分析。
web应用通常存在的10大安全问题
1、SQL注入
拼接的SQL字符串改变了设计者原来的意图,执行了如泄露、改变数据等操作,甚至控制数据库服务器, SQL Injection与Command Injection等攻击包括在内
2、跨站脚本攻击(XSS或css)
跨站脚本(Cross-Site Scripting)是指远程WEB页面的html代码可以插入具有恶意目的的数据,当浏览器下载该页面,嵌入其中的恶意脚本将被解释执行,从而对客户端用户造成伤害。简称CSS或XSS
3、没有限制URL访问
系统已经对URL的访问做了限制,但这种限制却实际并没有生效。攻击者能够很容易的就伪造请求直接访问未被授权的页面
4、越权访问
用户对系统的某个模块或功能没有权限,通过拼接URL或Cookie欺骗来访问该模块或功能
5、泄露配置信息
服务器返回的提示或错误信息中出现服务器版本信息泄露、程序出错泄露物理路径、程序查询出错返回SQL语句、过于详细的用户验证返回信息。
6、不安全的加密存储
常见的问题是不安全的密钥生成和储存、不轮换密钥,和使用弱算法。使用弱的或者不带salt 的哈希算法来保护密码也很普遍。外部攻击者因访问的局限性很难探测这种漏洞。他们通常必须首先破解其他东西以获得需要的访问。
7、传输层保护不足
在身份验证过程中没有使用SSL / TLS,因此暴露传输数据和会话ID,被攻击者截听,或使
用过期或者配置不正确的证书。
8、登录信息提示
用户登录提示信息会给攻击者一些有用的信息,作为程序的开发人员应该做到对登录提示信
息的模糊化,以防攻击者利用登录得知用户是否存在
9、重复提交请求
程序员在代码中没有对重复提交请求做限制,这样就会出现订单被多次下单,帖子被重
复发布。恶意攻击者可能利用此漏洞对网站进行批量灌水,致使网站瘫痪
10、网页脚本错误
访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”,也就是网站中的脚
本没有被成功执行。遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口
在OWASP(The Open Web Application Security Project)的安全问题TOP10里,以下几个占比超过50%:
sql注入:
拖库
通过技术手段,利用网站安全漏洞把服务器数据库中的数据全部或部分获取;网站越大,用户信息越多,拖库的影响越大,危害越大
撞库
很多用户在登录不同网站时为了图方便好记,往往喜欢用统一的用户名和密码,黑客把拖库取得的用户名及密码跟网络银行、支付宝、淘宝等有价值的网站进行匹配登录,这就是“撞库”
爆破
俗称“暴力破解”或“爆破”,对已知的用户名,使用密码字典库暴力尝试、破解用户密码;如果网站不限制密码重试次数,被爆破成功的概率较高,这里的拖库,就是我们平时所说的sql注入,利用前端和后台的疏忽,将后台数据库中的数据全部拖出
解决办法:
1. 不要信任用户的输入,对用户的输入进行校验
正则校验、长度限制、特殊字符转码(' --)
2. 不要使用动态拼接SQL
参数化sql、类型判定
3. 不要使用管理员权限的数据库连接
为每个应用开放有限的独立权限
4. 数据库机密信息不要明文存储 加密、hash
5. 异常信息不要直接返回给用户
使用自定义的错误信息进行包装
跨站脚本攻击(Cross Site Scripting)
这里解释一下,因为跨站脚本攻击的缩写是CSS,为了与CSS区分,所以这里缩写为XSS
攻击者向web页面里插入恶意html代码 用户浏览该页之时,嵌入其中的html代码会被执行,通常以获取用户cookie为目的注入内容以javascript为主,xss又分反射型和存储型,两者原理类似反射型xss的特点是请求即执行;而存储型xss的特点是先存储,再执行;
解决办法: 
内容过滤:过滤关键字 "javascript..."
转码:分号、<>...
Cookie属性:Secure、http-only
失效的身份认证和会话管理
这类问题细分起来种类繁多,举几个有代表性的吧
web应用在开发时,可能存在为了实现需求而自定义身份认证方式或会话管理方式,例:会话id存在url中,这样如果直接copy别人的url,那么可以直接使用这个人的账户信息;用户名、密码等信息cookie未设置过期时间,那么当他人登录同一客户端时,也可能会直接使用他人账户;
解决办法:
避免未经授权访问会话状态
限制会话寿命
对身份验证 cookie 的内容进行加密
不要在网络上以纯文本形式发送密码
在web应用程序中是什么导致安全性问题呢?一般有以下几个原因
1、复杂应用系统代码量大、开发人员多、难免出现疏忽
2、系统屡次升级、人员频繁变更,导致代码不一致
3、历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上
4、开发人员未经过安全编码培训或者公司根本就没有统一的安全编码规范
5、测试人员经验不足或者没经过专业的安全评估测试就发布上线
6、没有对用户的输入进行验证:
1)永远不要信任用户的输入,要对用户的输入进行校验
2)数字型的输入必须是合法的数字
3)字符型的输入中对 编码符号要进行特殊处理
4)验证所有的输入点,包括Get,Post,Cookie以及其他HTTP头
总结:
Web安全是我们测试组一直以来作为和性能测试并驾齐驱的两个重点。开发的过程中还需要着重注意,该转义的地方转义;该屏蔽的地方屏蔽,该过滤的地方过滤等等。下半年又到了,势必又有大批的发号抽奖之类的活动开发、上线,在这个过程中,安全问题是我们每个人应该紧绷的神经,对于我们测试人员来说,每个活动需要做到手动安全测试加自动化安全测试相结合。
欢迎加入51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349
关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。
posted @ 2018-08-07 17:13 51testing 阅读(190) | 评论 (0) | 编辑 收藏
 
带你入门Python爬虫,8个常用爬虫技巧盘点

python作为一门高级编程语言,它的定位是优雅、明确和简单。我学用python差不多一年时间了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本。

这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,故累积了不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。

1、基本抓取网页

get方法

import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()

post方法

import urllib
import urllib2
url = "http://abcde.com"
form = {'name':'abc','password':'1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()

2.使用代理服务器

这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。

import urllib2

proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})

opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)

urllib2.install_opener(opener)

content = urllib2.urlopen('http://XXXX').read()

3.Cookies处理

import urllib2, cookielib

cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())

opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)

urllib2.install_opener(opener)

content = urllib2.urlopen('http://XXXX').read()

是的没错,如果想同时用代理和cookie,那就加入proxy_support然后operner改为 

opener=urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)

4.伪装成浏览器访问

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。这时候我们需要伪装成浏览器,这可以通过修改http包中的header来实现:

headers = {

    'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'

}

req = urllib2.Request(

    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',

    data = postdata,

    headers = headers

)

5、页面解析

对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样,就不用过多的说明。

其次就是解析库了,常用的有两个lxml和BeautifulSoup。
对于这两个库,我的评价是,都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxmlC语言编码,高效,支持Xpath。

6.验证码的处理

碰到验证码咋办?这里分两种情况处理:

google那种验证码,没办法。

简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分单个字符,划分好了以后再通过特征提取的方法(例如PCA)降维并生成特征库,然后把验证码和特征库进行比较。这个比较复杂,这里就不展开了,具体做法请弄本相关教科书好好研究一下。

7. gzip/deflate支持

现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45K,为原来的1/5。这就意味着抓取速度会快5倍。

然而python的urllib/urllib2默认都不支持压缩,要返回压缩格式,必须在request的header里面写明’accept-encoding’,然后读取response后更要检查header查看是否有’content-encoding’一项来判断是否需要解码,很繁琐琐碎。如何让urllib2自动支持gzip, defalte呢?

其实可以继承BaseHanlder类,然后build_opener的方式来处理:

import urllib2

from gzip import GzipFile

from StringIO import StringIO

class ContentEncodingProcessor(urllib2.BaseHandler):

  """A handler to add gzip capabilities to urllib2 requests """

  # add headers to requests

  def http_request(self, req):

    req.add_header("Accept-Encoding", "gzip, deflate")

    return req

  # decode

  def http_response(self, req, resp):

    old_resp = resp

    # gzip

    if resp.headers.get("content-encoding") == "gzip":

        gz = GzipFile(

                    fileobj=StringIO(resp.read()),

                    mode="r"

                  )

        resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code)

        resp.msg = old_resp.msg

    # deflate

    if resp.headers.get("content-encoding") == "deflate":

        gz = StringIO( deflate(resp.read()) )

        resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code)  # 'class to add info() and

        resp.msg = old_resp.msg

    return resp

# deflate support

import zlib

def deflate(data):   # zlib only provides the zlib compress format, not the deflate format;

  try:               # so on top of all there's this workaround:

    return zlib.decompress(data, -zlib.MAX_WBITS)

  except zlib.error:

    return zlib.decompress(data)

然后就简单了,

encoding_support = ContentEncodingProcessor

opener = urllib2.build_opener( encoding_support, urllib2.HTTPHandler )

#直接用opener打开网页,如果服务器支持gzip/defalte则自动解压缩

content = opener.open(url).read()

8、多线程并发抓取

单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。

虽然说Python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。

from threading import Thread
from Queue import Queue
from time import sleep
# q是任务队列
#NUM是并发线程总数
#JOBS是有多少任务
q = Queue()
NUM = 2
JOBS = 10
#具体的处理函数,负责处理单个任务
def do_somthing_using(arguments):
    print arguments
#这个是工作进程,负责不断从队列取数据并处理
def working():
    while True:
        arguments = q.get()
        do_somthing_using(arguments)
        sleep(1)
        q.task_done()
#fork NUM个线程等待队列
for i in range(NUM):
    t = Thread(target=working)
    t.setDaemon(True)
    t.start()
#把JOBS排入队列
for i in range(JOBS):
    q.put(i)
#等待所有JOBS完成
q.join()

9. 总结

阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身。Python虽然是基于C语言编写,但是摒弃了C中复杂的指针,使其变得简明易学。并且作为开源软件,Python允许对代码进行阅读,拷贝甚至改进。这些性能成就了Python的高效率,有“人生苦短,我用Python”之说,是一种十分精彩又强大的语言。

总而言之,开始学Python一定要注意这4点:

1.代码规范,这本身就是一个非常好的习惯,如果开始不养好好的代码规划,以后会很痛苦。

2.多动手,少看书,很多人学Python就一味的看书,这不是学数学物理,你看例题可能就会了,学习Python主要是学习编程思想。

3.勤练习,学完新的知识点,一定要记得如何去应用,不然学完就会忘,学我们这行主要都是实际操作。

4.学习要有效率,如果自己都觉得效率非常低,那就停不停,找一下原因,去问问过来人这是为什么。

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

欢迎加入51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349

posted @ 2018-08-06 16:59 51testing 阅读(247) | 评论 (0) | 编辑 收藏
 
老司机专为测试新手绘制的学习selenium路线图(基础普及篇)!

最近后台有很多小伙伴留言,想学习selenium,但是一直找不到思路和方法,还没入门就迷路了,于是我亲手编写了这篇学习路线图。希望能帮助初学者快速入门,帮助已入门的朋友尽快提升。

学习之前,要弄懂什么是Selenium?

Selenium是浏览器自动化工具,主要用来Web的自动化测试,以及基于Web的任务管理自动化。它支持的语言有:python、Java、ruby、JavaScript等,并且几乎能在主流的浏览器上运行。

Selenium2.0、Selenium3.0主要由三大部分组成:SeleniumIDE、Selenium WebDriver、Selenoium Grid。

Selenium IDE:录制和回放脚本,可以模拟用户对页面的真实操作,区别于其他工具:是通过拦截http请求。

一般只把录制脚本当作一个辅助功能,因为一个UI节点的细微变化,都可能导致自动化测试工具无法识别,当测试项目项目大时,定位、更新十分困难。

其次,录制的脚本有时候人工难以理解。

Selenium Grid:实现在多台机器上、和异构环境中并行执行测试用例。并行执行不仅节省时间,而且可以同时在不同的浏览器、平台上运行自动化测试脚本。

Selenium Web Driver:针对各个浏览器而开发,通过原生浏览器支持或者扩展(Chrome webDrive、FireFox WebDriver)直接控制浏览器

VS Selenium RC(Selenium1.0):在浏览器中运行javaScript,使用浏览器内置的JavaScript来翻译和执行selense

学习selenium分5步走:

第一步:幼儿园阶段

1.选语言:在学习自动化前,先要选一门语言学习,目前最流行的是java和python,我也没什么语言基础,选的python作为自动化入门的脚本语言。

2.python:选好语言,就要学习基础的语法,目前市面上python脚本分为2个:python2和python3,新手的话建议python2。

3.python基础:选好python版本后,接下来就是python的基础学习了,python基础的东西主要包括:print、变量、数据类型、for、if、while这些,这些基本的了解了,差不多就可以上手了。

4.selenium:selenium目前有三个版:selenium1也就是selenium RC,不用多说大家应该都知道,selenium2,目前最流行的; 新出的selenium3,与selenium2区别不大,主要是启动firefox会遇到两个坑,不大适合刚入手的小白,所以我推荐初学者selenium2。

第二步:小学阶段  

5.selenium API:很多人学习自动化喜欢先用录制的工具,但如果遇到动态元素的id,回放便会失败。所以录制并不靠谱,了解下原理即可,不需花太多时间。学习selenium,我们直接去看api文档就行。

6.元素定位:selenium提供了八种元素定位:id、name、class、tag、link、patail_link、xpath、css.小白如果不懂可以用firepath和firebug来辅助定位,先是通过简单的元素属性定位,接着就得学xpath了

7.xpath:xpath定位基本上可以解决80%的元素定位问题。xpath可以虽然作用大,但是比较笨重,定位元素慢,语法很长,还不稳定,这样就有必要去学习下css了。

第三步:中学阶段

8. css:css定位速度快,稳准狠,轻巧,语法简洁。但还是有些模糊匹配的地方,还是要用xpath。

9. 操作元素:定位好元素之后接下来就是操作元素了,主要有困难的是鼠标事件和键盘事件。

10.判断元素:操作完后,就是获取返回结果了,或者是判断元素是不是期望结果。

11.unittest:测试框架帮我们运行用例。

12.测试报告:用例执行完后,html测试报告。

13. 发送邮件:报告生成好之后,需自动发送邮件

第三步:高中阶段

14.函数:写用例时,解决重复操作问题,就需把常用的方法写成函数调用。

15.类和方法:函数写多,可以常用的操作写到一块,按需直接调用, 就要学习类和方法。16.参数化:想改测试数据,需把测试数据分离出来,用到参数化

17.数据驱动:用例写好后,仅需维护测试数据就可以了

第四步:大学阶段

18.封装:方法熟练,就需要封装了

19.jenkins:希望一键执行用例,需要用到jenkins来做持续集成

20.代码仓库:多人执行自动化项目,需代码同步,就要用svn、git工具

第五步:研究生阶段

21.js:前面selenium东西学完,但也会发现问题,比如:浏览器的滚动条,很多场景是selenium无法完成的,就需要学js。

22.学无止境:根据个人的研究方向,进一步深度学习。

Selenium的学习很容易令人感到疲惫,许多测试会无故地失败,让这些测试得到正确的结果是非常繁琐的工作,重复性的样板代码令人提不起兴致,这时就要挖掘自己的兴趣,让测试变得快乐。我归纳了一个小技巧,就是联想,或者说关联思考?联想有助于归纳你所学到的东西,并在需要的时候可以演绎出新的知识。联想同类型的业务的现实,可能一开始没有太多可以联想的,但时间长了会好的,愿你、我都能离梦想越来越近!

欢迎加入51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

posted @ 2018-08-03 17:40 51testing 阅读(296) | 评论 (0) | 编辑 收藏
 
移动App崩溃测试用例设计分享,快速找出bug解决麻烦!

随着科技的发展、生活的进步,我们身边的移动设备越来越多,自然移动App测试也变得越来越重要,一旦移动App出现Bug,将直接影响人们的生活。

移动App Bug的严重影响:用户体验差、App的商店评级下降、用户换用竞争对手的App,声誉和信誉损失、如果是一个付费App,会影响最后销售量减少。

近期,我也做了一些调查,发现App 崩溃是最常见的Bug ,这直接影响到用户体验,是造成用户流失的根本原因,也是我们测试人员非常头疼的问题。

所以,我整理了一些可能触发崩溃的操作场景和主要原因,希望可以补充完善你的基础用例库!

App崩溃现象:

这是测试中的常见问题,这类问题也是非常严重的,会直接影响用户对产品的第一印象,例如我们正在使用某个APP,正在使用突然应用就停止响应,界面上弹出“强制关闭错误”的窗口,需要强制关闭应用,或者正在使用时出现闪退的现象。这些情况都很影响用户的体验,导致用户卸载该APP。

受环境(大量的设备,各种移动OSs,适应频繁OSs 变化) 、设备(触摸式和非触摸式,内存容量,耗电量) 、网络(不同运营商,在无网络的情况下的App 行为) 、可用性(方向,缩放,分页和导航的局限性,各种干扰,如来电,来电短信闹钟,和低电量警报)的影响,移动App测试比传统台式机测试较为复杂。所以需要根据这些手机专有的复杂性,拟定新的移动App测试的测试用例设计方案。

移动App崩溃的测试用例设计

测试用例是移动测试最重要部分之一。

准备和执行预先定义的针对移动App崩溃的测试用例将简化和加速移动App崩溃的测试。通用的触发移动APP崩溃的测试场景,如下:

验证在有不同的屏幕分辨率,操作系统和运营商的多个设备上的App 行为。

通过手动网络从蜂窝更改到Wi-Fi ,或反过来,验证App 行为。

验证在如隧道,电梯等网络质量突然改变的环境中的App 行为。

用新发布的操作系统版本验证App 的行为。

验证在没有网络的环境中的App 行为。

验证来电/短信和设备特定的警报(如警报和通知)时的App 行为。

通过改变设备的方向,以不同的视图模式,验证App 行为。

验证设备内存不足时的App 行为。

通过用测试工具施加载荷验证App 行为。

用不同的支持语言验证App 行为。

移动App崩溃的主要原因:

设备碎片化:由于设备极具多样性,App 在不同的设备上可能有表现不同。

带宽限制:带宽不佳的网络对App 所需的快速响应时间可能不够。

网络的变化:不同网络间的切换可能会影响App 的稳定性。

内存管理:可用内存过低,或非授权的内存位置的使用可能会导致App 失败。

用户过多:连接数量过多可能会导致App 崩溃。

代码错误:没有经过测试的新功能,可能会导致App 在生产环境中失败。

第三方服务:广告或弹出屏幕可能会导致App 崩溃。

总结:

科技改变生活,随着软件测试的兴起,如果移动测试团队在他们的测试场景中提前准备并执行这些测试用例,那么就可以早早地找出崩溃bug,与开发团队一起解决所有的bug问题,避免很多后续不必要的麻烦,同时也可以大大提高App的质量和用户满意度。
​
欢迎加入51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。 

posted @ 2018-08-02 17:06 51testing 阅读(203) | 评论 (0) | 编辑 收藏
 
从功能测试转成自动化测试,软件测试工程师该如何成功转型?

我接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的同行。我从事软件自动化测试已经近十年,接触过底层服务端、API 、Web、APP、H5 等等,对自动化算是比较了解。在此分享一下个人经验。

如果对自动化完全不了解,每天在那嚷嚷要做自动化,都是空喊。

所以想做自动化,首先得了解一下自动化测试的一些常见问题。

1. 什么是自动化测试?

自动化测试,顾名思义,自动完成测试工作。

通过一些自动化测试工具或自己造轮子实现模拟之前人工点点/写写的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动化测试。

因为每一个自动化测试的case都是从手工测试做起的,所以自动化测试的基础是手工测试。

 2. 为什么要进行自动化测试

1)自动化测试节约成本(根据项目)

2)有些测试项目手工很难实现(手工成本较高)

3)项目质量流程需要

3、自动化测试的优势及劣势

优势:回归测试更方便可靠 ;可运行更多,更繁琐的测试,且快速高效;可执行一些手工测试执行相当困难或者做不到的测试,如大量的用户并发;更好的利用资源,具有一致性和可重复性的特点,自动化测试脚本完全可复用;提升了软件的可信度;多环境下测试等。

劣势:维护成本相对比较高

系统开发时间不一定能缩短

还是得依赖手工测试,很多问题无法发现

4、自动化测试分类

按测试目的分类大致可划分为:功能自动化测试,性能自动化测试    

按测试对象可以划分为:Web应用测试,APP测试,接口测试,单元测试等

功能自动化

测试目的是发现软件中实现功能是否符合用户需求规格,实践证明,往往我们实施UI自动化测试的目的不是去发现软件系统中的缺陷,更多的是为了验证系统是否可以正常运行。

除了可以基于UI进行自动化测试,我们还可以基于网络服务接口提供者进行测试,基于接口进行功能测试较为常见,也是非常有效的手段。

另外还可以基于系统基础代码进行测试,比如单元测试,集成测试阶段,这一阶段的测试也称白盒测试,我们可以直接对DAO,Service服务进行测试,这里常用的测试技术包括Junit, TestNG, Mock, Stub等。

性能自动化

性能自动化测试是通过测试工具模拟高并发负载进行压力测试,以发现软件系统在高负载情况下运行瓶颈,包括应用程序本身的性能瓶颈,网络瓶颈,服务器硬件资源瓶颈,数据存储服务器等,通常唯有借助自动化测试工具来完成,常见的性能测试工具包括,Loadrunner, Jmeter, Ngrinder, Gatling等,不管哪一款测试工具,基本有三大部分组成:测试脚本管理,测试场景配置,监控结果。

与功能自动化类似的是,性能测试工作对象也可以面向用户UI层,或者服务接口提供方,甚至可以直接面向底层基础业务逻辑层,绝大多数通过用户层进行性能测试模拟的是最接近真实用户场景的测试,也是性能测试必然实施的阶段。

5、自动化测试的流程

 

6、自动化测试常用工具

下面我简要的罗列常见的测试,以及适合其最佳的测试工具。

性能测试工具:Loadrunner,Jmeter,Ngrinder,Gatling,每款测试工具存在一定的差异及其局限性,可以参考相关文档详细了解。

功能测试工具: Selenium, QTP

APP自动化测试工具:Appium, UI Automator, MonkeyRunner, Android UI测试推荐使用UI Automator, 是Android提供的自动化测试框架,基本上支持所有的Android事件操作。IOS应用程序可以选择使用Appium。

接口自动化测试工具:Junit,TestNG, OKhttp, HttpClient,Spring Restful等,需要有一定的编码经验,当然也有现 成的工具,比如Postman,HttpRequester,SoapUI等。

单元测试工具:Junit, TestNG, EasyMock, Mockito, JMockit等

7、什么条件的人适合做自动化测试

1)拥有代码能力

掌握一门开发语言,java、Python、ruby、c#

2)熟悉被测系统

比如你是web测试,你就得懂js、css、html、xpath

你是移动端测试,你就得具备Android 开发基础和iOS开发基础,会debug app

你是 C/S测试你就要很熟悉TCP、IP协议

3)掌握一套自动化测试框架(工具)

比如selenium/appium;nunit/testng;robot framework/cucumber

4)善于学习,达到知其然知其所以然

IT行业变化太快,新兴的东西出现的频率快,只有不断地学习,才能与时俱进,不被淘汰。

总而言之

学习一门开发语言Java/Python,学习一个测试工具selenium/appium,掌握一个测试框架,平时多沉淀,然后抓住机遇,即可轻而易举的转型自动化测试。

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

 

posted @ 2018-08-01 17:28 51testing 阅读(157) | 评论 (0) | 编辑 收藏
 
如何设计高效合理的MySQl查询语句?23种常用类型汇总

MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。那什么是MySQL,你真的了解吗?

1、什么是数据库 ?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统。

主流的数据库有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,我主要讲述的是mysql。

2、数据库管理是干什么用的?

a. 将数据保存到文件或内存

b. 接收特定的命令,然后对文件进行相应的操作

3、MySQL常用查询语句

一、查询数值型数据

SELECT * FROM tb_name WHERE sum > 100;
查询谓词:>,=,<,<>,!=,!>,!<,=>,=<

二、查询字符串
SELECT * FROM tb_stu  WHERE sname  =  ‘小刘’
SELECT * FROM tb_stu  WHERE sname like ‘刘%’
SELECT * FROM tb_stu  WHERE sname like ‘%程序员’
SELECT * FROM tb_stu  WHERE sname like ‘%PHP%’

三、查询日期型数据
SELECT * FROM tb_stu WHERE date = ‘2011-04-08’
注:不同数据库对日期型数据存在差异: :
(1)MySQL:SELECT * from tb_name WHERE birthday = ‘2011-04-08’
(2)SQL Server:SELECT * from tb_name WHERE birthday = ‘2011-04-08’
(3)Access:SELECT * from tb_name WHERE birthday = #2011-04-08#

四、查询逻辑型数据
SELECT * FROM tb_name WHERE type = ‘T’
SELECT * FROM tb_name WHERE type = ‘F’
逻辑运算符:and or not

五、查询非空数据
SELECT * FROM tb_name WHERE address <>” order by addtime desc
注:<>相当于PHP中的!=

六、利用变量查询数值型数据
SELECT * FROM tb_name WHERE id = ‘$_POST[text]’
注:利用变量查询数据时,传入SQL的变量不必用引号括起来,因为PHP中的字符串与数值型数据进行连接时,程序会自动将数值型数据转变成字符串,然后与要连接的字符串进行连接

七、利用变量查询字符串数据
SELECT * FROM tb_name WHERE name LIKE ‘%$_POST[name]%’
完全匹配的方法”%%”表示可以出现在任何位置

八、查询指定时间段的数据
SELECT  要查找的字段 FROM 表名 WHERE 字段名 BETWEEN 初始值 AND 终止值
SELECT * FROM tb_stu WHERE age BETWEEN 0 AND 18

九、按月查询统计数据
SELECT * FROM tb_stu WHERE month(date) = ‘$_POST[date]’ ORDER BY date ;
注:SQL语言中提供了如下函数,利用这些函数可以很方便地实现按年、月、日进行查询
year(data):返回data表达式中的公元年分所对应的数值
month(data):返回data表达式中的月分所对应的数值
day(data):返回data表达式中的日期所对应的数值

十、查询前n条记录
SELECT * FROM tb_name LIMIT 0,$N;
limit语句与其他语句,如order by等语句联合使用,会使用SQL语句千变万化,使程序非常灵活

十一、查询后n条记录
SELECT * FROM tb_stu ORDER BY id ASC LIMIT $n

十二、查询从指定位置开始的n条记录
SELECT * FROM tb_stu ORDER BY id ASC LIMIT $_POST[begin],$n
注意:数据的id是从0开始的

十三、查询统计结果中的前n条记录
SELECT * ,(yw+sx+wy) AS total FROM tb_score ORDER BY (yw+sx+wy) DESC LIMIT 0,$num

十四、查询大于指定条件的记录
SELECT * FROM tb_stu WHERE age>$_POST[age] ORDER BY age;

十五、显示数据表中重复的记录和记录条数
SELECT  name,age,count(*) ,age FROM tb_stu WHERE age = ’19’ group by date

十六、查询结果不显示重复记录
SELECT DISTINCT 字段名 FROM 表名 WHERE 查询条件
注:SQL语句中的DISTINCT必须与WHERE子句联合使用,否则输出的信息不会有变化 ,且字段不能用*代替

十七、对数据进行降序/升序查询
SELECT 字段名 FROM tb_stu WHERE 条件 ORDER BY 字段 DESC 降序
SELECT 字段名 FROM tb_stu WHERE 条件 ORDER BY 字段 ASC  升序
注:对字段进行排序时若不指定排序方式,则默认为ASC升序

十八、对统计结果进行排序
函数SUM([ALL]字段名) 或 SUM([DISTINCT]字段名),可实现对字段的求和,函数中为ALL时为所有该字段所有记录求和,若为DISTINCT则为该字段所有不重复记录的字段求和
如:SELECT name,SUM(price) AS sumprice  FROM tb_price GROUP BY name

SELECT * FROM tb_name ORDER BY mount DESC,price ASC

十九、NOT与谓词进行组合条件的查询
(1)NOT BERWEEN … AND … 对介于起始值和终止值间的数据时行查询 可改成 <起始值 and="">终止值
(2)IS NOT NULL 对非空值进行查询
(3)IS NULL 对空值进行查询
(4)NOT IN 该式根据使用的关键字是包含在列表内还是排除在列表外,指定表达式的搜索,搜索表达式可以是常量或列名,而列名可以是一组常量,但更多情况下是子查询

二十、对数据进行多条件查询
SELECT 字段名 FROM tb_stu WHERE 条件 ORDER BY 字段1 ASC 字段2 DESC  …
注意:对查询信息进行多条件排序是为了共同限制记录的输出,一般情况下,由于不是单一条件限制,所以在输出效果上有一些差别。

二十一、单列数据分组统计
SELECT id,name,SUM(price) AS title,date FROM tb_price GROUP BY pid ORDER BY title DESC
注:当分组语句group by排序语句order by同时出现在SQL语句中时,要将分组语句书写在排序语句的前面,否则会出现错误

二十二、多列数据分组统计
多列数据分组统计与单列数据分组统计类似
SELECT *,SUM(字段1*字段2) AS (新字段1) FROM 表名 GROUP BY 字段 ORDER BY 新字段1 DESC
SELECT id,name,SUM(price*num) AS sumprice  FROM tb_price GROUP BY pid ORDER BY sumprice DESC
注:group by语句后面一般为不是聚合函数的数列,即不是要分组的列

二十三、多表分组统计
SELECT a.name,AVG(a.price),b.name,AVG(b.price) FROM tb_demo058 AS a,tb_demo058_1 AS b WHERE a.id=b.id GROUP BY b.type;

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

posted @ 2018-07-31 17:11 51testing 阅读(186) | 评论 (0) | 编辑 收藏
 
为什么初学者应该学习Python?7大主流编程语言对比!

最近不知道大家有没有看到这几则新闻:

1、Python将纳入浙江省高考!从 2018 年起浙江省信息技术教材编程语言将会更换为 Python。

2、Python纳入山东省的小学教材课程,小学生都开始接触 Python 语言了。

3、Python 将加入全国计算机等级考试!教育部考试中心决定自2018年起,在计算机二级考试加入了“Python语言程序设计”科目。

4、现在国外国内很多家长已经给孩子报名学习Python编程课程了。在美国,就连婴幼儿也有专门的编程童书。

5、最近很多人用Python玩微信【跳一跳】,虽然不怎么“人道”,但是不得不让人敬佩Python的强大。

随着Python越来越火,最近一年,似乎要进入全民Python编程的时代了。但有人会问了,一入代码深似海,那对于一个初学者来说究竟应该学习哪种语言?使用最广泛的 Java、全面集成 .Net 库的 C#、跨平台性非常好的 C/C++、灵活轻便的通用型脚本语言 Python、Web 前端开发主流的 JavaScript等,面对600 多种编程语言,如何选择最容易上手的那种呢?为何要选择Python呢?

下面,我们对比几大主流编程语言的代码量,以「Hello World」为例:

▌编程语言之首——Java

public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

▌嵌入式领域的王者——C

#include<stdio.h>
    int main(void) {
        printf("Hello,World!\n");
        return 0;
}

▌多范式编程语言——C++

#include <iostream>  
int main()  
{  
    std::cout << "Hello,World" << std::endl;  
    return 0;  
}  

▌全面集成 .Net 库——C#

using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

▌世界范围内网站运用率最高的编程语言——PHP

<?php
echo “Hello World”;
?>

▌Web 前端开发主流语言——JavaScript

<html>
<body>
<script type="text/javascript">
     document.write("Hello World!");
</script>
</body>
</html>

▌通用型脚本语言——Python

print("Hello World");

从以上代码中,我们可以清楚地发现Python 和 PHP 语法相对简单,对于同一个任务,C 语言要写 1000 行代码,Java 只需要写 100 行,而 Python 可能只要 20 行,综合看来,Python无疑是最耀眼的。

Python具备的5大特性:

非常棒的首次体验: 就像书的开始,首先一定要能够“沉迷”,学习新知识一定会碰到各种挫折,但是如果能够吸引学生的好奇心和热情,零基础的学员才能够有更好的兴趣在学习中;

Web 编程能力: 对于程序员的职业发展来说,Web 编程能力越来越重要,如果想要发展的更好,是要具备一些 Web 框架基础;

桌面编程能力: 尽管将来趋势将更多的转移到 Web 应用上,但没什么能比开发和运行一个本地程序来的直接;

有市场的职业技能: 即使是学术和业余编程已经非常出色,但是学生的职业技能在职业环境中也非常重要;

社区支持和轻松的语言环境: 这个部分对于新人来说,更是重要的一点,能够加速让他们融入到这个环境中。

也许有些人可能不同意这些作为入门语言的必要条件。但经过实践和经验,我发现没有任何一门语言能像 Python 一样做到以上五点。

天道酬勤。不论你是编程新手,前端开发人员,或是想做全栈开发工程师,准备进军 AI 领域的,又或是网络运维转型开发、传统 IT 转行互联网的......学习Python,都是你最好的选择。

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

 

posted @ 2018-07-30 17:18 51testing 阅读(195) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 20 21 22 23 24 25 26 27 28 Last