Как проверить JSON API? - PullRequest
       91

Как проверить JSON API?

6 голосов
/ 24 октября 2011

Я собираю JSON API, который может или не может быть построен с Rails. Я хотел бы иметь возможность проверить, что JSON API ведет себя как ожидается от тестирования от тестового клиента, который общается только HTTP.

Например, тестовый клиент отправит запрос на указанный URL-адрес на тестовый сервер, а затем убедитесь, что ответ представляет собой строку JSON, равную к тому, что ожидается от спецификаций. Ответ также может быть HTTP код ответа, такой как 401.

В настоящее время я запускаю тесты с QUnit и jQuery.ajax. Это работает, но Мне интересно, есть ли лучший вариант. Кто-нибудь еще сделал что-то вроде этого?

Спасибо!

Ответы [ 10 ]

6 голосов
/ 29 октября 2011

Любой язык с приличной библиотекой HTTP и библиотекой JSON должен подойти.Просто выберите ваш любимый язык и рамки тестирования и продолжайте.Я бы, вероятно, использовал RSpec и Rack :: Test , особенно если API будет реализован в Ruby, но вкусы разные.

Редактировать: Вы упомянули, что хотите запускать тесты вне сервера.Если вы уверены в этом, используйте, например, Net :: HTTP вместо Rack :: Test.

3 голосов
/ 02 ноября 2011

Обычно API - это штатные контроллеры / действия. Таким образом, вы можете проверить эти действия как обычный контроллер внутри серверного приложения. Вот как я тестирую свои действия API:

describe Api::AccountsController do
  describe "GET :index" do
    it "should be success" do
      do_get
      response.should be_success
    end

    it "should return list of accounts" do
      5.times{ Factory :account }
      do_get
      JSON.parse(response.body).size.should == 5
    end

    it "should return id, name and description of each account" do
      account = Factory :account
      do_get
      result = JSON.parse(response.body).first
      result['account']['id'].should == account.id
      result['account']['name'].should == account.name
      result['account']['description'].should == account.description
    end

    def do_get
      get :index, :format => :json
    end
  end
end
2 голосов
/ 04 ноября 2011

Проверьте библиотеку запросов Python.Я использовал его только для этой цели, и это потрясающе.

http://docs.python -requests.org / en / latest / index.html

1 голос
/ 04 ноября 2011

Я работал над JS API для Rails и создал целый набор тестов, используя QUnit и jQuery .Я был очень доволен конечным результатом, моей целью было тщательно протестировать API, и эта комбинация инструментов была всем, что мне было нужно .

Я работаю над новым проектом, который использует Jasmine , немного более информативно в том, как вы пишете тесты (что радует бизнес-аналитиков), но конечный результат был почти таким же, как QUnit.

0 голосов
/ 24 января 2014

Я сделал это!Вот как это сделать с помощью Vanilla Rails.Обратите внимание на другой принимаемый тип MIME.Вы можете проанализировать JSON, если хотите.Сравнение как строки было достаточно.

  test "vote comment up" do
    # @request.headers["Content-Type"] = "application/json"
    @request.headers["Accept"] = "application/javascript"
    post :up, {post_id: 1, id: 1}, {user_id: 5}
    assert_response :success
    assert_equal @response.body, '{"error":true,"errorPath":"/users/5/balance","userVotes":1,"totalVotes":0}'
  end

Если вы хотите протестировать во время разработки, я использую Advanced Rest Client Chrome Extension .

0 голосов
/ 04 ноября 2011

http://www.soapui.org/

инструмент функционального тестирования.

0 голосов
/ 02 ноября 2011

Просто напишите некоторые спецификации с помощью Cucumber и / или RSpec, чтобы подключиться к вашему приложению и проверить вывод. Не нужно перетаскивать в него JQuery.

0 голосов
/ 01 ноября 2011

Один из способов сделать это - тестирование контроллера с использованием rspec

describe PersonApiController 
  # GET /person/1.json
  it "should respond with a person" do 
     person = Person.create(:name => "scott")
     get :show, :id => person.id, :format => 'json'
     response.should be_success
     response.body.should have_selector('name', :content => person.name)
  end
end 

Если вы хотите стать еще интереснее, вы можете поделиться клиентским API через плагин / гем между вашим клиентским кодом и кодом вашего сервера, а затем инициализировать его с помощью json, например

person_client = PersonClient.new(response.body)
person_client.name.should eql 'scott'
0 голосов
/ 31 октября 2011

Я полностью согласен с @mpartel.

Вероятно, вам понадобится набор модульных тестов (без сложности HTTP) для проверки логики вашей реализации.Пройдя по этому пути, вы обнаружите, что написание тестов на одном языке принесет пользу.

Например, если вы напишите это в Rails (и будете использовать Rack :: Test), вы также сможете выполнить модульное тестирование множества случаев в более простой среде Test :: Unit (или RSpec).

0 голосов
/ 29 октября 2011

Кажется, что некоторые нашли успех с огурцом (проверьте этот похожий вопрос)

Каков рекомендуемый метод тестирования API-интерфейса JSON-клиент?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...