Code Smell 272 – API Chain

Use primitive steps to verify API behavior instead of direct requests. Simplify test logic to avoid extra API steps. Don’t use multiple API requests to verify a single operation. If your *GET* operation breaks, you will have many tests failing not relating to the test operation.


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri

Streamline Your API Tests: Less is More

TL;DR: Use primitive steps to verify API behavior instead of direct requests.

Problems

  • Unnecessary API calls
  • Slow test performance
  • Overcomplicated validations
  • Fragile tests
  • Slow feedback loops
  • Maintainability
  • Misleading test results

Solutions

  1. Test primitive outcomes
  2. Validate responses directly
  3. Avoid extra API steps
  4. Simplify test logic

Context

When you test an API, you might fall into the trap of using multiple API requests to verify a single operation.

\ Making a POST and immediately making a GET to check the existence of the resource with the payload is a straightforward solution.

\ This pattern adds complexity and makes your tests slower.

\ Also, if your GET operation breaks, you will have many tests failing not relating to the test GET operation.

\ The epitome of testing is a single broken test for a wrong behavior.

\ Instead of verifying resource creation through a GET and inspecting the JSON response, you can focus on primitive steps.

\ Check if the POST succeeded by validating the status code or checking the resource's existence.

Sample Code

Wrong

Feature: Movie Management
  Scenario: Create a movie and verify
    When I send a POST request to "/movies" with the following data:
      | title     | director          | year |
      | Klendathu | Christopher Nolan | 2010 |
    When I send a GET request to "/movies/Klendathu"
    Then the response status should be 200
    And the response should contain:
      | title     | director          | year |
      | Klendathu | Christopher Nolan | 2010 |
Feature: Movie Management
  Scenario: Create a movie and verify
    When I create a movie with the following details:
      | title      | director          | year |
      | Klendathu  | Christopher Nolan | 2010 |
    Then the movie "Klendathu" should exist in the system
    ## This is a low level existance postcondition
    ## Without relying on a GET request

Detection

  • [x] Semi-Automatic

You can detect this smell when you see test steps that use a GET request to verify the success of a POST.

Tags

  • Testing

Level

  • [x] Intermediate

AI Generation

AI generators often create this smell when generating API tests, defaulting to chaining requests and validating the entire resource, rather than focusing on the operation's outcome.

AI Detection

AI tools can potentially detect this smell with proper instructions.

\ You could train an AI to identify patterns of consecutive POST and GET requests in scenarios and suggest consolidating them into more abstract, primitive steps.

Try Them!

Remember: AI Assistants make lots of mistakes

| Without Proper Instructions | With Specific Instructions | |----|----| | ChatGPT | ChatGPT | | Claude | Claude | | Perplexity | Perplexity | | Copilot | Copilot | | Gemini | Gemini |

Conclusion

Focus your acceptance tests on the direct results of operations like POST.

\ Avoid making a GET request afterward to verify what you already know.

Relations

https://hackernoon.com/code-smell-259-control-your-environment-to-avoid-test-failures?embedable=true

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-vi-cmj31om?embedable=true

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xi-sit35t1

More Info

https://hackernoon.com/fail-fast-philosophy-explained-si963vk9?embedable=true

Disclaimer

Code Smells are my opinion.

Credits

Photo by Dmitriy Demidov on Unsplash


As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.

Dave Parnas

https://hackernoon.com/400-thought-provoking-software-engineering-quotes?embedable=true


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri


Print Share Comment Cite Upload Translate Updates
APA

Maximiliano Contieri | Sciencx (2024-09-30T21:06:18+00:00) Code Smell 272 – API Chain. Retrieved from https://www.scien.cx/2024/09/30/code-smell-272-api-chain/

MLA
" » Code Smell 272 – API Chain." Maximiliano Contieri | Sciencx - Monday September 30, 2024, https://www.scien.cx/2024/09/30/code-smell-272-api-chain/
HARVARD
Maximiliano Contieri | Sciencx Monday September 30, 2024 » Code Smell 272 – API Chain., viewed ,<https://www.scien.cx/2024/09/30/code-smell-272-api-chain/>
VANCOUVER
Maximiliano Contieri | Sciencx - » Code Smell 272 – API Chain. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/09/30/code-smell-272-api-chain/
CHICAGO
" » Code Smell 272 – API Chain." Maximiliano Contieri | Sciencx - Accessed . https://www.scien.cx/2024/09/30/code-smell-272-api-chain/
IEEE
" » Code Smell 272 – API Chain." Maximiliano Contieri | Sciencx [Online]. Available: https://www.scien.cx/2024/09/30/code-smell-272-api-chain/. [Accessed: ]
rf:citation
» Code Smell 272 – API Chain | Maximiliano Contieri | Sciencx | https://www.scien.cx/2024/09/30/code-smell-272-api-chain/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.