65.9K
CodeProject 正在变化。 阅读更多。
Home

代码与自动化 - 集成测试 - 最佳实践

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.22/5 (2投票s)

2018年10月29日

CPOL

6分钟阅读

viewsIcon

6237

代码并自动化您的集成测试 - 最佳实践

引言

本文详细介绍了如何调整您的思维模式,并通过TDD、编写和自动化集成测试用例以及构建管道策略,实现开发和交付零缺陷API的可能性。

在项目中,我们总是讨论代码质量,因此我们会使用FindBug、SonarQube等各种工具扫描代码,编写单元测试用例(至少80%的覆盖率),编写集成测试用例,应用性能分析等。

我们做所有这些设置,目标是为了尽可能地实现更少的缺陷和高质量的交付物。对吧?

现在,即使有了这些代码质量门,我们仍然会发现缺陷,一些根本不应该存在的 H A K I D E S I G N E D 缺陷,例如与契约相关的问题、集成问题、一些由于负载/性能引起的问题、一些由于内存问题引起的问题等,而且这些确实会发生!

但是为什么呢?根据我目前的经验,可能由于以下因素:

问题陈述

  1. QA在后期才介入。通常,他们会在您看到代码集成并在本地至少能正常工作,并准备部署到CIT或SIT时才开始介入。
  2. 在**开始**时,对编写集成测试用例的关注较少。
  3. 集成测试用例的自动化。
  4. 当缺陷出现时,更正/更新集成测试用例需要时间,因为我们是在后期才引入集成测试用例!
  5. 负载和性能测试在后期才开始。
  6. 应用程序性能分析在测试人员报告问题后才开始。

您可能还有更多要补充的观点,事实上,您可能已经及时解决了其中一些问题,但总的来说,这就是我们通常看到的情况!

为了找到上述6个问题的解决方案,请阅读下面的方法以及我在示例项目代码中使用的框架,以实现这一目标。我相信当您阅读下面的内容时,您会很容易地将解决方案与上述问题对应起来。

解决方案方法 - 编码和自动化集成测试用例

一旦您的API契约准备就绪(可能草稿也很完美,因为设计会随着您的进展而演变,所以不要等待!):

  1. 在**开始**时就让QA参与进来,让他们像开发人员一样熟悉API契约。
  2. 为每个API**创建两个项目**。
    1. **“API构建”** - 实践TDD并包含单元测试的API契约实现项目。由开发人员负责。
    2. **“API集成测试”** - 包含集成测试用例的项目。
      此项目的JSON部分将由QA负责,JAVA部分将由开发人员负责。
      您将在下面看到,QA如何从第一天开始就参与编写集成测试用例!
      Java开发人员将专注于模拟外部API调用和系统边界(当外部API或系统尚未准备好集成时)。之后,您只需切换相同的测试用例,以针对边界系统/API的实际测试环境运行。
  3. 为每个API**设置两个Jenkins构建作业**(“API构建”和“API集成测试”),因为我不希望我的API构建项目因API集成测试项目失败而失败,因此进行了分离。有道理吗?
  4. **并行开发这两个项目** - 显而易见,API集成测试项目将更快地完成基本集成测试用例,因此最终您将在Jenkins构建上构建TDD。
  5. **快速失败方法** - 为API集成测试项目安排Jenkins构建(先每日,然后每小时)。最初,您会在API集成测试项目上看到更多失败,因为“API构建”仍处于开发模式。这就是快速失败方法的初衷!
  6. **感觉良好** - 随着“API构建”项目开发的进展,您将在“API集成测试”项目中看到更多测试通过。对此感到高兴!请务必。
  7. **编写性能测试用例** - 一旦您在“API集成测试”构建上看到一些稳定性,立即让您的QA参与编写**性能测试用例场景**。
    通过我在示例GitHub代码中使用的框架,使用JSON以最简单的方式编写性能测试用例非常容易,而且QA可以非常出色和快速地完成。他们只需要NFR!
  8. **引入集成测试套件** - 现在是时候编写各种测试套件,以便将逻辑相关的功能一起独立测试。考虑创建各种测试套件,例如:
    1. **基于功能的测试套件** - 例如 `Verify-ALLGET-Operations-TestSuite`、`Verify-ALLPOST-Operations-TestSuites` 或 `Verify-AccountCreationJounery-TestSuite`,这可能涉及账户创建、获取新创建的账户详情、测试账户创建过程中的400、404、500情况等。
    2. **基于性能的测试套件** - 例如 `Verify-GradualLoad-ALLGET-Operations-TestSuite`(逐渐增加负载,间隔5秒、2秒、0.2秒等)、`Verify-ParallelLoad-ALLGET-Operations-TestSuite`(并行增加负载 - 100秒内100个请求,即每个请求间隔1秒,循环两次,意味着200个并行请求)。
  9. **现在在性能测试上再次快速失败!** - 在API集成测试项目的负载测试套件中看到更多失败。修复API构建项目中的问题并减少失败。
  10. **在性能测试上再次感觉良好** - 随着您修复问题,您将肯定会在应用程序的性能方面看到更多的信心。
  11. 向API集成测试项目添加越来越多的测试,再次失败,再次感觉良好,并保持其运行!

Using the Code

我探索了一种使用开源框架编写集成和性能测试用例的有效且高效的方法。请关注详细信息。

我使用**Spring Boot、Spring Data、H2内存数据库和Maven**开发了一个非常简单的REST API。

从我的GitHub账户克隆示例项目:https://github.com/BeTheCodeWithYou/SpringBoot-ZeroCode-Integration

克隆 -> https://github.com/BeTheCodeWithYou/SpringBoot-ZeroCode-Integration.git

克隆后,进入您的本地仓库并运行以下命令:

mvn clean install

/target文件夹中检查测试结果。

运行应用程序

Java -jar SpringbootRestInMemoryDB-1.0.0-SNAPSHOT.jar.jar

代码演练

一旦您将项目导入IDE,它将看起来像下面这样。高亮显示的是与集成测试相关的代码。就这些,很简单!

Project Structure

  1. 将依赖项添加到您的pom.xml
    <dependency>
    <groupId>org.jsmart</groupId>
    <artifactId>zerocode-rest-bdd</artifactId>
    <version>1.2.6</version>
    <scope>test</scope>
    </dependency>

    请参阅ZeroCode Maven Central上可用版本的列表。

  2. src/test/java - 以最快的方式组织集成测试用例!

    test suite

    1. /integrationtests - TestGetOperations.java

      如您所见,您只需提供JSON文件位置,其中包含实际的测试用例和断言,这就是我在上述解决方案方法第2b点中提到的QA将创建的JSON。您将在GitHub的README.md中看到关于`@TargetEnv`和`@RunWith`的所有详细信息。

      IntegrationTest - TestGetOperations

    2. /testconfig - 运行spring应用程序的自定义类。您只需在您的spring主类中编写`start`方法。

      E2ERunner

      带有`start`方法的Spring主类,由上面的`E2eJunitRunner`调用

      spring main class

    3. /testsuite - 这将运行整个测试套件,即选择“resources/integration_tests”文件夹及其子文件夹下的所有测试。

      如您所见,`@EnvProperty`在这里非常有趣。它允许您在不更改任何代码的情况下,针对多个环境运行测试套件。所有详细信息都在GitHub的README.md文件中。

  3. src/test/resources - 以JSON格式为您的API端点编写带断言的测试用例。
    响应体、标头、自定义响应标头等的断言有多种变体可用。

    项目中的一个示例(/reintegration_tests/get/get_new_parkrunner_by_parkrunid_test.json)如下所示。您可以看到请求和响应体可以非常容易地重用。

    JSON test case

  4. 报告 - 从/target文件夹查看您的测试报告。报告非常具有交互性。

    dashboard report

    dashboard report 2

感谢您的时间,希望您能发现这篇关于开发API最佳实践的文章有所帮助。

请随时提供评论和建议,以改进此最佳实践。

© . All rights reserved.