2009-07-25 23 views
6

Xin chào, tôi không có bất kỳ giao diện người dùng nào trong ứng dụng của mình. Tôi sẵn sàng phát hành một API RESTful có thể được sử dụng bởi các máy khách khác nhau. Bất kỳ con trỏ nào, tôi nên tiến hành thử nghiệm nó bằng dưa chuột như thế nào? Mọi hành động trong bộ điều khiển chỉ tạo nguồn cấp dữ liệu XML. Bất kỳ gợi ý hay gợi ý nào?Kiểm tra API RESTful bằng Dưa chuột trong giao diện người dùng ít ứng dụng

Trả lời

7

Tôi nghĩ Webrat nhiều hơn những gì bạn cần. Đối với thử nghiệm nguồn cấp dữ liệu XML, bạn không cần trình mô phỏng trình duyệt như Webrat sẽ tải trang và phân tích tất cả đánh dấu (liên kết, biểu mẫu, v.v.) khi bạn thực sự không có bất kỳ trang HTML nào.

Bạn cần phải có thứ gì đó như Curl (http://curl.haxx.se) hoặc Curb (trên rubyforge, là các liên kết ruby ​​cho Curl) hoặc Patron (trên rubyforge).

Các thư viện này có thể tạo tiêu đề yêu cầu theo ý thích của bạn (ví dụ: đặt Loại nội dung, chọn trong số GET PUT POST DELETE HEAD vv) và nhận phản hồi và có thể theo dõi 302 chuyển hướng khi cần.

Trả lời được trả về, sau đó có thể được chuyển thành đối tượng XML và các trình phân tích cú pháp XML có sẵn cho Ruby có thể được sử dụng để kiểm tra đầu ra. Ngoài ra, bạn có thể viết các lớp XMLMapping (trên rubyforge) để chuyển đổi kết quả đầu ra XML thành các đối tượng Ruby và kiểm tra các thuộc tính của chúng vv. Điều này sạch hơn nhiều, IMHO.

+0

Ok Điều đó thực sự hữu ích. Tôi đang sử dụng Curb và XMLMapping để kiểm tra ứng dụng của mình. Nó hoạt động rất tốt, ngoại trừ một số mã bẩn nằm bên dưới. Nhưng tôi đoán tôi có thể có một số mã bẩn trong các bài kiểm tra. – Waseem

2

Khi bạn đã thiết lập các tuyến đường RESTful của mình, bạn sẽ có thể sử dụng Webrat để truy cập các tuyến đường khác nhau. Sau đó, bạn có thể kiểm tra xem mỗi tuyến đường có trả lại XML đáp ứng được kỳ vọng của bạn hay không.

Dưới đây là một bài viết trên blog rằng mô tả làm thế nào để kiểm tra đầu ra XML trong RSpec: Testing XML output

Webrat là một trình duyệt không đầu, mà chỉ đơn giản có nghĩa là bạn có thể mô phỏng một trình duyệt mà không cần phải mở một trình duyệt thực như FireFox trên của bạn máy phát triển. Điều này có nghĩa là bạn có thể chỉ cần nhập một cái gì đó như "truy cập" người dùng/'"vào các bước được xác định của bạn và mô phỏng một người dùng truy cập vào ứng dụng của bạn.

Cuối cùng là Pragmatic book on RSpec (vẫn còn trong phiên bản beta), là tài nguyên tuyệt vời về cách sử dụng Cucumber, Webrat và RSpec cùng nhau và thúc đẩy phát triển ứng dụng của bạn bằng BDD.

+0

Cảm ơn :) Tôi không có bất kỳ phía trước kết thúc ứng dụng của tôi có nghĩa là nếu tôi không có một nút "Delete" có sẵn để tiêu diệt một tài nguyên cụ thể. Bây giờ AFAIK Webrat không cho phép bạn yêu cầu một url cụ thể với một động từ HTTP cụ thể (GET, POST, v.v.). Tôi nên tiến hành vấn đề này như thế nào? Tôi có thể làm điều này dễ dàng với Rspec nhưng nó không hỗ trợ "User Stories" nữa.Đó là một câu hỏi khác trong chính nó. :) – Waseem

+0

Bạn có thể mô phỏng phương thức GET đơn giản bằng cách truy cập một URL cụ thể. Để mô phỏng các động từ PUT hoặc DELETE, bạn có thể sử dụng set_hidden_field "_method", "PUT" hoặc set_hidden_field "_method", "DELETE" trước khi truy cập liên kết. Tôi chưa thử điều này. –

+0

Tài liệu của set_hidden_field cho webrat. Nó nói "nó xác minh rằng một trường ẩn tồn tại trên trang hiện tại và đặt giá trị cho tham số đã cho." Vì tôi không có bất kỳ giao diện người dùng nào cho ứng dụng của mình, tôi không có bất kỳ nút hidden_field hoặc form_field hoặc tương tác nào. Tôi nghĩ rằng tôi cần một cách mà tôi có thể yêu cầu các URL còn lại khác nhau với các động từ HTTP khác nhau. giống như this nhưng có thể được tự động hóa. – Waseem

9

Chức năng visit của webrat chấp nhận http_method làm thông số thứ hai. Bạn cũng có thể kiểm tra api của bạn như trong quy tắc dưa chuột sau:

When /^I restfully delete (?:|the)user "([^\"]*)"$/ do |login| 
    visit(path_to("user \"#{login}\" page"), :delete) 
end 
0

Tôi đã cố gắng để làm điều đó và đã bị mắc kẹt trong một vấn đề lớn với restful_authentication (sử dụng AASM, một trong những mô hình nội bộ của restful_auth có vẻ như) và nhận được giải pháp đó để đăng nhập:

Given /^I am logged in with a new account$/ do 
    login = "test" 
    @current_user = User.new(
    :login => login, 
    :password => 'generic', 
    :password_confirmation => 'generic', 
    :email => "#{login}@example.com", 
    :state => "active" 
    ) 
    @current_user.save 
    x = User.find_by_login(login) 
    x.state = "active" 
    x.save! 

    visit "/login" 
    fill_in("login", :with => login) 
    fill_in("password", :with => 'generic') 
    click_button 
    response.body.should =~ /Logged in successfully/m 
end 

Modularize nó cho tập đoàn kiểm tra sạch hơn, đây là giới thiệu khái niệm tôi tìm thấy.

5

jayzes đã chia sẻ các bước thử nghiệm dưa chuột của mình bằng cách sử dụng Rack :: Test :: Methods, JSONpath, Nokogiri, vv để viết test cho json/xml API, bạn có thể tham khảo và tạo thêm cho các bước của riêng bạn.

https://github.com/jayzes/cucumber-api-steps

Các vấn đề liên quan