服务端接口自动化测试工具大全及适配环境解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 在互联网时代,服务端测试已经成为一个重要的产品保障手段,各对此公司实施的方法和技术也不同,本文我们就来讨论一下。互联网服务端接口自动化是各个公司都需要一部分业务,如何快速高效地完成接口测试呢? 以帮助大家实现高效的接口测试为出发点,本文包含了我在互联网接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于:互联网服务端接口测试介绍;接口测试常用的工具、平台、框架;接口测试的一些问题和实践。
在互联网时代,服务端测试已经成为一个重要的产品保障手段,各对此公司实施的方法和技术也不同,本文我们就来讨论一下。

互联网服务端接口自动化是各个公司都需要一部分业务,如何快速高效地完成接口测试呢?

 

以帮助大家实现高效的接口测试为出发点,本文包含了我在互联网接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于:

  • 互联网服务端接口测试介绍;

  • 接口测试常用的工具、平台、框架;

  • 接口测试的一些问题和实践。

 

下图是经典的测试金字塔,服务接口测试在中部,承上启下,由此可见其重要性。

 

 

 

互联网服务端接口测试介绍

 

目前市场上有很多支持接口测试的工具,能够提高测试效率。但是让你一天完成100个接口测试任务,你觉得可能吗?

 

你可能会说有工具就行,但不是所有工具都能支持你完成这个任务。下图是我挑选的几款工具:

 

 

1. fiddler

 

fiddler是一个 HTTP 协议调试代理工具,Web和手机测试都会用到,同时也支持接口测试。后面我会专门介绍。

 

2. postman

 

它是 Google 开发的一个插件,安装在 Chrome 浏览器上,能支持不同接口测试请求,可以管理测试套件和自动化运行。弱点是自动化断言功能不强大,不能和 Jenkins、代码管理库进行持续集成测试。

 

但是,它绝对是一个很好的半手工、半自动化测试工具。我一般在写自动化接口测试用例,会打开 postman 进行辅助测试和 Debug,下文会有介绍。

 

3. wireshak

 

这是一款抓包工具,支持 TCP、UDP、HTTP 。如果做底层网络数据测试,一般都需要用到它,但是用作接口测试,它就有点不友好。因为刷新数据太快,不好定位每个操作对应的接口。所以,在这里就不过多介绍该工具。

 

 

4. soupUI

 

这是一款提供有开源免费版和企业收费版的软件。在国外的接口测试中,使用较多。该工具能够支持接口自动化测试和接口性能测试,也支持和 Jenkins 做持续集成测试。了解一下就可以,可以下载一个社区免费版,做一个 Demo 试试。

 

 

5. Java 代码做接口测试

 

为什么要用代码做接口自动化测试呢?一些工具功能是有限制,很多公司需要一些特定的功能,工具不支持,只好用代码进行开发。一般用 Java 做自动化测试,主要利用 httpclient.jar 包,然后利用 JUnit 或者 TestNG 这样的单元测试工具,进行测试用例的开发,接着在 Jenkins 上创建一个 job,进行持续集成测试。

 

 

6. Python 代码做接口测试

 

和 Java 一样,用 Python 做接口测试,可以利用一个功能强大的第三方库 Requests,它能方便地创建接口自动化用例。Python 下的单元测试框架,一般采用unittest。生成测试报告,一般选择 HTMLTestRunner.py。同样,可以结合 Jenkins 做持续集成测试。

 

 

7. LoadRunner

 

不要以为 LoadRunner 只能做性能测试,它同样可以做接口自动化和接口压力测试。只是我们很多人,不会利用 LoadRunner 的函数,设计接口测试用例。

 

 

8. JMeter

 

JMeter 同 LoadRunner 一样,都以性能测试出名,一般用 JMeter 也是做接口性能测试。例如 Java+Jmeter+Ant+Jenkins 做接口性能监听测试。JMeter 如何做接口测试,可以查阅官方文档和 CSDN 博客专栏《JMeter 性能测试》 。

 

上面说了这么多工具,基本覆盖了接口功能测试、接口自动化测试、接口性能测试。这里提一下,推荐 Python 语言下的一个性能测试工具 Locust。自己百度并安装下,很简单的 Web 界面,作为一个轻量级的协程测试工具,感觉很不错。

 

服务端测试也应该具备一些计算机基础知识的能力,例如下面几个领域的知识。

 

 

操作系统和网络

 

互联网里最大的应用场景就是高并发、高可用、高性能的线上服务,做这类系统实际上考验的是我们对操作系统和网络的理解。任何一个系统最后都是运行在操作系统之上的,也都运行在网络之上的,包括分布式系统,所以,需要在操作系统和网络上一定要有较深的造诣,尤其是高并发和高性能。

 

如果对操作系统原理一无所知,基本很难理解什么是并发和锁,很难理解高性能用什么指标来衡量,以及怎么实现高并发、高可用和高性能。

 

对于操作系统,我们必须了解 CPU 的多核体系结构、内存分页和缓存技术、磁盘 IO 的优略和网卡 IO 的情况,并且要理解计算机的工作原理,会根据这些指标粗略评估服务能够输出的性能。

 

对于网络,必须理解理论上定义的7层模型,了解 TCP/IP 的三次握手。另外我们在分布式服务架构中多数使用应用层的HTTP协议,所以还需要对 HTTP 协议有很深刻的理解。

 

 

算法和数据结构

 

应用层面的小伙伴们可能对算法和数据结构的应用比较少,即使有应用也比较简单,但是算法能力代表了一个人的逻辑思维和思考能力,能把各种基础算法理解的人智商都不会低,能够把程序写好的人逻辑思维一定很强。

 

一般在面试小伙伴的时候,我都会考察一下他会不会高级算法,例如递归、剪枝、贪婪、动态规划。仔细想一下就会知道,会动态规划的人,他不是勤奋的就是聪明的,无论哪一样,你都有录取他的冲动。

 

 

线上高并发服务方向

 

线上高并发服务是个强需求,无论你开发哪类应用和网站,线上服务都是必须的,有了服务才有了功能,才有了产品,我也主要从事互联网后台高并发服务的设计与实现。

 

解决高并发服务其实并没有那么难,这些年高并发服务的技术栈也已经没有了门槛,只要投入足够的成本,构建可伸缩的服务不是问题,达到多大的 TPS 也都不是问题,核心思想就是“分而治之,大而化下,小而化了”。

 

我们使用的缓存抗读、消息队列抗写、数据库分库分表、缓存分片、应用层伸缩、减少竞争、7层负载均衡、三四层负载均衡等,以及 CDN、DNS 轮训等等,这一切都是“分而治之”的思想。

 

 

大数据方向

 

大数据是最近比较火的方向,大小公司都在使用大数据技术。大公司使用大数据分析技术从众多数据中分析出业务模型,得出有价值的结果,来帮助企业制定市场和销售策略,中小公司多数使用大数据出报表和做风控等。

 

所有的大数据技术的根基都来自 Mapreduce、GFS 和 Bigtable 这三篇论文,推荐大家阅读这些论文:

  • MapReduce: Simplifed Data Processing on Large Clusters

  • The Google File System

  • Bigtable: A Distributed Storage System for Structured Data

 

理解了这些基础技术原理,再去学习 Hadoop、HBase、Storm、Spark、Cassandra、MongoDB、ES 等都不是问题。

 

 

 

接口测试常用的工具、平台、框架

 

自动化测试可以快速自动完成大量测试用例,节约巨大的人工测试成本;同时需要拥有专业开发技能的人才能完成开发,且需要大量时间进行维护(在需求经常变化的情况下),所以大部分具有很好开发技能的人员不是很愿意编写自动化用例。但由于软件规模的高速增长,人力资源的逐步稀缺,自动化测试已是势在必行。

 

下面是我精选的8个 Java 测试工具和框架。

 

1. Arquillian

 

Arquillian 是一个基于 JVM 高度创新性和可扩展的测试平台,允许 Java 开发人员轻松创建自动化集成、功能和验收测试。Arquillian 允许在运行时间执行测试。可以用来管理单个或多个容器的生命周期,捆扎测试用例、从属类和资源。它还能够部署归档到容器中,在容器中执行测试、捕获结果,并创建报告。它集成了常见的测试框架,如 JUnit 4、TestNG 5,并允许使用现有的 IDE 发布测试,并且由于模块化的设计使其能够运行 Ant 和 Maven 测试插件。

 

2. JTest

 

JTest 也被称为“Parasoft JTest”,是一款由 Parasoft 公司推出的自动化 Java 软件测试和静态分析软件。JTest包含的功能有:单元测试情况下的生成和执行、静态代码分析、数据流的静态分析、度量分析、回归测试、运行时错误检测。此外,它还具备了同行代码审查流程自动化和运行时错误检测的功能,如竞态条件、异常、资源和内存泄漏、安全漏洞攻击。

 

3. The Grinder

 

The Grinder 是一个 Java 负载测试框架,运行简单,且其分布式测试采用了许多负载注入机器。只要有 Java API,The Grinder 就可以进行负载测试。这包括 HTTP Web 服务器、SOAP 和 REST Web 服务器、应用程序服务器,以及用强大的 Jython 和 Clojure 语言写的包含了自定义协议的测试脚本。

 

The Grinder 的 GUI 控制台允许对多个负载注射器进行监测和控制,并自动管理客户端连接和 Cookies、SSL、代理感知和节流连接。 The Grinder 在 BSD 风格的开源许可下是免费的。 官方网站:Downloading The Grinder

 

4. TestNG

 

TestNG 是一款为 Java 编程语言设计的测试框架,灵感来自于 JUnit 和 NUnit。TestNG 可覆盖范围更广的测试类型,如单元、功能性、端到端、一体化等。它还有一些新的功能,可以使之更强大和更容易使用,如注解、具备大型线程池各种策略的运行测试、多线程的代码测试、灵活的测试配置、参数化数据驱动的测试支持等等。TestNG 支持各种各样的工具和插件,比如 Eclipse、IDEA、Maven 等等。

 

5. JUnit

 

JUnit 是一个为 Java 编程语言设计的单元测试框架。JUnit 为测试驱动开发框架的发展发挥了重要作用。它是现在被统称为 xUnit 的单元测试框架大家庭的组成成员之一,源于 SUnit。在编译时,JUnit 可以连接作为 JAR,用于编写可重复的测试。

 

6. Powermock

 

PowerMock 是一款支持单元测试源代码的 Java 框架。虽然 PowerMock 可以作为 Mocking 框架,例如作为 Mockito 和 EasyMock 的扩展而运行,但它还具备更强大的能力。PowerMock 利用自定义的类加载器和字节码操纵器,来确保静态方法的模拟、静态初始化的删除、函数构造、最终的类和方法以及私有方法。它的主要目的是通过最少的方法和注释来扩展现有的 API,以获得额外的功能。

 

7. Cucumber

 

Cucumber 是 BDD 模式下实现可执行规范(Executable Specifications)的开源工具,但是它的使命并不局限于做自动化验收测试,更加重要的在于其能够在团队成员之间构建统一的交流基础(feature 文件)、规范交流用语(Domain Specific Language)、提高各个利益相关方(Business Stakeholders)沟通效率和效果,从而达到提升产品质量、做出客户期望得到的产品这一最终目标。

 

8. Python Unittest

 

Python 单元测试框架 Unittest,是基于 Java 中流行单元测试框架 JUnit 设计的,其功能强大且灵活,对于熟悉 JUnit 的人来说,掌握 Unittest 很简单。

Unittest 涉及的知识点较多,但核心的只有一部分,本文将介绍它最核心和基础的内容。

 

类似 JUnit,使用 Unittest 编写 Python 的单元测试代码,包括如下几个步骤:

 

  1. 编写一个 Python 类,继承 Unittest 模块中的 TestCase 类,这就是一个测试类。

  2. 在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。在该测试方法中调用被测试代码,校验测试结果,TestCase 类中提供了很多标准的校验方法,如最常见的 assertEqual。

  3. 执行 unittest.main() ,该函数会负责运行测试,它会实例化所有 TestCase 的子类,并运行其中所有以 test 打头的方法。

 

以下是Python Unittest 测试用例执行的关系图。

 

 

我们下面看一些例子,编写如下的 Python文件。

 

(1)手工加载批量用例。

import unittestclass TestOne(unittest.TestCase):
    def setUp(self):
        print '\ncases before'
        pass

    def test_add(self):
        '''test add method'''
        print 'add...'
        a = 3 + 4
        b = 7
        self.assertEqual(a, b)    def test_sub(self):
        '''test sub method'''
        print 'sub...'
        a = 10 - 5
        b = 5
        self.assertEqual(a, b)    def tearDown(self):
        print 'case after'
        passif __name__ == '__main__':    # 1、构造用例集
    suite = unittest.TestSuite()    # 2、执行顺序是安加载顺序:先执行test_sub,再执行test_add
    suite.addTest(TestOne("test_sub"))
    suite.addTest(TestOne("test_add"))    # 3、实例化runner类
    runner = unittest.TextTestRunner()    # 4、执行测试
    runner.run(suite)
AI 代码解读

 

(2)自动加载批量用例。

import unittestimport osclass TestOne(unittest.TestCase):
    def setUp(self):
        print '\ncases before'
        pass

    def test_add(self):
        '''test add method'''
        print 'add...'
        a = 3 + 4
        b = 7
        self.assertEqual(a, b)    def test_sub(self):
        '''test sub method'''
        print 'sub...'
        a = 10 - 5
        b = 5
        self.assertEqual(a, b)    def tearDown(self):
        print 'case after'
        passif __name__ == '__main__':    # 1、设置待执行用例的目录
    test_dir = os.path.join(os.getcwd())    # 2、自动搜索指定目录下的cas,构造测试集,执行顺序是命名顺序:先执行test_add,再执行test_sub
    discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')    # 实例化TextTestRunner类
    runner = unittest.TextTestRunner()    # 使用run()方法运行测试套件(即运行测试套件中的所有用例)
    runner.run(discover)
AI 代码解读

 

 

接口测试的一些问题和实践

 

以 TestNG 为例,它是一套根据 JUnit 和 NUnit 思想而构建的利用注释来强化测试功能的一个测试框架。TestNG 设计涵盖所有类型的测试,如单元、功能、端到端、集成等。学习 TestNG 之前需要先学习编程语言 Java、配置本地 JDK 环境(JDK1.5 版本或以上)和安装 Java 开发工具 Eclipse。

 

接下来,我们一起来学习 TestNG。

 

1. 在 Eclipse 中安装 TestNG。

 

打开 Eclipse Help -> MarketPlace,在搜索框里面输入 TestNG 搜索,然后安装 TestNG 插件。

 

2. 安装成功后,在项目的 package 上右键可以看到 TestNG -> Create TestNG class。

 

这里可以勾选 TestNG 的注解方法,主要注解方式有:

  • @BeforeSuite:被此注解的方法将在所有测试运行之前运行该方法。

  • @AfterSuite:被此注解的方法将在所有测试运行之后运行该方法。

  • @BeforeTest:被此注解的方法,将在测试运行之前运行。

  • @AfterTest:被此注解的方法,将在测试运行之后运行。

  • @BeforeClass:被此注解的方法,将在当前类的第一个测试方法调用之前运行。

  • @AfterClass:被此注解的方法,将在当前类的所有测试方法调用之后运行。

  • @BeforeMethod:被此注解的方法,将在每个测试方法调用之前运行。

  • @AfterMethod:被此注解的方法,将在每个测试方法调用之后运行。

  • @DataProvider:标志着一个方法,提供数据的一个测试方法。

 

至此环境搭建完成,可以开始写测试的 case 了。

 

3. 从一个简单的测试 case 开始入手,代码如下:

package com.pingan.ff.zijin;import org.testng.annotations.Test;import org.testng.annotations.DataProvider;import org.testng.annotations.BeforeTest;import org.testng.annotations.AfterTest;public class NewTest {  @Test(dataProvider = "dp")  public void f(Integer n, String s) {
      System.out.println("第一个参数是"+n+",第二个参数是"+s);
  }  @DataProvider
  public Object[][] dp() {    return new Object[][] {      new Object[] { 1, "a" },      new Object[] { 2, "b" },
    };
  }  @BeforeTest
  public void beforeTest() {
      System.out.println("------------开始测试------------");
  }  @AfterTest
  public void afterTest() {
      System.out.println("------------结束测试------------");
  }
}
AI 代码解读

 

右键 Run As -> TestNG Test,运行后结果如下图所示。

 

 

从测试的结果可以看到执行的顺序是 beforeTest() -> Test() -> afterTest(),同时 Test() 方法从 dataProvider dp 里面接收参数。如下图所示。

 

 

转自公众号:CSDN技术头条

作者:SoftwareLuke

链接地址:https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650784584&idx=1&sn=934fbedff493e622671ef93f6f97cc46&chksm=87faaa7fb08d2369822f988cf8080f285cf2abc50524c9662d96b71140617e3235ae9955adae&mpshare=1&scene=23&srcid=0327GWQGY3J7WLUuOrAOVaHC%23rd

相关文章
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
159 11
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
87 1
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
67 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
35 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
116 15
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
611 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等