前言
大家好,我是洋子,作为一名测试开发/软件测试工程师, 在进行软件测试的过程中,会用到测试工具去辅助测试,以提高测试工作的效率。今天就给大家介绍一下2021年软件测试领域当中的最流行,最实用的工具,一共有8类工具。本文会先介绍抓包工具与单元测试工具
工具分类
- 抓包工具
- 单元测试工具
- 接口测试工具
- UI测试工具
- 性能测试工具
- 测试管理工具
- 安全性测试工具
- AI测试工具
抓包工具
Charles
Charles 是一个 HTTP 代理/HTTP 监视器/反向代理,能捕获本机发送与接收到 的HTTP 和 HTTPS请求 。测试人员能够查看请求、响应和 HTTP 标头(其中包含 cookie 和缓存信息)。同时支持Map Remote,Map Local ,Rewrite 三大功能,修改本机请求的ip与端口,请求返回结果,重写HTTP Head、Body等信息
官网地址: https://www.charlesproxy.com/
支持Mac,Windows系统
Fiddler
Fiddler 是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,但经典版只支持Windows系统,目前推出新的 Fiddler Everywhere 软件已支持Mac
官网地址: https://www.telerik.com/fiddler
Wireshark
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。Charles与Fiddler 只能抓取HTTP 及HTTPS 的请求,而Wireshark还可以捕获 IP,TCP,UDP 协议头与协议内容,对于分析网络层与传输层协议是一大利器
官网地址: https://www.wireshark.org/
单元测试工具
- Junit
- TestNG
- GoogleTest
- pytest
- unittest
- Spock
- Jmockit
- gcov、lcov、gcovr
- Coverage.py
- EvoSuite
- Diffblue Cover
单元测试框架
当前主流的单元测试框架包括:JUnit、TestNG、gtest、pytest、unittest;这里还会介绍一款简单易用的单元测试框架Spock。
JUnit
JUnit是一个为Java设计的开源单元测试框架,多数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。JUnit 的最新版本是JUnit 5,它不再是一个单一的JAR 包,而是由以下3部分组成
JUnit 5 = JUnit Platform(平台) + JUnit Jupiter + JUnit Vintage
官网地址:https://junit.org/junit5/
TestNG
TestNG 是另一个为Java编程语言设计的开源单元测试框架,是一个受JUnit和NUnit启发而来的测试框架,但它引入了一些新功能:
- 注解支持
- 支持多线程测试执行
- 支持数据驱动测试(使用@DataProvider)
官网地址:https://testng.org/
GoogleTest
GoogleTest(gtest)是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布
- 使用简单的宏定义就能编写测试用例
- 试用例为exe可执行程序,能直接运行
- 提供丰富的命令行参数
pytest
pytest是一个非常成熟的全功能的支持Python语言的自动化测试框架,也可以认为它一个测试管理框架,因为它不仅可以用来做单元测试,也可以结合selenium/appnium做UI自动化测试,还能集成requests库做接口自动化测试。支持参数化,可以分细粒度地控制要测试的测试用例,也可以很好的和CI工具结合,例如jenkins
官网地址:http://pytest.org/
unittest
unittest 是 Python 自带的一个单元测试框架,作为python的标准库,是其他单元测试框架的基础。unittest中最核心的部分是:TestFixture、TestCase、TestSuite、TestRunner。无需安装,使用简便,引入包 import unittest 即可使用
官网地址:http://docs.python.org/zh-cn/3/library/unittest.html
Spock
Spock是一个为groovy和java语言应用程序来测试和规范的框架。这个框架的突出点在于它美妙和高效表达规范的语言。得益于JUnit runner,Spock能够在大多数IDE、编译工具、持续集成服务下工作。Spock的灵感源于JUnit,jMock, RSpec, Groovy, Scala, Vulcans以及其他优秀的框架形态
官网地址:https://spockframework.org/
单元测试Mock工具
在进行单元测试时,需要测试的类或函数有很多依赖,某些依赖不好构建,如Mysql或者Redis里的数据,导致在单元测试代码里无法完成构建。因此,我们需要采用Mock 技术隔离依赖对象,即模拟这些需要构建的类或者资源,提供给需要测试的对象使用
JMockit
JMockit是一个用于开发人员单元测试的Java工具。Jmockit可以和Junit或TestNG配合使用编写单元测试。主要有以下特点
- 针对JavaEE和基于Spring的应用程序的容器外集成测试
- 使用记录和验证语法模拟API
- Mock API以替换实现。支持类级别整体mock和部分方法重写,以及实例级别整体mock和部分mock。可以mock静态方法、私有变量及局部方法
- 代码覆盖率统计工具
官网地址:http://jmockit.org/
单元测试覆盖率工具
JCoCo
Jacoco是一个开源的免费Java代码覆盖工具,由EclEmma创建,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其Java Agent技术监控Java程序等等。很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等
除了Jacoco,cobertura与emma这两款工具也是用来统计单元测试覆盖率
官网地址:https://www.jacoco.org/jacoco/
gcov、lcov、gcovr
gcov、lcov、gcovr都是支持C/C++语言代码覆盖率的工具。gcov是由gcc内建的代码覆盖率生成工具。lcov是gcov工具的图形前端,收集多个源文件的gcov数据,生成描述覆盖率的HTML页面。生成的结果中会包含概述页面,方便浏览。gcovr是一款针对C/C++代码覆盖率并支持以多种方式(包括列表方式、XML文件方式、HTML网页方式等)展示出来的工具。
lcov下载地址:https://github.com/linux-test-project/lcov gcovr下载地址:https://github.com/gcovr/gcovr
Coverage.py
Coverage.py是一个度量Python语言代码覆盖率的工具。Coverage.py可以指定要通过配置文件分析哪些源文件,通过分析源代码,发现没有被测试覆盖的代码
官网地址:https://coverage.readthedocs.io
单元测试用例自动生成工具
许多开发人员认为手动编写单元测试用例耗时耗力,目前也推出了智能化自动生成单元测试的工具
EvoSuite
EvoSuite是由英国Sheffield(谢菲尔德)等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行,并得到了Google和Yourkit的支持。通过使用此自动测试工具能够在保证代码覆盖率的前提下极大地提高测试人员的开发效率。但是只能辅助测试,并不能完全取代人工,测试用例的正确与否还需人工判断。 官网地址:https://www.evosuite.org/ 开源代码地址:https://github.com/EvoSuite/evosuite
DiffBlue Cover
Diffblue Cover是一个自动化的单元测试编写工具,通过分析Java应用程序编写反映当前行为的单元测试,提高测试覆盖率,并帮助开发人员在将来的代码更改中发现回归缺陷。 插件开源社区版地址:https://plugins.jetbrains.com/plugin/14946-diffblue-cover–community-edition/versions
UnitAuto
机器学习单元测试平台不用编写、也不生成任何测试代码,就能完成单元测试。相比 JUnit, JTest, Mockito, Mockk 等一堆 Compiling testing 工具,其它工具需要每个方法都写一大堆测试代码,需要开发成本、需要解决测试代码的 bug、业务代码更改后需要同步修改测试代码等;UnitAuto 不需要写任何代码,直接读取方法的属性,自动注入参数,拿到返回值和类成员变量,机器学习自动化校验。
github地址:https://github.com/TommyLemon/UnitAuto
|