自动化测试(12.19)
对于自动化测试,我原来blog上面的谈的比较少,但是现在我们做DevOps支撑平台的时候,在整个持续集成和交付的过程中,有一个重要的内容就是自动化测试。自动化测试的覆盖面相当大,其中既包括了CS,BS和移动APP的自动化测试分类;也包括了单元测试,接口自动化测试和UI自动化测试的分类。在今天只谈下对于常见的一个Web应用的自动化测试应该如何去考虑。
要知道自动化测试不是一个新鲜的东西,很早就有,只是最近几年有了新的发展。比如在10多年前我们做每日构建和冒烟测试,持续集成的过程中,我们就已经在用Junit做自动化测试,并集成到整个持续集成过程。在每日构建完成后,自动化运行Junit的自动化测试脚本并输出冒烟测试的测试结果报告。
而在当时如果涉及到CS应用的自动化测试,包括对于Web类应用的自动化测试,我们采用QTP(现在改名为UFT)工具来做自动化测试,但是并没有得到广泛的应用,一个核心的原因就是QTP来做Web端的自动化测试,实际上脚本录制和代码编写量都很大,而且很难对所有的测试用例做到完全覆盖,同时即使用了QTP工具录制和维护脚本,实际的人工测试还是不能省略,因此这些都导致了QTP自动化测试并没有大范围推广。
而最近几年的发展可以看到,对于Web自动化测试Selenium和Robot Framework逐渐成为了主流的自动化测试框架和选择。同时在微服务架构,前后端分层开发推广下,对于接口的自动化测试也发展很快。
QTP自动化测试工具
QTP是Quick Test Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。
HP QuickTest Professional 提供符合所有主要应用软件环境的功能测试和回归测试的自动化。采用关键字驱动的理念以简化测试用例的创建和维护。它让用户可以直接录制屏幕上的操作流程,自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。
以QTP为核心的自动化测试框架优点在于:适用性好,很多人都已经会用或者至少说可以简单应用,脚本也简单易懂,大多数无任何代码基础的测试人员都可以加入脚本录制和调试。然而它最大的缺点就是对象库,关键字的框架,灵活度也不高,且加上QTP在对flex等的支持上,也是让许多人头疼的问题。
Selenium自动化测试工具
selenium是一个用于Web应用程序测试的工具。这个工具的主要功能包括:测试与浏览器的兼容性,测试你的应用程序,看是否能够很好得工作,在不同浏览器和操作系统之上。测试系统功能,创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。Selenium不是市场上唯一的自动化测试工具,但它是唯一可以与付费产品竞争的免费测试工具。而且Selenium可以提供无与伦比的灵活性,它可以轻松集成各种开发平台,如Jenkins,Maven,TestNG,QMetry,SauceLabs等。同时它支持移动测试,和各种语言,平台和浏览器,庞大的社区,大型插件库。selenium缺点也存在,没有内置的图像比较、技术支持和报告功能。
Selenium框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。正是这个原因,Selenium测试工具使浏览器兼容性测试自动化成为可能。
通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browser bot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。
Selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
可参考:
http://www.selenium.org.cn/ (中文站点)
https://blog.csdn.net/TestingGDR/article/details/81950593
Robot Framework(链接:http://robotframework.org/)
Robot Framework是一个跨平台的通用的,与应用程序和技术无关的测试框架。它的优点是:易于扩展,提供了简单的API,用户可以自定义基于Python和Java的测试库。它还提供强大的标签功能,来归类测试运行,在测试运行时可以选择不同的Tag或tag组合进行测试运行。支持报告合并,以便让你可以多机执行,然后合并报告,全局测试超时时间设置,局部可以覆盖全局的设置非常方便,不会测试卡壳的等等。其主要优点包括:
1.通过使用关键字驱动测试(KDT)方法简化了自动化测试过程,方便测试人员创建易读的测试。
2.测试数据语法简单易用。
3.生态系统丰富。由各种通用测试库和工具组成,这些工具都是作为独立项目开发的。
4.具有高度可扩展性。
5.可通过 pabot 或 Selenium Grid 执行并行测试。
要注意到Robot Framework本身是关键字驱动的测试,库和关键字就很重要,对于当前的库和关键字你们没有的时候你还需要自己写代码进行扩展。在Robotframework当中,由SeleniumLibrary(非robot自带,需要安装)库提供对网页的操作关键字(功能)。
即Robot Framework+SeleniumLibrary结合基本就能够完成我们需要的Web和UI自动化测试能力。
具体可参考:
https://blog.csdn.net/qq_27534003/article/details/87437195
https://www.jianshu.com/p/2ebea3256e21
接口自动化测试
对于接口自动化测试,主要是指类似SOAP , Http Rest等接口服务如何进行自动化测试。实际上在我们SOA管控平台的开发过程中,我们也定制化开发了接口自动化测试的工具,先是人工运行一篇接口测试,这本身类似一个脚本录制的动作,然后后续再根据已经录制的脚本批量自动化运行接口测试脚本并输出结果。
参考: https://segmentfault.com/a/1190000019885382?utm_source=tag-newest
Python+Request
Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。整个测试思路基本如下:
1. 对于每个Http接口请求手工编写测试脚本
2. 把对同一个接口的所有测试用例py脚本封装为方法,每个接口封装一个接口类
3. 使用Testsuite调用这些接口类,构建测试集,或利用unittest自动识别测试用例
4. 构建自动化测试
5. 输出测试结果报告
可以看到要使用Python+Request一方面是要熟悉Python语言和Request库,一方面是需要手工编写测试脚本,整个代码编写量仍然很大。这个方法跟采用Junit单元测试基本是差不多的。
参考:
https://www.cnblogs.com/ailiailan/p/8535293.html
https://blog.csdn.net/songlh1234/article/details/84317617
Http Runner自动化测试框架
2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业余时间研究这个框架去实现接口自动化测试。
HttpRunner 是一款面向 HTTP(S) 协议的通用开源测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
参考: https://www.cnblogs.com/yinjia/p/10415920.html
人工接口测试工具和性能测试工具用于接口自动化测试(Postman,JMeter)
Postman + Newman + Jenkins 实现接口自动化框架 ,postman 方便日常的调试,非常的方便,测试的断言,设置前置条件,环境变量,response 参数提取 非常方便,我在日常工作中经常使用 postman进行接口的调试。postman高级的功能可以付费进行定制化(我还没有试验过付费的功能,在日常工作中 免费版本就已经够使用的了)。
官网文档:https://learning.getpostman.com/docs/
开源测试工具Jmeter 可以承担接口请求、结果解析和断言的工作,可以作为轻量级接口自动化的实现手段,对于开发能力不强或规模不大的团队也能接受。Jmeter可以在协议层实现基本的功能,包括接口访问、参数化构造、返回值断言和数据库访问,基本足够满足一个轻量级的接口自动化框架的功能。
参考:https://www.cnblogs.com/rd-ddddd/p/9578242.html