Bootstrap

【自动化测试】几种常见的自动化测试框架

在软件测试领域,自动化测试框架有很多,这里主要介绍几种常用的自动化测试框架。
在这里插入图片描述

1.pytest

pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。主要有以下几个特点:

  • 简单灵活,容易上手。
  • 支持参数化。
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做 selenium / appnium 等自动化测试、接口自动化测试(pytest+requests)。
  • pytest 不是 python 内置库,需要单独安装。

使用 pytest 编写用例,必须遵守以下规则:

  • 测试文件名必须以 test_ 开头或者 _test 结尾(如:test_ab.py)
  • 测试方法必须以 test 开头。
  • 测试类命名以 Test 开头。

2.Junit

Junit 是一个 Java 语言的单元测试框架。它由 Kent Beck 和 Erich Gamma 建立,逐渐成为源于 Kent Beck 的 sUnit 的 xUnit 家族中最为成功的一个。 Junit 有它自己的 JUnit 扩展生态圈。多数 Java 的开发环境都已经集成了 Junit 作为单元测试的工具。

Junit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit 测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit 是一套框架,继承 TestCase 类,就可以用 Junit 进行自动测试了。

3.selenium

Selenium 是一个用于 Web 应用程序测试的工具。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。Selenium 是一套完整的 web 应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium 的核心 Selenium Core 基于 JsUnit,完全由 JavaScript 编写,因此可以用于任何支持 JavaScript 的浏览器上。Selenium 可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决 JavaScript 渲染问题。

selenium 1.0 包括以下两部分:selenium server、 Client Libraries 组成。

Selenium 2 将浏览器原生的 API 封装成 WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。

4.Appium

appium 是当前移动平台上主流的自动化测试工具之一。

appium 是一个合成词,分别由 “application” 的前三个字母和 “Selenium” 的后三个字母组成。application 为 “应用”,我们一般把移动平台上的应用简称为 App。Selenium 是当前主流的 Web UI 自动化测试工具。appium 与 Selenium 之间是有继承关系的。appium 的寓意是:移动端的 Selenium 自动化测试工具

appium 是一个开源自动化测试工具,支持 iOS 和 Android 平台上的原生应用、Web 应用以及混合应用。

  • 原生应用:是指那些用 iOS 或者 Android SDK 开发的应用(App)。
  • Web 应用:是指可以使用移动浏览器(如 iOS 上的 Safari 和 Android 上的 Chrome)访问的应用。
  • 混合应用:是指用原生代码封装网页视图,原生代码和 Web 内容交互的应用。比如, 微信小程序,可以帮助开发者使用网页技术开发应用,然后用原生代码封装。 更重要的是,appium 是一个跨平台的测试工具,它允许测试人员在不同的平台(iOS、 Android)使用同一套 API 编写自动化测试脚本,这大大增加了 iOS 和 Android 测试套件之间代码的复用性。

5.LoadRunner

LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。企业使用 LoadRunner 能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

5.1 虚拟用户

使用 LoadRunner 的 Virtual User Generator,您能很简便地创立起系统负载。该引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。利用虚拟用户,您可以在 Windows ,UNIX 或 Linux 机器上同时产生成千上万个用户访问。所以 LoadRunner 能极大的减少负载测试所需的硬件和人力资源。

用 Virtual User Generator 建立测试脚本后,您可以对其进行参数化操作,这一操作能让您利用几套不同的实际发生数据来测试您的应用程序,从而反映出本系统的负载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。在这些变量内随意输入可能的订单号和客户名,来匹配多个实际用户的操作行为。

5.2 真实负载

Virtual users 建立起后,您需要设定您的负载方案,业务流程组合和虚拟用户数量。用 LoadRunner 的 Controller,您能很快组织起多用户的测试方案。Controller 的 Rendezvous 功能提供一个互动的环境,在其中您既能建立起持续且循环的负载,又能管理和驱动负载测试方案。

而且,您可以利用它的 日程计划服务 来定义用户在什么时候访问系统以产生负载。这样,您就能将测试过程自动化。同样您还可以用 Controller 来限定您的负载方案,在这个方案中所有的用户同时执行一个动作,如登陆到一个库存应用程序,来模拟 峰值负载 的情况。另外,您还能监测系统架构中各个组件的性能,包括服务器、数据库、网络设备等,来帮助客户决定系统的配置。

5.3 定位性能

LoadRunner 内含集成的实时监测器,在负载测试过程的任何时候,您都可以观察到应用系统的运行性能。这些性能监测器为您实时显示交易性能数据(如响应时间)和其它系统组件包括 application server、web server、网路设备和数据库等的实时性能。这样,您就可以在测试过程中从客户和服务器的双方面评估这些系统组件的运行性能,从而更快地发现问题。

利用 LoadRunner 的 ContentCheck TM ,您可以判断负载下的应用程序功能正常与否。ContentCheck 在 Virtual users 运行时,检测应用程序的网络数据包内容,从中确定是否有错误内容传送出去。它的实时浏览器帮助您从终端用户角度观察程序性能状况。

5.4 分析结果

一旦测试完毕后,LoadRunner 收集汇总所有的测试数据,并提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。使用 LoadRunner 的 Web 交易细节监测器,您可以了解到将所有的图象、框架和文本下载到每一网页上所需的时间。

例如,这个交易细节分析机制能够分析是否因为一个大尺寸的图形文件或是第三方的数据组件造成应用系统运行速度减慢。另外,Web 交易细节监测器分解用于客户端、网络和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。例如,您可以将网络延时进行分解,以判断 DNS 解析时间,连接服务器或 SSL 认证所花费的时间。通过使用 LoadRunner 的分析工具,您能很快地查找到出错的位置和原因并作出相应的调整。

5.5 重复测试

负载测试是一个重复过程。每次处理完一个出错情况,您都需要对您的应用程序在相同的方案下,再进行一次负载测试。以此检验您所做的修正是否改善了运行性能。

LoadRunner 完全支持 EJB 的负载测试。这些基于 Java 的组件运行在应用服务器上,提供广泛的应用服务。通过测试这些组件,您可以在应用程序开发的早期就确认并解决可能产生的问题。

利用 LoadRunner,您可以很方便地了解系统的性能。它的 Controller 允许您重复执行与出错修改前相同的测试方案。它的基于 HTML 的报告为您提供一个比较性能结果所需的基准,以此衡量在一段时间内,有多大程度的改进并确保应用成功。由于这些报告是基于 HTML 的文本,您可以将其公布于您公司的内部网上,便于随时查阅。

6.Jmeter

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象 模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能 / 回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

JMeter 的作用

  • 能够对 HTTP 和 FTP 服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
  • 完全的可移植性和 100% 纯 java。
  • 完全 Swing 和轻量组件支持(预编译的 JAR 使用 javax.swing.*)包。
  • 完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。
  • 精心的 GUI 设计允许快速操作和更精确的计时。

JMeter 的高可扩展性

  • 可链接的取样器允许无限制的测试能力。
  • 各种负载统计表和可链接的计时器可供选择。
  • 数据分析和可视化插件提供了很好的可扩展性以及个性化。
  • 具有提供动态输入到测试的功能(包括 Javascript)。
  • 支持脚本编程的取样器(在 1.9.2 及以上版本支持 BeanShell)。
  • 缓存和离线分析 / 回放测试结果。

参考资料

【1】自动化测试框架总结
【2】百度百科,LoadRunner
【3】Jmeter 中文网

;