/pytest-bdd/tests/step_defs/test_service.py

https://github.com/AndyLPK247/behavior-driven-python · Python · 41 lines · 15 code · 16 blank · 10 comment · 0 complexity · dbb806ecbb3a23321fe78c966f27c193 MD5 · raw file

  1. """
  2. This module contains step definitions for service.feature.
  3. It uses the requests package:
  4. http://docs.python-requests.org/
  5. """
  6. import requests
  7. from pytest_bdd import scenarios, given, then, parsers
  8. # Constants
  9. DUCKDUCKGO_API = 'https://api.duckduckgo.com/'
  10. # Scenarios
  11. scenarios('../features/service.feature', example_converters=dict(phrase=str))
  12. # Given Steps
  13. @given(parsers.parse('the DuckDuckGo API is queried with "<phrase>" using "{fmt}" format'), target_fixture='ddg_response')
  14. def ddg_response(phrase, fmt):
  15. params = {'q': phrase, 'format': fmt}
  16. response = requests.get(DUCKDUCKGO_API, params=params)
  17. return response
  18. # Then Steps
  19. @then(parsers.parse('the response contains results for "<phrase>"'))
  20. def ddg_response_contents(ddg_response, phrase):
  21. # A more comprehensive test would check 'RelatedTopics' for matching phrases
  22. assert phrase.lower() == ddg_response.json()['Heading'].lower()
  23. @then(parsers.parse('the response status code is "{code:d}"'))
  24. def ddg_response_code(ddg_response, code):
  25. assert ddg_response.status_code == code