Prism End-to-End Contract Testing

āļ‚āļ­āđ€āļĨāđˆāļē middleware āļ•āļąāļ§āļ™āļķāļ‡āļ—āļĩāđˆāļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāđ€āļĢāļ·āđˆāļ­āļ‡ quality āđƒāļŦāđ‰ product āđ€āļĢāļēāļĢāļąāļāļĐāļē quality āđƒāļŦāđ‰āļ­āļĒāļđāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļŠāļĄāđˆāļģāđ€āļŠāļĄāļ­ āđ„āļĄāđˆāļžāļĨāļēāļ”āļ‚āļķāđ‰āļ™ production āđ„āļ›āļ­āļĒāđˆāļēāļ‡āļžāļĨāļēāļ”āđ†

Prism āļ„āļ·āļ­

https://meta.stoplight.io/docs/prism/README.md

Prism āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™ Product āļ‚āļ­āļ‡ Stoplight āļ—āļĩāđˆāļžāļąāļ’āļ™āļē collaborative platform āļ™āļ°āļ„āļĢāļąāļš Product āļ‚āļ­āļ‡āđ€āļ„āđ‰āļēāļāđ‡āļĄāļĩāļŦāļĨāļēāļĒāļ•āļąāļ§ āļĨāļ­āļ‡āđ€āļ‚āđ‰āļēāđ„āļ›āļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļ”āđ‰āļ—āļēāļ‡āđ€āļ§āđ‡āļšāļŦāļĨāļąāļāđ€āļ„āđ‰āļēāđ„āļ”āđ‰āđ€āļĨāļĒ https://meta.stoplight.io/arrow-up-right

āļ–āđ‰āļēāđ„āļ”āđ‰āļ„āđˆāļēāđ‚āļ†āļĐāļ“āļēāļ”āđ‰āļ§āļĒāļˆāļ°āļŠāđˆāļ§āļĒāļ‚āļēāļĒāļ‚āļ­āļ‡āļĄāļēāļāļāļ§āđˆāļēāļ™āļĩāđ‰ ðŸĪ‘

āļ•āļēāļĄāļ—āļĩāđˆāđ€āļ„āđ‰āļēāđ‚āļ†āļĐāļ“āļēāļ„āļĢāļąāļš Prism āļŠāļēāļĄāļēāļĢāļ–āļ—āļģ API Mock Server āđāļĨāļ° Contract Testing āđ„āļ”āđ‰ āđāļ•āđˆāđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āđ€āļĨāđˆāļēāļ–āļķāļ‡āđāļ„āđˆ Contract Test āļ™āļ°āļ„āļĢāļąāļš āđ„āļ§āļĄāļĩāđ‚āļ­āļāļēāļŠāļˆāļ°āļĄāļēāđ€āļĨāđˆāļēāļāļēāļĢāļ—āļģ API Mock āđƒāļŦāđ‰āļ­āđˆāļēāļ™āļāļąāļ™āļ„āļĢāļąāļš

Contract Testing āļ„āļ·āļ­āļ­āļ°āđ„āļĢchevron-right

āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĄāļĩ

āļ–āđ‰āļēāđ„āļ”āđ‰āļ­āđˆāļēāļ™ "Contract Testing āļ„āļ·āļ­āļ­āļ°āđ„āļĢāđāļĨāđ‰āļ§" āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļĄāļąāļ™āđƒāļŠāđ‰āļ‡āļēāļ™āļ„āļđāđˆāļāļąāļš API Spec āđ€āļžāļ·āđˆāļ­āđ€āļ­āļēāđ„āļ§āļ•āļĢāļ§āļˆāļŠāļ­āļš Response āļ‚āļ­āļ‡ API āļ™āļ°āļ„āļĢāļąāļš

āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļˆāđ‰āļē Prism āđ€āļ™āļĩāđˆāļĒāļāđ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļŠāđˆāļ™āļāļąāļ™ āđ‚āļ”āļĒāļ—āļĩāđˆāđ€āļˆāđ‰āļē Prism āļāđ‡ support API Spec āļ‚āļ­āļ‡ OpenAPI āļ—āļĩāđˆāđ€āļ›āđ‡āļ™ Standard āļ—āļĩāđˆāđƒāļ„āļĢāđ† āļāđ‡āđƒāļŠāđ‰āļāļąāļ™ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ‚āļēāļ”āđ„āļĄāđˆāđ„āļ”āđ‰āļ„āļ·āļ­āļ•āđ‰āļ­āļ‡āļĄāļĩ file .yaml āļŦāļĢāļ·āļ­ .json āļ—āļĩāđˆāđ€āļ›āđ‡āļ™ OpenAPI āļāđˆāļ­āļ™āļ™āļ°āļ„āļĢāļąāļš

  • OpenAPI āļŠāļ·āđˆāļ­āđ€āļ”āļīāļĄāļ„āļ·āļ­ Swagger Specification āļ™āļ°āļ„āļĢāļąāļš āļ™āđˆāļēāļˆāļ°āļ„āļļāđ‰āļ™āļāļąāļ™āļĄāļēāļāļ‚āļķāđ‰āļ™

  • Prism support OpenAPI v2 āļāļąāļš v3 āļ™āļ°āļ„āļĢāļąāļš

  1. File *.yaml āļŦāļĢāļ·āļ­ *.json āļ—āļĩāđˆāđ€āļ›āđ‡āļ™ OpenAPI

  2. node.js āđāļĨāļ° npm

  3. Web API āļ—āļĩāđˆ Response āđ„āļ”āđ‰āļ•āļēāļĄ spec āļ‚āđ‰āļ­ 1

  4. āļŦāļĨāļąāļ‡āļˆāļēāļāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļ‚āđ‰āļ­ 2 āđāļĨāđ‰āļ§āļ•āļīāļ”āļ•āļąāđ‰āļ‡ prism-cli

āļ—āļģ spec āļ‡āđˆāļēāļĒāđ† āđ„āļ§ test āļŠāļąāļāļ•āļąāļ§āđ€āļ”āļĩāļĒāļ§āļžāļ­

save file āļŠāļ·āđˆāļ­ account.yaml

āđ€āļĢāļīāđˆāļĄāļāļąāļ™āđ€āļĨāļĒāļ”āļĩāļāļ§āđˆāļē

āđ€āļ›āļīāļ” Terminal āļ‚āļķāđ‰āļ™āļĄāļēāļ„āļĢāļąāļšāđāļĨāđ‰āļ§ start Web API āļ—āļĩāđˆāđ€āļĢāļēāļ—āļģāđ„āļ§āļāđˆāļ­āļ™āđ€āļĨāļĒ

āļ•āļēāļĄāļ”āđ‰āļ§āļĒ start āđ€āļˆāđ‰āļē prism āđƒāļŦāđ‰āļĄāļēāļ—āļģāļ‡āļēāļ™āđ€āļ›āđ‡āļ™ proxy āđƒāļŦāđ‰āđ€āļĢāļē format āļ‚āļ­āļ‡ prism cil āđ€āļ›āđ‡āļ™āđāļšāļšāļ™āļĩāđ‰āļ„āļĢāļąāļš

circle-info

āļ•āļĢāļ‡ --errors āļ™āļĩāđ‰āļŠāļģāļ„āļąāļāļ™āļ°āļ„āļĢāļąāļš

āđ€āļĢāļēāļāđ‡āđāļ—āļ™āļ—āļĩāđˆāļ”āđ‰āļ§āļĒ file āļ‚āļ­āļ‡āđ€āļĢāļē āļāļąāļš Web API āļ‚āļ­āļ‡āđ€āļĢāļēāļ—āļĩāđˆāļ—āļģāđ„āļ§āđ‰

āļŦāļĨāļąāļ‡āļˆāļēāļāļāļ” enter āđāļĨāđ‰āļ§āđ€āļˆāđ‰āļē prism āļˆāļ°āļˆāļģāļĨāļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡āđ€āļ›āđ‡āļ™ proxy server āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāđ‰āļ„āļĢāļąāļš defalt āļ„āļ·āļ­ 127.0.0.1:4010 āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ€āļĢāļēāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™

āđ€āļ—āđˆāļēāļ™āļĩāđ‰āļāđ‡āļžāļĢāđ‰āļ­āļĄāđƒāļŦāđ‰āļ—āļ”āļŠāļ­āļšāđāļĨāđ‰āļ§āļ„āļĢāļąāļš āļ•āđˆāļ­āđ„āļ›āļ„āļ·āļ­āđ€āļ›āļīāļ” Program āļ­āļ°āđ„āļĢāļāđ‡āđ„āļ”āđ‰āļ—āļĩāđˆāļ–āļ™āļąāļ”āļ„āļĢāļąāļšāđ€āļ­āļēāđ„āļ§āļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļ API āļœāļĄāđƒāļŠāđ‰āļ•āļąāļ§āļĒāļ­āļ”āļ™āļīāļĒāļĄ Postman āļ™āļąāđ‰āļ™āđ€āļ­āļ‡āļ„āļĢāļąāļš

āđ€āļ§āļĨāļēāđ€āļĢāļĩāļĒāļāļ—āļĩāđˆ Postman āļ›āļāļ•āļīāđ€āļĢāļēāļˆāļ°āđ€āļĢāļĩāļĒāļāđ„āļ›āļ—āļĩāđˆ Web API Server āļ‚āļ­āļ‡āđ€āļĢāļēāļˆāļĢāļīāļ‡āđ† āļ­āļąāļ™āļ™āļĩāđ‰āļāđ‡āđƒāļŦāđ‰āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ€āļ›āđ‡āļ™āđ€āļĢāļĩāļĒāļāļœāđˆāļēāļ™ prism proxy āđāļ—āļ™āļ„āļĢāļąāļš āļŦāļēāļāđ€āļĢāļĩāļĒāļāđāļĨāđ‰āļ§āļ—āļļāļāļ­āļĒāđˆāļēāļ‡ Respones āļ•āļēāļĄ Spec āļŦāļĄāļ”āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‰ Response āļ—āļĩāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡āļĄāļēāļ•āļēāļĄāļˆāļĢāļīāļ‡āļĄāļēāđ€āļĨāļĒāļ„āļĢāļąāļš āđāļ•āđˆāđƒāļ™ case āļ—āļĩāđˆāđ„āļĄāđˆāļ•āļĢāļ‡āļ•āļēāļĄ Spec āļāđ‡āļˆāļ°āđ„āļ”āđ‰ Error āļĄāļēāđ‚āļ”āļĒ Error āļ—āļĩāđˆāđ„āļ”āđ‰āļĄāļēāđ€āļ™āļĩāđˆāļĒ āļĄāļąāļ™āļˆāļ°āļšāļ­āļāļ”āđ‰āļ§āļĒāļ™āļ°āļ§āđˆāļēāđ€āļ—āļĩāļĒāļšāļāļąāļš Spec āđāļĨāđ‰āļ§āļœāļīāļ”āļ•āļĢāļ‡āđ„āļŦāļ™ āđ€āļˆāđ‰āļē prism āđ€āļ™āļĩāđˆāļĒāļĄāļąāļ™āļˆāļ° validate āđƒāļŦāđ‰āļ—āļąāđ‰āļ‡āļ•āļ­āļ™ request āđāļĨāļ° response āđ€āļĨāļĒ

āļāļĢāļ“āļĩ request āđ„āļ›āđāļšāļšāļœāļīāļ”āđ†

āļŠāđˆāļ‡ query string type=deleted āļ‹āļķāđˆāļ‡ spec āļšāļ­āļāđ„āļ§āļ§āđˆāļēāļˆāļ°āļĄāļĩāđāļ„āđˆ active āđāļĨāļ° inactive

āļāļĢāļ“āļĩ request āļ–āļđāļāļ•āđ‰āļ­āļ‡āļŦāļĄāļ”āđāļ•āđˆ response āļ—āļĩāđˆāđ„āļ”āđ‰āļāļĨāļąāļšāļĄāļēāđ„āļĄāđˆāļ•āļĢāļ‡āļ•āļēāļĄ spec

  • āļ–āđ‰āļēāļ”āļđāđƒāļ™ cod āļœāļĄāļ•āļąāđ‰āļ‡āđƒāļˆāđƒāļŦāđ‰ response item āļ—āļĩāđˆ 2 āļĄāļĩ account_type=deleted

  • spec āļšāļ­āļ account_type āļˆāļ°āļĄāļĩāđāļ„āđˆ active āđāļĨāļ° inactive

āļŦāļĨāļąāļ‡āļˆāļēāļ Request āļœāđˆāļēāļ™ Postman āđ„āļ›āđāļĨāđ‰āļ§āļˆāļ°āđ€āļŦāđ‡āļ™ Result āļœāđˆāļēāļ™ Terminal āļ”āđ‰āļ§āļĒāđ€āļŠāđˆāļ™āļāļąāļ™āļ„āļĢāļąāļš

āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļ–āđ‰āļēāđ€āļ›āđ‡āļ™āđāļšāļšāļ™āļĩāđ‰āļ­āļēāļˆāļˆāļ°āđ€āļāļīāļ” blocker āđ„āļ”āđ‰āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļžāļ­āđ€āļˆāļ­āļ§āđˆāļē API āļ—āļģāļ‡āļēāļ™āđ„āļĄāđˆāļ•āļĢāļ‡āļ•āļēāļĄ spec āļĄāļąāļ™āļāđ‡āļˆāļ°āđ„āļĄāđˆ response āđ„āļ›āļ•āļēāļĄāļ—āļĩāđˆ API āļŠāđˆāļ‡āļĄāļēāļˆāļĢāļīāļ‡āđ† āļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļ­āļēāļˆāļˆāļ°āđ„āļĄāđˆāđ€āļŦāđ‡āļ™āļœāļĨāļāļĢāļ°āļ—āļšāļˆāļĢāļīāļ‡āđ† āļ‚āļ­āļ‡ consumer āļ—āļĩāđˆ request āļĄāļē āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļ­āļēāļˆāļˆāļ°āļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰ response āļāļĨāļąāļšāđ„āļ›āļŦāļē consumer āđ€āļĨāļĒāļˆāļĢāļīāļ‡āđ† āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĢāļđāđ‰āļœāļĨāļāļĢāļ°āļ—āļšāļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļŦāļĢāļ·āļ­āļ–āđ‰āļē consumer āļĄāļĩāļ—āļģ unit test āđ„āļ§āļ­āļĒāļđāđˆāđāļĨāđ‰āļ§āđ€āļĢāļēāļāđ‡āļˆāļ°āđ„āļ”āđ‰āđ€āļŦāđ‡āļ™āļ”āđ‰āļ§āļĒāļ§āđˆāļēāđ€āļāļīāļ”āļ­āļ°āđ„āļĢāļ‚āļķāđ‰āļ™āļāļąāļš consumer āļšāļēāļ‡āđƒāļ™ case āļ—āļĩāđˆāļœāļīāļ”āļžāļĨāļēāļ”

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āļ‡āđˆāļēāļĒāđ† āđ€āļĨāļĒāļ•āļ­āļ™ run prism proxy āđ€āļĢāļēāđāļ„āđˆāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡ --errors āđ„āļ›āđāļ„āđˆāļ™āļąāđ‰āļ™āļ„āļĢāļąāļš āļĨāļ­āļ‡āļāļąāļ™āđ€āļĨāļĒ

āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĢāļēāļĨāļ­āļ‡āđ€āļ­āļē Postman āđ€āļĢāļĩāļĒāļāļ”āļđāļ­āļĩāļāļ—āļĩāļ„āļĢāļąāļš

āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāđ€āļĢāļēāđ„āļ”āđ‰ response āļĄāļēāļˆāļēāļ API āļ•āļēāļĄāļˆāļĢāļīāļ‡āļāļĨāļąāļšāļĄāļēāđ€āļĨāļĒāļ„āļ·āļ­āļ—āļĩāđˆāļĄāļĩ account_type=deleted āļ—āļĩāđˆāđ„āļĄāđˆāļ•āļĢāļ‡āļ•āļēāļĄ spec āđāļĨāđ‰āļ§āđ€āļĢāļēāļĨāļ­āļ‡āđ„āļ›āļ”āļđāļ—āļĩāđˆ terminal āļ„āļĢāļąāļš

āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāđ€āļĢāļēāļˆāļ°āđ€āļŦāđ‡āļ™ error description āđāļŠāļ”āļ‡āļšāļ™ terminal āđāļ—āļ™āļ„āļĢāļąāļš

āļ­āļąāļ™āļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ—āļģāđ„āļ§āđāļ„āđˆ 1 API āļ„āļĢāļąāļš āļ•āļēāļĄāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡āđ€āļĢāļēāļāđ‡āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ§āļīāļ˜āļĩāļāļēāļĢāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰āļāļąāļšāļ—āļļāļ API āļ—āļĩāđˆāđ€āļĢāļēāļĄāļĩ āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļŦāļēāļ Frontend āđ„āļĄāđˆāđ„āļ”āđ‰āļ—āļģāļ­āļ°āđ„āļĢāđāļ•āđˆ Backend āļĄāļĩāļāļēāļĢāđ€āļžāļīāđˆāļĄ Featrue āđ€āļĢāļēāļāđ‡āļŠāļēāļĄāļēāļĢāļ– run contract test āđ€āļžāļ·āđˆāļ­āļ”āļđāļāđˆāļ­āļ™āļ§āđˆāļēāļĒāļąāļ‡āļ•āļĢāļ‡āļ•āļēāļĄ Spec āļ—āļĩāđˆāļ„āļļāļĒāļāļąāļ™āđ„āļ§āļ­āļĒāļđāđˆāļŦāļĢāļ·āļ­āđ„āļĄ āļ—āļģāđƒāļŦāđ‰āļšāļēāļ‡āļ„āļĢāļąāđ‰āļ‡āļ­āļēāļˆāļˆāļ°āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡ E2E test āđ€āļĨāļĒāļāđ‡āđ„āļ”āđ‰

āļˆāļšāđāļĨāđ‰āļ§āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ€āļˆāđ‰āļē Prism āļ‚āļ­āļšāļ„āļļāļ“āļ„āļĢāļąāļš

āļ­āļąāļ™āļ™āļĩāđ‰ Prism Tower āļˆāļēāļ Red Alert āđ„āļĄāđˆāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāđ€āļ™āļ·āđ‰āļ­āļŦāļēāđāļ•āđˆāļ­āļĒāļēāļāļĨāļ‡

Reference

Last updated