Python编程基础与HTTP接口测试(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-05 23:51:59

点击下载

作者:阿奎

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python编程基础与HTTP接口测试

Python编程基础与HTTP接口测试试读:

前言

每个人都应该花1年时间学习编程。

——史蒂夫·乔布斯

我一直以来有一个观点,对于希望从事自动化测试工作或者希望掌握自动化测试技能的人士,掌握一门计算机语言是绕不过去的一个坎。就是这个坎,让很多从事手工测试的工程师对于自动化测试工作望而却步,也让很多人不由自主地退而求其次,转向去学习一些自动化测试的工具,来回避语言学习的困难。

看到身边很多的测试工程师对待编程语言的学习畏之如虎,谈之无力,让我产生了“为希望转型成为自动化测试工程师的软件测试从业者提供一本靠谱的编程语言学习指导书”的想法。这也是促成这本书初稿形成的原始动力。

随着信息技术的发展,计算机办公技能成为一名现代白领工作者的必备技能,我们日常工作中有很多的时间都是在与计算机进行交互。通过对计算机语言的学习,可以为你打开一扇与计算机进行深层次互动交流的大门。同时,在编程语言的学习中,你会学到一种新的思考方式并找到另一种看待问题、解决问题的视角。

本书的内容包含两部分:Python编程基础和基于Python的HTTP接口测试。

在Python编程基础部分,主要关注Python语言的基础知识的学习和掌握,这一部分对于每一名希望快速掌握一门计算机语言的学习者都是适用的。

基于Python的HTTP接口测试部分,重点面向希望转型为自动化测试工程师的软件测试从业者,以HTTP接口测试为应用场景,来学习和掌握Python的相关知识点和使用技巧。

本书以闯关式学习方法为指导进行编写,让读者通过一个一个小的关卡的刻意练习,在不知不觉中掌握“Python 编程基础”和“HTTP 接口测试”的相关技能,完成从手工测试工程师到自动化测试工程师的转变。

所谓闯关式学习方法,通俗地讲,就是通过不断的刻意练习,打通一个一个的练习关卡来进行自我提升和学习的方法。闯关式学习方法首先要求有一名有经验的指导者,针对学习目标刻意设计的一个又一个的练习关卡,即挑战问题,读者通过一定的前期知识的学习和练习后,在给定的时间内对第一个关卡的问题发起挑战,即闯关。如果给定的时间内不能有效地完成挑战问题,就需要反复的刻意练习,直至轻松完成挑战问题为止,即闯关成功。此时,才可以进入下一个练习关卡。详细的关于如何使用本书进行闯关式学习的内容,请读者阅读本书的“如何阅读和使用本书”部分。

我一直认为,学习软件开发、测试技能,和学习骑自行车、游泳一样,是一项技能的修炼,而非仅仅是知识或者概念的了解和掌握。要习得一项技能需要刻意地练习。

编程作为一门技艺,是可以习得的,习得是有方法的!这本书为愿意学习的读者提供了习得编程技艺的方法,就是“闯关式学习”。

但是,“没有任何有效的学习和精进的过程是惬意的和不需要付出努力的。”

所以,这是一本针对Python编程基础和HTTP接口测试技能,进行刻意练习的学习指南,这不是一本可以靠在沙发上阅读的消遣书。“学习之路挖坑容易挖井难”,祝大家利用这本精心打造的“闯关之书”,挖出属于自己的“Python之井”。

阿奎(于洪奎)如何阅读和使用本书

相信很多读者都有过自学软件测试或者其他技能的经历,期间坚持与放弃的挣扎,学习方向的迷茫,学习资料的收集,学习内容的选择……甘苦自知。

作家格拉德威尔在《异类》一书中指出:“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1 万小时的锤炼是任何人从平凡变成超凡的必要条件。”他将此称为“一万小时定律”。要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。

我并不是想用这段引用来告诉大家,成为自动化测试工程师需要五年的时间,而是希望大家看到其中“锤炼”一词的深意——成就超凡技艺的过程,实际上是一个“锤炼”的过程,也就是“刻意练习”的过程。

既然叫做刻意练习,有别于随意的练习。随意的练习并不能带来有效的学习和精进,并且会浪费时间,打击练习者的信心。没有任何有效的学习和精进的过程是惬意的,不需要付出努力的,要做到刻意练习有如下四个要点:

● 有目的的练习。刻意练习一定是针对某一个既定的目的进行练习,即每一个练习都是有具体目标的。

● 精神高度集中的练习。刻意练习一定是需要练习者精神高度集中,全身心投入的,只有这样才能带来学习上的领悟和突破。

● 反复的练习。在以上两点的基础上,重复的练习是技艺提升不可缺少的一环,没有什么技巧性的技艺是一次就可以完全掌握和彻底领悟的,编程尤其如此。只有通过不断的重复的练习才能将编程中用到的一些基本的概念和模式,变成自己的肌肉记忆和大脑反射。

● 获得有效反馈的练习。反复练习中,还需要有效的反馈来确定练习是否取得了进展,这种反馈一方面可以促进练习者更好的坚持练习,另一方面也可以告诉练习者,练习到什么程度就够了。

以上也是闯关式学习方法的理论依据和本书设计编写的初衷。

本书采用“闯关式学习方法”编写。阅读的过程中,需要读者边读边练习,每一章包含多个小节,每个小节都是一个小的关卡。

再次重申:这是一本针对 Python 编程基础和接口测试技能进行刻意练习的学习指南,这不是一本可以靠在沙发上阅读的消遣书。

读者在使用这本书的时候,应该是在电脑旁边的,并且电脑是联网的,这样你才能通过刻意练习,成功挑战书中一个一个的小节关卡,体会成功闯关后的喜悦和掌握一个一个技能要点后发自内心的欢喜。

小节关卡

本书的每一个小节一般包含:学习目标、学习资源、知识准备、挑战问题、难点提示、知识总结、拓展问题七个段落。

学习目标:描述本小节的学习目标,即通过本小节的学习掌握的知识要点。

学习资源:当今社会已经是一个信息资源极其丰富的社会,我们不再缺乏信息,而是缺乏优质的,经过整理的高质量信息,本小节会提供一些与学习目标相关的高质量网络学习资源的链接,方便读者进行扩展阅读和深入学习。

知识准备:本小节主要就完成学习目标,需要学习和掌握的知识和概念进行阐释。本小节的阐释不求全面,主要以常用的知识和概念以及技能的阐释和演示为主。更全面详细的信息,读者可以通过学习资源小节中提供的链接进行深入的学习。

挑战问题:本小节要解决的问题。注意只有解决问题才算通过本小节的学习,如果上一个小节的问题没有解决,不建议继续学习,因为,后面小节的解题和闯关过程中一般会用到前面小节的知识点和技能。同时,也是最重要的,小节问题的解决过程中可以借助互联网或者其他资料,但是,编码过程中,必须保证完全自主完成,也就是,在开始解题时候,应该自己完全手工完成,不能直接拷贝粘贴,也不要对着屏幕或者书本看一个单词敲一个单词。软件自动化测试的学习从归类上属于技能类学习,而技能类学习的关键就是刻意练习。所以,闯过关卡不是目的,重要的是切实掌握闯过关卡用到的知识点和技能。

难点提示:在进行小节闯关的过程中可能会碰到一些陷阱或者难于解决的问题,会在这一部分给予一些提示。

知识总结:将本小节的知识点进行简单列举,需要读者根据知识点中的提示,翻看提供学习材料,对知识点进行深入的学习和必要的记忆、理解。

拓展问题:有的关卡的题目会有一些变化的问法或者多个解答方法,会在这一部分给出说明和提示。

使用指南(1)学习顺序:建议首先通读一遍本小节的所有内容,再通过翻阅提供的学习资料将知识点中提到的内容记忆和理解,最后再进行本小节问题的解决,即实施闯关,闯关成功后,再将知识总结小节的内容做一个回顾,然后再开始下一个小节的学习。

何为“闯关成功”?即在给定时间内独立完成挑战题目。在完成挑战题目的基础上,有两个要求:在给定时间内独立地完成。

如果完成挑战题目的时间过长或者过程中有一边看资料一边写代码的情况,这都不能算作闯关成功。此时,建议读者删除代码重新进行闯关。(2)刻意练习:

● 不要拷贝粘贴。

● 不照抄照搬。

● 十分钟原则。

● 举一反三,主动拓展。

备注:“十分钟原则”:每一个小节的练习问题需要在十分钟内解决,一般前面几个小节,读者都不会有问题,但在后面的时候,便很难在这个时间里完成。而所谓的“十分钟原则”就是,如果你没有在十分钟的时间里完成小节的练习,就将代码删除,重新写一遍,是在编程学习中对“刻意练习”的贯彻。“举一反三,主动拓展”又称为“不以闯关为目的的闯关”。有的同学练习过程中对于闯关很有兴趣,又有一点编程基础,一上来就一口气闯到了第五关,甚至第九关,这样的闯关是没有意义的。这些关卡的设计过程中,笔者针对每一个关卡都做了两次以上的练习,就是至少删除过一次代码。目的就是更好地体会学习目标和知识点,更好地形成所谓“肌肉记忆(muscle memory)”。经过思考,笔者还在多个章节设计了拓展环节,就是为了更好地掌握相关知识和技能。“不以闯关为目的的闯关”,才是这些关卡设计的本意。(3)找到组织:

学习过程中会遇到很多的问题,如果有老师或者同行者,一起互相激励,遇到问题也可以互相请教,在交流中收获更多。读者可以关注本书的公众号:IT 匠艺教研室。公众号中有微信交流群,可以扫描加入,随时进行交流和学习。

为方便读者自学,笔者将本书各个小节的练习代码上传到了GitHub,读者可以自行下载参考。

地址为:https://github.com/akuing/python-and-http-interface-test。点击右侧的绿色按钮“clone or download”,选择Download ZIP 即可以下载整个参考代码和示例的压缩包。

本书编写的目的是通过练习,让读者将技能真正掌握到自己手中。所以,不要为了闯关而直接下载运行参考示例代码,这对你的学习不会有任何实际的帮助,只会让你浪费掉一个作者苦心设计的用于检验学习进展的关卡。

所以,建议仅仅在自己已经完成了关卡的要求之后,再参考这些示例代码,与其互相取长补短,巩固所学。

再次强调,这不是一本只是用来“看”的书,这是一本练习的路线图,如果学习过程中有任何困难,可以发邮件或者加入公众号:IT匠艺教研室,进入公众号中的学习交流群询问,我非常愿意与学习者交流学习的问题,以帮助更多的读者闯过学习第一门语言的大山。

学习纪律

实施闯关的过程要遵守如下学习纪律:

● 按部就班不跳关。● 自主学习不拷贝。

● 刻意练习不照抄。● 新词新知要记牢。

以上学习纪律,前三条就不多说了,对于“新词新知要记牢”进行一下特别的阐述。学习Python的过程中会出现很多新的知识点和新的词汇,其中不少是英文的。这对于英文基础不好的学习者会是一个很大的障碍。作者在十几年的工作中也曾看到很多学习者都是因为英语这一关没有过,导致编程语言的学习进步缓慢。

翻开这本书时,每一位读者的英语水平已经是一个客观事实,并不会因为读到了本书而有什么改变,并且,即使学习完这本书,学习者的英语水平仍然不会有什么改变。作者这里希望针对编程语言的学习和英语水平之间的关系做一个阐述。

同样的学习条件,英语基础好的,学习编程语言的时候会更加容易一些。

新知识一般有两种方式被大脑接纳。第一种是挂接或者建立在已有的知识体系上;第二种就是在大脑里重新打桩,建立记忆根。这两种模式下,对于同样的知识点的掌握,所要付出的努力是完全不同的,而这种不同主要来自不同个体大脑中已有的知识体系的差异。

比如,对于已经有一定英语基础的同学,在进行 MySQL 的学习时就会很容易记住 create、delete、update、select 这些 SQL 的关键字以及他们的用途;而对于一个英语基础薄弱的同学,如果他之前并不认识这四个单词,甚至只认识26个字母(不认识26个字母的读者,本文帮不到你太多,建议不要再浪费自己的时间看下去了,这里没有任何偏见和轻视,仅仅是真诚的提醒!),要记住这四个关键字,将不是一件容易的事情。为什么会这样,其实很简单。对于熟悉这四个单词的人,由于已经拥有了对单词自身含义的理解,他看到这四个单词的时候看到的是四个整体,他所要记忆的只是四个元素,至于每一个元素的拼写、意义区分已经是他已有的知识体系里的内容;而对于不认识这四个单词的人,他要记忆的是24个元素,并且每六个元素被作为了一组,拥有一个固定的含义和拼写顺序。虽然从知识点来说两个人都是要掌握 MySQL 的四个SQL关键字,知识点是相同的,但是对于两个不同的个体,这个知识点的信息量是完全不同的。

这就是为什么“同样的学习条件,英语基础好的,学习编程语言的时候会更加容易一些。”的原因。

英语基础差的学习者,也是可以学会编程语言的,只是需要付出更多的努力,并掌握一定的方法。

对于英语基础薄弱的学习者,我有如下两点建议:(1)从意识上认识清楚,自己就是要比英语好的同学付出更多的努力才能学好编程语言。因为,这个已经是既定的客观事实,并不会因为我们无视它,不去面对它而消失。并且,现实中很多英语基础并不好的同学的确通过自己的努力学会了一门编程语言,我们也没有必要非要要求自己一定要学好英语之后,才去学习编程。(2)从方法上区别对待,对于编程语言学习过程中遇到的自己不认识的英语单词,按照英语的学习方法进行学习和记忆。具体来说,对于英语基础薄弱的学习者,我建议准备一个英语单词本,遇到自己不认识的英语单词,查字典并进行整理、记忆和默写。

总之,编程是一门技艺,不同的学习者会有不同的学习道路,而“刻意练习”是掌握这门技艺的不二法门。我真心的希望可以通过这本小书,让更多人,特别是那些希望转型成为自动化测试工程师的软件测试从业者,克服对编程语言的恐惧,真正的掌握这门即有用又好用的编程语言。

在线学习与疑难解答

本书特别为广大读者精心准备了专有的在线服务与交流平台。用微信扫描右侧二维码,关注“悦读力”,即可加入本书读者圈,获得关于Python编程及自动化测试相关的更多学习资源,并有机会向阿奎老师提问、得到在线学习指导。读者圈感谢

写书之前,我真的没有想到写一本书要付出这么多的精力。真的要特别的感谢在这本书的写作过程中,帮助和支持我的人。

有太多的人需要感谢,那么就让我按照时间的先后一一谢过吧!

本书的编写完全是出于对我日常工作中的所听所见的思考,我的身边有很多非常喜欢学习新技术的同事,他们有的从事开发、有的从事测试,有的甚至是管理人员——我为什么要用“甚至”——?在这本书还是一个电子的试读版本的时候,我就组织了一个利用业余时间的学习小组(测试融合训练营),主要是希望看看这样一本书是否真的能够帮到大家,没想到一经提议,大家就非常积极地参与,非常感谢我的同事白雪、史丽珍、关晓康、毛雪涛、张培、刘会琴、于国双(ygs)、农倩倩、胡江海,他们是电子版初稿的第一批阅读用户,在这一过程中大家给了很多有益的反馈。

同步的还有一个来自互联网的学习小组(用Python做HTTP接口测试学习班),主要是觉得同事们给建议的时候都会比较“委婉”,希望有一个来自互联网的测试和反馈。感谢杨艳艳、高园园、CJoy、王芳、汤濮瑜、海底小鱼的热情参与和学习过程中的积极反馈。特别是高园园在参与之后,写了一篇非常值得称赞的学习感想。这篇文章,我在征得她本人同意之后,附在了本书的附录中供大家参考。

在电子版的书经过验证之后,我就有了将其变成纸质书的想法,机缘巧合的是,在参加一次敏捷技术交流的时候,遇到了张瑞喜老师,在张老师的鼓励下,我才真正开始了这本书的编写过程,编写过程中,非常感谢张老师对一个初次写书的作者的耐心和辅导,特别是这本书的题目《Python编程基础与HTTP接口测试》就是张老师取的,本书的电子版在“百度阅读”上的名字叫做《用Python做HTTP接口测试》。

这本书的第一个审校的人是我的太太悠悠女士,感谢她指出我书中原来的28处没有原因的“所以”。其实,我知道更应该感谢的,是她背后默默的支持,长时间的写作,占用了很多本应该陪她的时间。第一部分 初识与初心第一章 Python正流行1.1 语言排行榜与技术雷达

Python 语言的流行是有目共睹的,从语言排行榜和技术雷达中就可以得到实际的认证。

TIOBE编程语言社区排行榜

TIOBE公司成立于 2000年 10月 1日,由瑞士的 Synspace公司和一些独立的投资人创建。TIOBE是″The Importance Of Being Earnest″的缩写,该公司主要关注于软件质量的评估。TIOBE 程序设计语言指数是由该公司推出并进行维护的,这个指数将程序设计语言以排名列表的形式提供出来,并且每个月更新一次,用来表示程序设计语言的流行度。

——互动百科,http://www.baike.com/wiki/开发语言排名

TIOBE 编程语言社区排行榜是编程语言流行趋势的一个重要指标,每月都会更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量,是一个反映编程语言热门程度的编程语言流行趋势指标。如图 1.1 所示。图1.1 2017年3月的TIOBE排行榜注释:Mar 2017:2017 年 3 月,Mar 2016:2016 年 3 月,Change:变化,Programming Language:编程语言,Ratings:占比,Change:变化

通过图 1.1(2017 年 3 月)的 TIOBE 排行榜我们可以看到,Python 在2016 年 3 月至 2017 年 3 月间一直处在流行度排行榜第五的位置,前面只有Java、C、C++三个老牌语言和微软官方推出的C#语言。

而在 2017年 6月的 TIOBE排行榜中,Python 已经超过 C#上升到第四位。如图1.2所示。(以上数据来自TIOBE官方网站:https://tiobe.com/tiobe-index/)图1.2 2017年6月的TIOBE排行榜

注释:Jun 2017:2017 年 6 月,Jun 2016:2016 年 6 月,Change:变化,Programming Language:编程语言,Ratings:占比,Change:变化

编程语言受欢迎程度排行榜

PYPL是 PopularitY of Programming Language的缩写,即编程语言受欢迎程度。编程语言受欢迎程度排行榜 PYPL 是通过分析 Google 上搜索语言教程(tutorials)的频率创建的,基于的分析假设是:语言的教程被搜索的次数越多,则语言越受欢迎。分析的原始数据来自 Google 趋势(Google Trends)。如图1.3所示。“如果您相信集体行为的智慧,编程语言受欢迎程度排行榜可以帮助您决定要学习的语言,或者在新的软件项目中使用哪种语言。”(以上内容来自编程语言受欢迎程度网站:http://pypl.github.io/PYPL.html)图1.3 2017年6月的PYPL排行榜注释:Rank:排名,Change:变化,Language:语言,Share:占比,Trend:趋势

通过图 1.3中 2017年 6月的编程语言受欢迎程度排行榜我们可以看到,Python语言排第二位,仅排在Java语言之后。

技术雷达

技术雷达是 ThoughtWorks 公司以雷达图的独特形式记录其技术顾问委员会关于对行业有重大影响的技术趋势的讨论结果。雷达图分为四个象限和四个环,四个象限分别是:技术、平台、工具以及语言和框架;四个环分别是:采用、试验、评估以及暂缓。

ThoughtWorks 公司在每年都会出品两期技术雷达,这是一份关于技术趋势的报告,相比一些我们能在市面上见到的其他各种技术行情和预测报告,它更加具体,更具可操作性,因为它不仅涉及到新技术大趋势,比如云平台和大数据,更有细致到类库和工具的推介和评论,从而更容易落地。

具体信息可以到http://insights.thoughtworkers.org/tech-radar/查看。

在其2017年3月的技术雷达《Technology Rada Vol.16》中专门对Python的流行进行了说明。“作为一门易用的通用编程语言,Python 在数学和科学编程领域具有坚实的基础。这使得它一直以来都为草根阶层的学术研究社区所采用。”

并且,对于 Python 社区中一直以来关于学习 Python2 还是 Python3 的争论,在本期的技术雷达中,也给出了基于实际使用经验的观点。“根据我们在机器学习和 Web 应用开发这样的领域中使用 Python3 的经验显示,语言本身以及大多数支持库都已经成熟到可以采用的程度。”“如果你在使用Python做开发,我们强烈鼓励你使用Python3。”

在学习 Python2还是 Python3的困惑方面,作者一直是 Python3的坚定拥护者。相对于 Python2,Python3 更加规范,更易于学习和使用,如果实际使用过程中遇到了需要依赖 Python2的第三方库情况(现在很多第三方库都支持Python3了),完全可以自行进行一些修复和升级的工作。

本书后面会用到一个来自 Github 的定制博客系统,该系统就是原作者基于Python2开发的,我fork之后,进行了基于Python3的修复和升级,改动代码量实际上很少。在修复和升级之后,我向原作者提交了pull requests,很快原作者就接受了。

所以,我想告诉大家的是:

Python的流行是有目共睹的;

选择Python作为一门新的学习语言进行学习,绝对是明智的选择;

要学习Python,请选择Python3。1.2 Python之禅

在交互式解释器中输入 import this 就会显示 Tim Peters 的 The Zen of Python,即Python之禅。

Python 之禅,体现了 Python 这门语言的设计哲学,其中的很多观点对于日常的编程也是很有指导意义的。

The Zen of Python,by Tim Peters

Python之禅,蒂姆·彼得斯

Beautiful is better than ugly.

优美胜过丑陋。

Explicit is better than implicit.

显示胜过隐式。

Simple is better than complex.

简单胜过复杂。

Complex is better than complicated.

复杂胜过繁复。

Flat is better than nested.

串行胜过嵌套。

Sparse is better than dense.

稀疏胜过稠密。

Readability counts.

可读性很重要。

Special cases aren′t special enough to break the rules.Although practicality beats purity.

虽然理想很丰满,现实很骨感,但是所谓特例并不足以打破上面的这些规则。

Errors should never pass silently.Unless explicitly silenced.

所有错误都不应该被直接忽略,除非能够被精确的捕获之后。(其中一个典型的例子就是,不建议用Exception:pass来直接忽略所有异常。)

In the face of ambiguity,refuse the temptation to guess.There should be one--and preferably only one--obvious way to do it.Although that way may not be obvious at first unless you′re Dutch.

当面对不明确的情况时,要拒绝去猜测的诱惑。应该有一种,最好是唯一一种,显而易见的解决方案。尽管起初,那种解决方案可能并不是那么显而易见,因为你不是 Python 之父(这里的 Dutch 是指 Python 之父 Guido Van Rossum,他是荷兰人。)

Now is better than never.Although never is often better than right now.

现在行动胜过永不开始。尽管,永不开始经常好过冲动的开始。

If the implementation is hard to explain,it′s a bad idea.If the implementation is easy to explain,it may be a good idea.

如果你的实现难于向别人解释,这往往不是个好主意。如果你的实现很容易向别人解释,这可能是个好主意。

Namespaces are one honking great idea--let′s do more of those!

命名空间是一个令人激动的伟大想法,让我们将它发扬光大。

以上 Python 之禅的翻译参考了网络上的翻译资料,有一定修改,具体链接参见附录参考资料。1.3 无所不能的Python

Python 语言的流行得益于其应用的广泛性。作为一门在各大语言排行榜中稳居前五的语言,Python 在当前主要的计算机应用相关领域都有广泛的应用。

在系统管理方面,有Fabric,Ansible,Saltstack等流行的配置管理工具;在系统开发工具方面有大名鼎鼎的版本管理工具 Mercurial;在 Web开发方面有 Django,Flask 等 Web 框架,著名的 Youtube、Dropbox,以及国内的Douban都是基于Python构建的。

在最近大热的人工智能、大数据、云计算方面,Python 更是应用广泛,代表性的有深度学习框架 TensorFlow*,数据处理方面的 Pandas,特别是已经基本上成为私有云搭建不二选择的 OpenStack,这些框架和软件应用都是使用Python语言开发的。

在科学计算领域,一直以来都是 Matlab、Pascal 和 Fortran 等语言的天下,现在,Python 语言在科学计算领域的应用也非常广泛,用于数学计算的基础库SciPy、NumPy,以及机器学习方面的Scikit-learn都是很好的代表。

Python在影视制作方面也有广泛的应用,最著名的 3D内容创建应用程序Maya,就支持通过Python样式的脚本进行动画编程。

在软件测试领域,著名的功能自动化测试框架 RobotFramework 也是由Nokia Siemens Networks的开发者用Python编写的。读者圈第二章 接口测试的崛起2.1 接口测试简介

在测试领域,一直存在很多测试的概念,如单元测试、集成测试、功能测试、性能测试、安全测试,等等,接口测试就是这众多的测试概念中比较重要的一个。

这里首先要介绍一下接口的概念。

接口,两个不同系统(或子程序)交接并通过它彼此作用的部分。

——《新华字典》

在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。而接口测试,英文为 Interface Testing,是针对系统间或者系统的组件间的接口的一种测试,意在测试特定接口在给定输入下的行为与预期行为之间的符合性。

要对接口进行测试,首先要了解接口的协议和接口的定义。

接口协议(Interface protocol)指的是需要通过接口进行信息交换的通信双方之间需要遵从的通信方式和要求。

协议是个很复杂的概念,这里就不展开了,随着互联网的发展,因系统之间、系统的组件之间集成的需要,出现了很多类型的接口通信协议。其中最常用的是HTTP协议,因此基于HTTP协议的接口测试也逐渐成为接口测试的主要应用场景。

HTTP(HyperText Transfer Protocol),通常被翻译成超文本传输协议,HTTP 本身已经包含了协议(Protocol)的意思,只是在中文里大家习惯上会将HTTP所代表的协议也称为HTTP协议。关于HTTP协议的详细内容,在本书第三部分的第七章会有详细的阐述。

接口定义是对接口的功能,调用的前提条件,调用的方法,以及接口返回内容的描述,是接口测试案例编写的基础。

本书针对HTTP协议接口的定义给出了接口描述的“八个问题”,称之为“接口八问”。

这八个问题分别是:

● 接口的请求地址是什么?

● 接口的功能描述是什么?

● 请求接口是GET还是POST?

● 接口需要在登录情况下才有用吗?

● 接口有上送数据吗?上送的数据是什么?

● 接口返回的状态码是多少?

● 接口返回报文体的格式和编码是什么?

● 接口返回的内容是什么?

针对一个给定的HTTP接口,读者要回答以上的八个问题并非易事,需要具备一定的技能。同样,在此基础上,能够利用 Python 完成针对这个给定的HTTP接口的自动化测试案例的编写,就更需要掌握包括 Python 语言、HTTP协议以及 Requests 库等一系列知识和技能。通过对本书后续章节的学习,读者会一一掌握上述的知识和技能。2.2 Ajax接口与Web动静分离

当前,越来越多的应用产品都是采用B/S结构设计的。所谓B/S结构,简单来说,就是每个使用者都通过浏览器(如:Chrome、Firefox、Safari 和 IE等)来访问和使用应用产品提供的服务,不需要用户安装单独的客户端。与B/S 相对应的是 C/S 结构,C/S 结构要求应用产品有单独的客户端供用户使用,比如 PC机上使用的 QQ就是一个典型的 C/S结构的应用产品,每个用户都要安装QQ客户端,然后,才能使用QQ后台服务提供的通信和交互功能。

B/S结构的应用架构经历了长时间的发展,从最开始的CGI后台编码方式,到后来的 ASP、JSP 等混合编码方式,以及当前流行的动静分离 Web 架构,B/S结构的应用产品架构随着互联网应用的发展也在逐步的发展和演变。

当前大多数新建的B/S结构的应用产品,如产品和服务类网站等,都会采用动静分离的 Web 架构,有的也叫前后台分离。所谓动静分离,是指动态内容的实现逻辑和静态内容的展示逻辑的分离。具体来说,就是实现前端界面展示的 HTML、CSS 和 JavaScript 代码与实现后台业务逻辑的后台代码(如,Java等)的分离和独立部署。

要实施一个动静分离的 Web 架构产品,要涉及到前后台两部分独立部署的代码在运行过程中的交互,当前用的比较多的前后台交互方式是采用 Ajax接口方式。

Ajax是 Asynchronous JavaScript and XML(异步的 JavaScript和 XML)的简称,简单来说,Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,通过Ajax可以创造出动态性极强的web界面。

Ajax是多种技术的联合使用,其中主要包括两种技术:(1) 通过浏览器中的XMLHttpRequest对象,驱动浏览器和Web后台服务器实现异步的数据交换。(2) 通过 JavaScript 的 DOM 操作功能,实现浏览器中已经加载的网页的动态更新,而不需要重新加载整个页面。

我们通常说的 Ajax 接口一般指的是通过 XMLHttpRequest 对象实现的驱动浏览器和 Web 后台服务器实现异步的数据交换接口,而该接口实际上就是一个普通的 HTTP协议接口,所以,通过 XMLHttpRequest对象发送的 HTTP请求,与通过浏览器地址输入一个 URL地址后,发送到 Web服务端的 HTTP请求,并没有什么本质的区别。2.3 Restful接口

REST 是一种互联网软件架构原则,即 Representational State Transfer 的缩写,由 Roy Thomas Fielding 在其 2000 年的一篇论文(Architectural Styles and the Design of Network-based Software Architectures)中提出。

The Representational State Transfer (REST) style is an abstraction of the architectural elements within a distributed hypermedia system.REST ignores the details of component implementation and protocol syntax in order to focus on the roles of components,the constraints upon their interaction with other components,and their interpretation of significant data elements.It encompasses the fundamental constraints upon components,connectors,and data that define the basis of the Web architecture,and thus the essence of its behavior as a network-based application.

表征状态转移(REST)风格是分布式超媒体系统中的架构元素的抽象。REST 忽略了组件实现和协议语法的细节,以便聚焦于组件的角色,组件间交互的约束以及对重要数据元素的解释。组件、连接器和数据是定义 Web 架构的基础,REST 涵盖了对这三要素的基本限制,从而,也涵盖了三要素作为基于网络的应用程序的行为本质。

以上内容引用、翻译自论文“5.2 REST Architectural Elements”小节,地址为:https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。

通俗地讲,REST 风格的架构就是一种将要操作的业务数据作为资源,分配一个固定的 URL 地址,然后,通过 HTTP 的四个请求方式:POST、DELETE、PUT、GET,分别对应业务数据的增、删、改、查四种操作。比如,我们有一个客户信息,给定一个 URL 为 http://www.example.com/customer,那么,可以通过对这个 URL 分别发送四个请求方式对应四个针对某一条业务数据的操作:

● POST请求/customer创建一个新的客户。

● DELETE请求/customer/111删除id为111的客户。

● PUT请求/customer/111更新id为111的客户的信息。

● GET请求/customer/111查询id为111的客户的信息。

虽然从原理上来说,REST 架构风格是无关乎通信协议的,但是在实际使用过程中,绝大部分 REST 架构组件之间的通信接口,也就是所谓的 Restful接口,都是采用的 HTTP 作为其通信接口协议的。所以,一个 Restful 接口的请求,实际上很多情况下与一个普通的HTTP请求并无本质的区别。

通过对Ajax和Restful的简单了解,我们可以看到,随着互联网的发展,前后台部件之间以及网络应用组件之间的新的结构风格和通信机制层出不穷,而HTTP协议在这些新的架构风格和通信机制中扮演了非常重要的基础通信协议的角色。

对于一名测试人员来说,掌握接口测试,掌握 HTTP 协议,进而掌握HTTP协议下的接口测试已经变得日益重要起来。读者圈第三章 测试工程师的自动化测试转型3.1 “点点点”测试工程师的困惑

很多从事手工测试的软件测试工程师都有一个困惑,到底应不应该学习自动化测试,手工测试会不会被淘汰?

针对这个问题,我在一个论坛上曾经有过一个非常简短的问答!

问题:手工测试真的要被淘汰了吗?

回答:不会,淘汰的不是方法,是人。仅仅会手工测试的人会比较危险。

当前有一种论调,即所有的手工测试都应该被自动化所取代,手工测试俨然成了落后的代名词。这是一种非常极端的认知。手工测试作为一种测试方法,是具有其特殊的优势应用场景的,并不是所有的测试都可以被自动化,也并不是所有的测试自动化后都会带来效益和效率的提升。

作为软件开发和交付的企业来说,进行自动化测试方面的建设和提升,最看重的是产生的效果,也就是在自动化测试上的投入要能够产出更大的收益。一味地将所有的手工测试都变成自动化测试,显然是盲目的。

作为一名软件测试工程师,在思考自己职业发展的时候,关注的不应该是方法,而应该是人。软件测试工程师作为产品交付团队的一员,其重要的职责是与团队一起高效地保证产品的交付质量。当前,自动化测试技术爆发式的流行是毋庸置疑的,其深层次的原因在于,自动化测试的确可以为开发团队的产品质量提升带来切实的帮助。那么,作为软件测试工程师,作为产品交付团队的一员,为了更大地发挥自身的价值,掌握自动化测试的相关技能,应该成为其提升自身职业素养和追求职业发展的必然选择。

综上,我要强调的是,作为一名软件测试工程师,如果希望在软件测试领域有所发展,不必纠结于手工测试会不会被淘汰,应该毫不犹豫地去学习自动化测试的相关技能,提升自身的职业素养。3.2 自动化测试到底要学什么

很多从事了很长一段时间手工测试的从业者提起要学习自动化测试都感觉比较茫然,感觉有太多的知识、工具和技能要学习,的确要完全掌握自动化测试技能有很多的内容要学习,不过对于初学者来说,最基本和基础的内容逃不出下面的四加二:

● “四”是:计算机基础、计算机网络、一个操作系统(Linux)、一个数据库(MySQL)。

● “二”是:英语基础和一门编程语言(Python)。

计算机基础

计算机基础是一名软件测试工程师的基本功,其中包含了对计算机的最基本的认识和理解。这方面并不需要太多的描述,如果读者希望比较系统地学习计算机基础知识,或者检验一下自己是否真正掌握了计算机基础的相关内容,建议读者去找一份《一级计算机基础及MS Office应用考试》的真题,自己限定时间做一下,基本上就能知道自己的水平了。

计算机网络

计算机网络方面的知识非常繁杂,并非必须掌握所有的内容。但是,对于其中的网络基本知识如 IP、端口、域名、网络协议、网关、代理、局域网和广域网等基本概念还是需要理解的,要达到能够区分清楚这些基本概念,并用自己的话表达出这些基本概念的含义,在实际上网的过程中找到对应的实际场景。

操作系统——Linux

软件测试需要熟悉一个操作系统,为什么推荐 Linux,是因为现在很多互联网公司都是使用 Linux部署产品。测试工程师会一点 Linux就可以自己查看日志、甚至自己部署,绝对是大大的加分项。对 Linux的学习只要熟悉 Linux系统 Shell 的基本操作即可,比如创建、拷贝、删除文件和目录、查看文本文件、运行程序等。

在此,我推荐一个资料叫做《Linux 一页通》,读者可以通过微信,搜索并关注公众号:IT 匠艺教研室,回复“一页通”,你就会得到一个高清版的Linux 命令脑图,将上面的命令一一了解并练习一下,基本上你的 Linux 就掌握的差不多了。

数据库——MySQL

软件测试工程师要熟悉一个数据库,建议学习一下 MySQL。计算机一级里面会让用 Access,这个用于入门可以,但是作为测试工程师,熟悉这个目前在互联网公司中普遍采用的开源数据库,对你后续的测试工作将大有裨益。

MySQL 数据库包含的内容也很多,作为测试工程师只要能够通过终端进行表的增、删、改、查就足够了,有余力可以再看看建库建表,至于安装、权限管理、备份运维等等,测试工程师一般用不上。

对于知识点的学习,我们应该有一个开放好学的心态,如果工作中觉得自己掌握某一项技能对于自己和团队的工作会有帮助,就应该尝试去学习。艺不压身的古语,对于所有从事技术工作的人士是通用的。

编程语言——Python

虽然业界有 LAMP的说法,这里的 L是指 Linux,A是指 Apache,M是指 MySQL,这几个前面都提到了,P则指的是 PHP语言,我这里还是要推荐Python。Python 和 PHP 一样是一门脚本语言,但是,Python 对测试工程师来说更加实用,很多测试框架都是用 Python 编写的,在实际工作中也更有可能用到。

英语基础

无需质疑,英语是世界上最广泛使用的语言之一,几乎所有软件开发语言都以英文单词为载体。那么作为软件测试人员,到底需不需要掌握英语呢?答案是肯定的。任何时候都不能放弃学习英语,甚至应该花更多的时间和精力去学好英语,以便在IT行业有更好发展前景。

掌握英语,你可以翻阅 IT 领域内先进的原文文献,获取更多的知识、经验。本书中引用了一些英文资料,我都将原文保留了下来,英文的下面是我翻译的中文译文。希望读者在阅读的过程中能够互相参照,在 Python 编程基础和HTTP接口测试技能提升的同时,也在英语学习上有所收益。3.3 摆脱“点点点”从哪里开始

上一小节说的“四加二”是测试工程师的基本功,作为一名“点点点”工程师,希望进行自动化测试的学习应该从哪里开始呢?

2017 年初,针对整理的十几项自动化测试需要的技能,我做了一个调查问卷如下表所示:

请参与调查的测试工程师回答如下问题:“您认为从手工测试到自动化测试最迫切需要学习的是以下哪三项?”

得到的结果如下表所示。

从这个调查结果可以看出,Python、自动化测试理论、网络协议获得的投票占比合计超过 49%。针对这个结果我又进行了一些调研后认为,学习和掌握用Python进行HTTP接口自动化测试,可以作为从手工测试工程师到自动化测试工程师转型的切入点。

以“学习和掌握用 Python 进行 HTTP 接口自动化测试”作为转型切入点,有如下的优点:(1) 可以掌握 Python 编程语言,为后续从事更高级的测试开发方面的工作打下坚实的基础。(2) 可以了解 HTTP协议,HTTP协议的流行和被广泛应用,已经不需要再论证。(3) 为日后学习自动化测试框架打下坚实的基础。掌握直接使用Python编程语言进行自动化测试,对于今后使用其他自动化测试框架时,深入理解自动化测试框架的运行机制,快速掌握自动化测试框架的使用会有很大的帮助。读者圈

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载