ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: 25 Mär 2014, 15:50 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
In diesem Thread wurde die Frage gestellt, wie man mit Dok's umgehen kann. Ich möchte hier anhand von Faraday einmal zeigen wie man vorgehen kann (könnte man exploratory testing nennen).

Ich bin auf der Suche nach einem Ruby HTTP-Client. Nach meiner Suche mit google und ruby-toolbox bin ich auf Faraday aufmerksam geworden.

Was Faraday in meinen Augen interessant macht, ist der Rack-Based Ansatz und das ich die HTTP-Adapter austauschen kann.

Was ich jetzt gebrauchen könnte, wäre ein REST-Webservice den ich zum Testen benutzen kann,
einen selber schreiben zum Test wollte ich nicht.

Kurzes googel'n hat diese Demo-App zu Tage gefördert.
Sie ist auf Heroku unter http://eve-demo.herokuapp.com/ gehostet. Ideal für meinen Test.

Ich möchte erstmal nur "probieren" ob die Angaben in der Doku stimmen und das machen, was ich mir darunter vorstelle.

Also los:

Erstmal ein Skeleton anlegen



1
2
3
4
5
6
7

> mkdir test_faraday
> cd test_faraday
> rvm --create --versions-conf use 2.1.0@faraday_test
> rvm current
> bundle init
> git init


Nun das Gemfile editieren:



1
2
3
4

# A sample Gemfile
source "https://rubygems.org"
gem "faraday"


Und die gems installieren:



1
2

> bundle


Den ersten "Test" implementieren:

test.rb


1
2
3
4
5
6
7
8
9

require 'faraday'
require 'pp'


response = Faraday.get "http://eve-demo.herokuapp.com"

pp response
pp response.body


Die Datei ausführen:



1
2

bundle exec ruby test.rb


Cool das funktioniert. Erstmal committen, man weiss ja nie



1
2
 
> git add . ; git commit -am "first test"


Ich habe schon mal von Typhoeus gehört, dieses gem kann mehrere Requests parallel ausführen.
Weiter unten im Text steht auch was von "parallel". Faraday sollte das also unterstützen.
Ich schaue mal ins Wiki und sehe, ja da gibt es einen Artikel dazu. Dieser ist jedoch "versteckt"
unter Pages.

Das möchte ich probieren. Also Gemfile anspassen.



1
2
3
4
5
6

# A sample Gemfile
source "https://rubygems.org"

gem "faraday"
gem "typhoeus"


Gems installieren:



1
2

> bundle


Test-File anpassen:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

require 'faraday'
require 'typhoeus'
require 'typhoeus/adapters/faraday'
require 'pp'

conn = Faraday.new(:url => "http://eve-demo.herokuapp.com") do |faraday|
faraday.adapter :typhoeus
end

conn.in_parallel do
response1 = conn.get('/people')
response2 = conn.get('/works')
end

pp response1.body
pp response2.body


Und wieder ausführen:



1
2

bundle exec ruby test.rb


Sch... geht nicht :-( Warum???



1
2

undefined local variable or method `response1' for main:Object (NameError)


Ist doch wie im Beispiel??? Nur eine andere URL. ... AHHH, Variablen Scope ist das Problem.
Schnell anpassen und nochmal.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

require 'faraday'
require 'typhoeus'
require 'typhoeus/adapters/faraday'
require 'pp'

conn = Faraday.new(:url => "http://eve-demo.herokuapp.com") do |faraday|
faraday.adapter :typhoeus
end

response1 = nil
response2 = nil

conn.in_parallel do
response1 = conn.get('/people')
response2 = conn.get('/works')
end

pp response1.body
pp response2.body


Und wieder ausführen:



1
2

bundle exec ruby test.rb


Das scheint auch zu funktionieren. Ob die Requests wirklich parallel waren untersuche ich erstmal nicht.
Mich interessiert mehr, ob alle Adapter das unterstützen. Dazu schaue ich in den Source-Code
des Typhoues
Adapter. Gleich ganz oben steht self.supports_parallel = true. Somit werden nicht alle Adapter diese
Option unterstützen. Ein kurzer Blick auf den Net-Http-Adapter bestätigt meine Vermutung. Dort gibt es
keinen solchen Eintrag und in der Parent-Klasse ist diese Option false.

Was man hat, hat man:


1
2

git commit -am "test support for parallel"


Als nächstes schaue ich mir die Mittelware an und probiere gleich mal den JSON Converter.

Dazu füge ich gem "faraday_middleware" zum Gemfile hinzu und ändere wieder meine Test-Datei.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

require 'typhoeus'
require 'typhoeus/adapters/faraday'
require 'faraday_middleware'

require 'pp'

conn = Faraday.new(:url => "http://eve-demo.herokuapp.com") do |faraday|
faraday.response :json, :content_type => /\bjson$/
faraday.adapter :typhoeus
end

response1 = nil
response2 = nil

conn.in_parallel do
response1 = conn.get('/people')
response2 = conn.get('/works')
end

pp response1.body
pp response2.body


Schön jetzt wird die Response direkt von JSON nach Ruby convertiert.



1
2

git commit -am "test json converter"


Nächsten ToDo's ...

* SSL test, viele API-Requests machen nur mit SSL sinn
* Auth-Test was ist mit Basic Auth usw.
* Parallel test, sind die Request's wirklich parallel?
* Performence, welcher Adapter ist der schnellste?
* Test für post, patch, usw. die üblichen CRUD-Aktionen


Ich hoffe das der Post dem einem oder anderen Hilft.

_________________
Grüße
Jack


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: