这里整理了一份基于Python语言的测试开发完整学习路线,对软件测试感兴趣的朋友可根据这份大纲来学习:
第一阶段:专业基础课程
阶段目标:
1熟练掌握IT核心技术:编程,数据库, *** 作系统,版本控制
2能够熟练运用所学技术搭建各类服务器环境
3深入理解软件研发过程各种疑难杂症及处理手段
4掌握Python编程技术并熟练运用Python进行程序设计
知识点:
1、Web页面元素,布局,CSS样式,盒模型,JavaScript程序设计,函数,基础算法,正则表达式。
2、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,约束,视图,存储过程,函数,触发器,事务,游标,建模工具深入理解数据库管理系统通用知识及MySQL数据库的使用与管理。为软件测试和测试开发打下基础。
3、Linux安装配置,文件目录 *** 作,VI命令,管理,用户与权限,环境部署,Shell编程Linux作为一个主流的服务器 *** 作系统,是每一个测试开发工程师必须掌握的重点技术,并且能够熟练运用。
4、Python编程基础,语法规则,函数,数据类型,PDBC,培养扎实的Python编程基本功,同时对Python核心对象编程有熟练的运用。
5、Python面向对象,异常处理,文件IO,多线程,网络编程,PyQT界面开发,深入理解面向对象编程,异常处理机制,多线程原理,网络协议知识,并熟练运用于项目中。
第二阶段:专业核心课程
阶段目标:
1熟练应用所学知识完成一个标准的软件测试项目
2熟练运用Python完成GUI测试,接口测试和性能测试开发
3对测试开发技术体系和实现原理有深入的理解
4灵活运用测试开发技术解决项目中的各种问题
知识点:
1、软件工程,软件质量,系统测试流程,方法,专业术语,测试用例设计,禅道管理工具,测试报告,缺陷管理理解软件工程的各类实际问题,理解系统测试的理论、方法与过程,熟练运用测试用例设计方法高效设计测试用例。
2、测试需求分析,测试方案设计,测试用例设计,测试项目实施,缺陷报告与测试报告,深入理解系统测试各个过程和关键环节,熟练完成系统测试项目。
3、SikuliX框架,框架,SeleniumWebDriver框架,基础框架,Android应用,Monkey测试,Appium移动端测试框架,移动端测试框架综合运用各类应用 *** 作平台,完成各种自动化测试框架的学习和应用,深入理解GUI自动化测试技术及相应框架的测试开发。
4、Python单元测试框架,网络通信协议,>
5、性能测试原理,指标体系,场景设计,实施过程,JMeter工具应用,BeanShell脚本开发,PythonLocust性能测试框架深入理解性能测试技术体系和方法论,熟练运用JMeter性能测试工具和Locust性能测试框架实施对任意系统的性能测试。
第三阶段:综合实战项目
阶段目标:
1将软件测试和测试开发技术灵活运用于项目中
2具备较强的测试开发能力,独立完成测试开发项目
3综合运用软件测试技术,满足企业中高级人才需求
4对所学技术有深入的理解并具备独立解决问题的能力
知识点:
1、测试需求分析,同行评审,测试计划,测试方案,测试用例,配置管理,持续集成。通过对大型企业级应用系统的测试项目实战,强化理解系统测试项目的实施过程与技术细节。
2、接口测试设计与实施,回归测试,冒烟测试,安全性测试,框架应用,UI自动化实战将各类自动化测试技术结合项目实战演练,强化对自动化测试技术的运用,同时掌握更多的测试框架。
3、性能测试项目实战,LoadRunner性能测试工具,总结通过综合项目实战,将全套测试技术融入到项目中,强化学习效果和项目经验。
4、Python原生测试框架开发,包括Monkey,UI,图像识别,云测试平台,HTML测试报告,持续集成,KDT关键字驱动框架开发等原生技术实现通过大量的Python原生代码开发,深入理解自动化测试开发技术的底层实现原理,完全抛弃对工具的依赖,做到真正的测试开发技术。
5、基于测试框架的设计思路和实现手段,自主实现一套测试框架能够独立完成一套自动化测试框架,并能够直接用于实际项目中。
6、持续集成与Jenkins,安全性测试原理与工具,Python爬虫开发与Scrapy框架,提升软件测试其它类技术,增强知识面,提升竞争力,助力职业发展。
补充知识
1、算法进阶,图像处理,视频处理,加密解密,压缩算法。
2、UML统一建模语言、五种图、类图、类图详解、用例图、时序图。
3、Dubbo分布式开发框架,Oracle关系型数据库管理系统,MongoDB非关系型数据库管理系统。
4、大数据开发框架Hadoop/MapRece/Spark。
5、Android与iOS的原生应用开发与WebApp开发。
6、OpenCV图像处理框架、TensorFlow深度学习框架,Lucene全文搜索引擎与中文分词框架Ik-Analyzer,视频处理算法与框架等。
这种方法要求我为新加入的每个函数都编写单元测试,并且维护这些测试。没有通过单元测试,我就不能将任何一个的代码加到模块中。在代码基数增长的同时,这些测试允许开发者有依据地将改变集成起来。起初,我认为这些单元测试就足以应付全局,没有必要涉及到功能测试。噢,又错了。功能测试和单元测试完全不同的两者。我花费了很长的时间才理解到两者的区别,以及如何将它们结合起来,用以改进开发进程。 本文探讨了单元测试和功能测试之间的差别,同时介绍在你的日常开发的过程中如何来利用它测试和开发过程作为一个开发人员,测试如此之重要,以至于你甚至应该花费几乎所有的时间来完成它。它不仅需要只被划分为开发过程中的某个特定阶段。显然,它不该是在你把系统交付给客户之前完成的最后一项任务。然而,你又如何得知它在何时结束呢?或是你如何得知是否因为修改一个微小的bug而破坏了系统的主要功能呢?或是系统可能会演化成超乎现在想象的模样?测试,单元的和功能的都应该是开发的过程中的一部分。 单元测试应成为你编写代码的核心环节,尤其当你在从事一个项目时,紧张的时间约束你的开发进度,你也很想让它是在可控的有序下进行。我希望测试也是在你编写代码之前编写测试时的重要内容。 一套适用的单元测试应具备以下功能:说明可能的最佳适用设计提供类文档的最佳格式判断一个类何时完成增强开发人员对代码的信心是快速重构的基础 在系统中自然要包含单元测试所需的设计文档。重新阅读它,你会发现这是软件开发进程中的圣杯,文档跟随系统的变化而逐步演化。为每一个类提供完备的文档比起为它提供一系列的使用框架,或是一系列可控的输入要好得多。这样,设计文档就会因为单元测试的逐步通过而随时更新。 你应该在你编写代码之前完成编写测试的工序。这样做会为测试所涉及的类提供设计方案,并促使你关注代码中更小的程序模块。这种练习也会使设计方案变得更加简单。你不能试图去了解将来的情形,去实现不必要的功能。编写测试工作也会让你清楚类会在什么时间结束。可以说,当所有的测试通过时,任务也就完成了。 最后,单元测试会提供给你更高级别的依据,这绝对会满足开发者的。如果你在改动代码的同时,进行单元测试,你就会在你破坏的同时立即察觉到事态的发生。 功能测试甚至比单元测试更加重要,因为它们说明了你的系统就要预备发布了。功能测试将把你的工作系统放置于一个可用的状态中。 一套适用的功能测试应具备以下功能:有效地掌握用户的需求向项目组成员(包括用户和开发者)给出系统面临这些需求的依据 功能测试要在有效地情况下掌握用户的需求。而传统的开发者是在使用的过程中发现需求的。通常,人们赞同使用项目工程并且花费相当的时间去重新定制它们。当它们被完成时,它们所得到的仅仅是一堆废纸。功能测试雷同于自行生效的使用项目的情况。极端程序设计方法(ExtremeProgramming)能够说明这种概念。XP 的说法就是对未来发生在用户和开发者之间的交流技巧的描述。功能测试也是这种交流的结果。而没有功能测试,这种说法也不会建立起来的。 功能测试恰好填充了在单元测试和向项目小组提交的代码依据之间的空隙。单元测试会漏过许多的bug。它可以给出代码中你所需的所有有效部分,它也会给你所需的整个系统。功能测试可以使单元测试里漏掉的问题曝光。一系列可维护的,自动化的功能测试也会有漏网的情况,但是它至少比独立地进行最全面的单元测试要有用得多。 单元测试VS 功能测试单元测试告诉开发者代码使事情正确地被执行,而功能测试所说的则是代码在正确地发挥功效。 单元测试单元测试是从开发者的角度来编写的。它们确保类的每个特定方法成功执行一系列特定的任务。每一个测试都要保证对于给定的一个已知的输入应该得到所期望的输出。 编写一系列可维护、自动化、没有测试框架的单元测试几乎是不可能的。在你开始之前,选择一个项目小组都认可的框架。不断地应用它,逐渐地喜欢它。在极端编程的介绍网页上(见资源一节),有很多适用的单元测试框架。我喜欢用的是Juint 来进行Java 代码的测试。</P> 功能测试功能测试则是从用户的角度来编写的。这些测试保证系统能够按照用户所期望的那样去运行。很多时候,开发一个完整的系统更像是建造一座大楼。当然,这种比喻并不是完全地恰当,但我们可以扩展它,来理解单元测试和功能测试之间的区别。 单元测试类似于一个建筑检查员对房屋的建设现场进行检查。他注重的是房屋内部不同的系统,地基,架构设计,电气化,垂直的线条等等。他检查房屋的某个部分,以确保它在安全状态下,正确无误地工作,即是说,直接针对房屋的代码。功能测试在这个剧本里类似于房屋的主人在检查同样的建设场地。他所期望的是房屋的内部系统正常地运转,并且房屋检查员执行了他的任务。房屋的主人看重的是生活在这样的房屋中会是什么样子。他关注这间房屋的外貌,不同的房间有合适的空间,房屋适用于家庭的需要,窗户恰好位于最佳采光的位置。房屋的主人运行的是对房屋的功能测试,他站在用户的角度上。房屋检查员运行的是单元测试,他是站在建设者的角度上。 象单元测试一样,编写一系列可维护、自动化、没有测试框架的功能测试几乎是不可能的。Junit在单元测试方面做得很好;然而,它在试图编写功能测试时就显得比较松散。Junit 不等同于功能测试。现在已经有满足这个功能的产品问世了,但是我还没有看到它们被应用于开发产品过程里。如果你不能找到一个测试框架的话,就只好自己创建一个了。无论我们在建立一个项目时多么聪明,建立的系统多么灵活,如果我们的产品不能用,我们就是在浪费时间。结论是,功能测试是开发进程中最重要的一部分。 因为两种类型的测试都是必要的,你会需要编写它们的指南。 如何编写单元测试<BR></STRONG>在你开始编写单元测试很容易被激动的情绪感染。最简单的起步方式就是为新的代码创建单元测试。为已经存在的代码创建单元测试是一种比较有难度的开始方式,但是也是可行的。)从新的代码开始,习惯了这样的步骤后,还要坚持重新阅读现有代码,并为它们创建一套测试程序。 就像前面提到过的一样,你应该在你编写要测试的代码之前编写单元测试。如何做到为还不存在的事物编写测试呢?好问题!掌握这个能力需要90%的智力和10%技巧。我的意思是你只需假装是在为已有的类编写测试。接下来,进行编写的工作。最初,你将出现很多语法错误,但是let it be,不要理会它。紧接着进行单元测试,修改语法错误(即是说,只用你自己定义的测试接口来实现类),再一次进行测试。重复这个过程,每一次都写下充足的代码去修改错误,进行测试直到它们通过为止。当所有的单元测试都通过时,代码才算真正地完成了。 一般地说,你的类应具有开放的单元测试方式。然而,带有直截了当的功能性的方法比如说,Java 语言里的Getting 和Setting 读写方法,就不需要单元测试,除非它们是以“特殊”的方式进行的。接下来的指导就是,当你感到需要对代码中的某些特性添加注释时,同时要编写出单元测试。如果你同很多的程序员一样,厌恶为代码写注释,单元测试就是将你的代码的特性文档化的一种好方法。 将单元测试同被测试的相关的类打包在一起。(这种组织的方式允许每一个单元测试都能够直接访问类中被打包和保护的方法和参数)。要避免在单元测试中用到域对象(domain object)。域对象就是对于一个应用程序特定的对象。 例如,电子表格应用程序有个工作簿对象,它就是一个域对象。如果你的一个类已经知道了域对象,在你的测试中用到这些对象是很好的。但是如果你的类没有涉及到这些对象,就不要在测试里让它们同类纠缠不清了。不这样做的话,就会产生打包的代码被重用。经常是为一个项目创建的类也可以应用于其他的项目,这样可能会出现直接重用这些类的情况。但是如果针对这些类的测试也用于另外的项目对象,让测试生效会很费时,通常测试不是被抛弃掉就是被重新编写。 以上的一些技巧会让你从中受益,但最重要的是如果你不实际地去做,就永远不会对单元测试有全面、深入的理解。更早地运行测试,并且在整个过程中都在代码中给出全面的依据。当项目进展时,你会随时添加更多的特性。运行测试就会提醒你,实现刚添加的特性会不会破坏已有的东西。 在你已经掌握编写单元测试的技巧之后,你需要重新阅读已存在的代码。的确,为它们编写代码可能会是一场挑战。但是千万不要为了测试的目的而测试。可以说,编写测试是一件紧跟时效的事情,尤其是当你发现要修改一个没有好的测试程序的类时,那就是添加测试的恰当时机。和平常一样,单元测试应该具备类每个方法的特性。实现测试的一个最简单的方法就是,测试的同时一定要注意代码的注释。在单元测试中,不能放过任何一个注释,在描述测试方法的开始就要为单元测试添加大量的注释中。 如何编写功能测试 尽管功能测试是如此重要,它也有个开发过程里丑陋的继生子的坏名声。在大多数的项目里,是由一个独立的工作组来完成功能测试的工作。通常需要一群人在系统中的相互协助才能保证工序的正确运行。这种通常的看法和队伍的组建的做法,都是非常愚蠢的。 功能测试同单元测试相类似。一旦要编写有用户涉入的产品的代码(例如,对话框)时,就要编写测试,但是一定要在实际编写代码之前做。一旦你开始了一项新任务,就要在功能测试的框架里清楚地描述这个任务的内容。你加入的新代码的同时进行单元测试,开发工作就向前持续进行。 当所有的单元测试都进行通过后,再进行最初的功能测试来判断项目是否可以通过,或是需要修改。理想的状况下,功能测试小组的概念应该不存在的。开发者应该同用户一同编写功能测试。系统通过了一系列的单元测试后,负责进行功能测试的小组成员就要改变初试测试的参数,再进行系统的功能测试。 单元测试和功能测试之间的界线<BR></STRONG>一般情况下,很难划清在单元测试和功能测试之间的界限。说实话,一直以来,我就不知道这个界线应该定在哪里。当编写单元测试时,我用以下几个方法来判定单元测试是不是已经变成了功能测试:<BR>如果单元测试超越了类之间的界限,它可能变成了功能测试<BR>如果单元测试变得非常的复杂,它可能变成了功能测试<BR>如果单元测试变得很脆弱(即是说,它已经成为一个测试,但是却因为要迎合不同用户需求的改变而被动地变化),它可能变成了功能测试<BR>如果单元测试比需要测试的代码还要难于编写,它可能变成了功能测试 注意“它可能变成了功能测试”的说法,在这里没有严格的标准。在单元测试和功能测试之间是有界线的,但是你必须自己判定它在哪里。单元测试进行地顺利,特定的测试逾越两者界线的过渡就越明显。 结论 单元测试以开发者的角度来编写,并注重被测试类的特性。当编写单元测试时,利用以下几条指导: 在类代码进行测试之前编写单元测试在单元测试里掌握代码的注释测试所有执行特定功能的公用程序(即是说,和Java 语言中的Getting 和Setting 读写方法不同的方法。除非它们是通过一种特殊的方式来完成Getting 和Setting 功能的。)将所有的测试项目同被测试的类打包在一起,并且分配它们对在模块包内的和被保护成员的访问权限在单元测试中避免使用某些特定的对象功能测试也需要从用户的角度出发来编写,并且注重用户所感兴趣的系统功能。选择一个适当的功能测试框架,或是开发出一种,并利用这些功能测试来制定用户们想要的东西。通过这种方式,功能测试的人员可以获得一个自动的工具,并且对使用工具的习惯有了一个好的起点。 将单元测试和功能测试作为开发进程的核心内容。这样做,你就会确定系统在正常运转。如果没有,你恐怕不能保证系统是正常工作的。测试可能不是一件好玩的事情,但是从事单元测试和功能测试会使开发过程里含有更多的乐趣。 资源“利用Ant 和JUnit 改进开发过程”(开发工作,2000 年12 月)揭示了单元测试的益处,尤其是应用了Ant 和Junit 之后。开始了解极端编程的方法从极端编程的网页上下载各种单元测试的框架文章出处
测试框架和覆盖率工具。
1、测试框架:用于编写和执行测试代码,并生成测试报告,常见的测试框架有JUnit、PyUnit、Mocha等。
2、覆盖率工具:用于评估测试代码对源代码的覆盖率,以确定测试是否足够全面,常见的覆盖率工具有JaCoCo、Coveragepy等。
1 你的第一个UIAutomation测试脚本
UIAutomation的功能测试代码是用Javascript编写的。UIAutomation和Accessibility有着直接的关系,你将用到通过标签和值的访问性来获得UI元素,同时完成相应的交互 *** 作。
下面让我们来编写我们的第一段测试代码。
使用iOS模拟器
1 下载示例应用程序TestAutomationxcodeproj,并打开它。这个项目是一个很简单的包含2个tab的tabbar应用程序。
2 确保选中如下图所示的“TestAutomation > iPhone 50 Simulator”模式(或许你已经切换成51了,因此它可能是iPhone51模拟器)。
3 启动Instruments(Product > Profile),或者通过⌘I。
4 选择左边的iOS Simulator,然后再选择Automation模板,然后点击“Profile”。
5 Instruments就已经启动好后,然后直接开始录制了。这里先停止录制,(红包按钮或者⌘R)。
6 在左边的Scripts窗口,点击“Add > Create”创建新的脚本。
7 在脚本编辑器里,输入下面的代码
1
2
3
4
var target = UIATargetlocalTarget();
var app = targetfrontMostApp();
var window = appmainWindow();
targetlogElementTree();
请注意测试本身不是靠工具的而是靠设计,这是我的理念,所以我一向觉得,很多人认为做测试做的好就是靠掌握一门好的工具,这个观点是不正确的,所以我可以负责任的告诉你,做Android手机需要掌握的不是工具、而是理念、思维、以及框架,总的来说是本质,而工具只是辅助,那么现在我来介绍一些我了解的工具(仅仅是了解,很多没用过)
开源 Android 软件测试工具包括:Android Test Kit, AndroidJUnit4, Appium, calabash-android, Monkey, MonkeyTalk, NativeDriver, Robolectric, RoboSpock, Robotium, UIAutomator, Selendroid。
Android Test Kit
Android Test Kit 是一组 Google 开源测试工具,用于 Android 平台,包含 Espresso API 可用于编写简洁可靠的 Android UI 测试。
AndroidJUnit4
AndroidJUnit4 是一个让 JUnit 4 可以直接运行在 Android 设备上的开源命令行工具。
Appium
Appium 是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android 和 FirefoxOS 平台。Appium 驱动苹果的 UIAutomation 库和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 协议。Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto Appium 同时绑定了 Selendroid 用于老的 Android 平台测试。
Calabash-android
calabash-android 是一个基于 Cucumber 的 Android 的功能自动化测试框架。Calabash 允许你写和执行,是开源的自动化移动应用测试工具,支持 Android 和 iOS 原生应用。Calabash 的库允许原生和混合应用的交互测试,交互包括大量的终端用户活动。Calabash 可以媲美 Selenium WebDriver。但是, 需要注意的是 web 应用和桌面环境的交互跟触摸屏应用的交互是不同的。Calabash 专为触摸屏设备的原生应用提供 APIs。
Monkey
Monkey 是 Google 开发的 UI/应用测试工具,也是命令行工具,主要针对压力测试。你可以在任意的模拟器示例或者设备上运行。Monkey 发送一个用户事件的 pseudo-random 流给系统,作为你开发应用的压力测试。
MonkeyTalk
MonkeyTalk 是世界上最强大的移动应用测试工具。MonkeyTalk 自动为 iOS 和 Android 应用进行真实的,功能性交互测试。MonkeyTalk 提供简单的 "smoke tests",复杂数据驱动的测试套件。MonkeyTalk 支持原生,移动和混合应用,真实设备或者模拟器。MonkeyTalk 使得场景捕获非常容易,可以记录高级别,可读的测试脚本。同样的命令可以用在 iOS 和 Android 应用上。你可以记录一个平台的一个测试,并且可以在另外一个平台回放。MonkeyTalk 支持移动触摸和基于手势交互为主的移动体验。点击,拖拽,移动,甚至是手指绘制也可以被记录和回放。
NativeDriver
NativeDriver 是 WebDriver API 的实现,是原生应用 UI 驱动,而不是 web 应用。
Robolectric
Robolectric 是一款Android单元测试框架,使用 Android SDK jar,所以你可以使用测试驱动开发 Android 应用。测试只需几秒就可以在工作站的 JVM 运行。Robolectric 处理视图缩放,资源加载和大量 Android 设备原生的 C 代码实现。Robolectric 允许你做大部分真实设备上可以做的事情,可以在工作站中运行,也可以在常规的 JVM 持续集成环境运行,不需要通过模拟器。
RoboSpock
RoboSpock 是一个开源的 Android 测试框架。提供简单的编写 BDD 行为驱动开发规范的方法,使用Groovy 语音,支持 Google Guice 库。RoboSpock 合并了 Robolectric 和 Spock 的功能。
Robotium
Robotium 是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势 *** 作(点击、长 按、滑动等)、查找和断言机制的API,能够对各种控件进行 *** 作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测 试。另外,Robotium 40版本已经支持对WebView的 *** 作。Robotium 对Activity,Dialog,Toast,Menu 都是支持的。
UIAutomator
uiautomator 测试框架提高用户界面(UI)的测试效率,通过自动创建功能 UI 测试示例,可以在一个或者多个设备上运行你的应用。
Selendroid
Selendroid 是一个 Android 原生应用的 UI 自动化测试框架。测试使用 Selenium 2 客户端 API 编写。Selendroid 可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。
以上就是关于Python语言的测试开发怎么完整学习全部的内容,包括:Python语言的测试开发怎么完整学习、在开发过程中怎样利用单元和功能测试、搭建单元测试环境需要哪两种程序的支持等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)