Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Автоматизация Document-Driven Development для проектов с большим API

Dmitry Efimov
October 07, 2018
38

Автоматизация Document-Driven Development для проектов с большим API

Dmitry Efimov

October 07, 2018
Tweet

Transcript

  1. Виды контрактов 1. Контракт на примере (json и моки) {

    “name”: “John” } 2. Контракт на спецификации (json-schema и валидация) { “properties”: { “name”: { “type”: “string” } } }
  2. Сравнение контрактов если сложные кейсы (enum, oneOf), документация получается большая

    { “kind ”: “book” } { “kind ”: “magazine” } более компактная документация { "properties": { "kind": { "type": “string", "enum": [ “book", “magazine"] } } "required": ["kind"] }
  3. Инструменты для контрактов на спецификациях gem ‘json-schema’ https://github.com/ruby-json-schema/json-schema gem 'apivore'

    https://github.com/westfieldlabs/apivore gem ‘fdoc’ https://github.com/square/fdoc gem ‘fitting’ https://github.com/funbox/fitting
  4. Особенности инструментов для контрактов на спецификациях gem ‘json-schema’ gem 'apivore'

    gem ‘fdoc’ сложный синтаксис документирования много ручных настроек для каждого теста gem ‘fitting’ простой синтаксис документирования API Blueprint почти никаких настроек для spec на controllers
  5. gem ‘fitting’ Gemfile: gem ‘fitting' .fitting.yml: apib_path: /path/to/doc.apib spec_helper.rb: require

    'fitting' Fitting.save_test_data запускаете тесты на контроллеры -> получаете файл с логами запросов и ответов -> запускаете rake таски -> получаете отчеты
  6. Fully conforming requests: DELETE /api/v1/book ✔ 200 ✔ 201 ✔

    404 DELETE /api/v1/book/{id} ✔ 200 ✔ 201 ✔ 404 GET /api/v1/book/{id}/seller ✔ 200 ✔ 201 ✔ 404 Partially conforming requests: GET /api/v1/book ✖ 200 ✔ 404 POST /api/v1/book ✖ 200 ✔ 201 ✔ 404 GET /api/v1/book/{id} ✖ 200 ✔ 404 ✔ 200 PATCH /api/v1/book/{id} ✖ 200 ✔ 201 ✔ 404 Non-conforming requests: GET /api/v1/seller ✖ 200 ✖ 201 ✖ 404 GET /api/v1/buyer ✖ 200 ✖ 404 API requests with fully implemented responses: 3 (33.33% of 9). API requests with partially implemented responses: 4 (44.44% of 9). API requests with no implemented responses: 2 (22.22% of 9). API responses conforming to the blueprint: 16 (64.00% of 25). API responses with validation errors or untested: 9 (36.00% of 25).
  7. Check valid json-schemas: path: /spec/controllers/api/v3/users_controller_spec.rb ✔ path: /spec/controllers/api/v3/books_controller_spec.rb ✖ full

    path: /spec/controllers/api/v3/books_controller_spec.rb:191 ✖ request.method POST request.path /api/v3/books request.response.status 200 request.response.body {"status"=>"ok", “result”=> “”} json_schemas: {…} fully_validate: ["The property …”]