Performante Tests mit “parallel_tests”

Wie sich die Geschwindigkeit der Testsuite einer Rails-Applikation mehr als verdoppeln lässt.

Was früher™ Compiler-Benchmarks waren, sind heute Performance-Betrachtungen der automatisierten Tests. Die Testsuite einer mit Ruby on Rails entwickelten Applikation wird während der Entwicklung so häufig durchgeführt, dass eine möglichst zügige Ausführung durchaus relevant ist.

Durch Vermeidung von Datenbank-Zugriffen lässt sich am Besten die Performance positiv beeinflussen. Eine andere Möglichkeit besteht darin, leistungsfähigere Hardware einzusetzen bzw. die vorhandene besser auszunutzen.

Ein Multi-Kern-Prozessor brachte bislang kaum Vorteile, da die Specs/Tests hintereinander in einem einzelnen Prozess ausgeführt wurden. Das Rails-Plugin parallel_tests (vormals: parallel_specs) ändert dies, und zwar mit einer eigentlich recht einfachen und naheliegenden Idee: Die durchzuführenden Specs/Tests werden zunächst gezählt und dann auf mehrere Prozesse verteilt ausgeführt, wobei jeder Prozess seine eigene Test-Datenbank zur Verfügung hat. Die Konfiguration ist sehr unproblematisch und schnell erledigt.

Getestet auf zwei verschiedenen Rechnern (einem MacBook mit DualCore-CPU und einem Mac Pro mit QuadCore-CPU) brachte das in meiner auf RSpec basierenden Applikation (mit 600 Examples) folgendes Ergebnis:

  DualCore QuadCore
  MacBook 2,16 GHz Mac Pro 2,66 GHz
rake spec
171 s 128 s
rake spec:parallel[2]
118 s (69%) 76 s (59%)
rake spec:parallel[4]
- 56 s (44%)

Fazit

Auch wenn die Nutzung doppelt so vieler Prozessor-Kerne keine Verdopplung der Geschwindigkeit zur Folge hat, ergibt sich eine deutliche Steigerung – beeindruckend vor allem deswegen, wenn man berücksichtigt, wie einfach dies zu erreichen ist.

Selbst auf einem kleinen MacBook mit zwei CPU-Kernen lohnt sich der Einsatz, auf einem MacPro mit vier Kernen hingegen kann die Geschwindigkeit mehr als verdoppelt werden.

Bis jetzt wurden 2 Kommentare abgegeben

1 grosser schrieb am 25. August 2009 um 20:18

Could you please link to the main branch at http://github.com/grosser/parallel_specs jasonms branch is in disrepair and the main is better maintained/already got some new features (e.g cucumber)

thanks, mg

2 Georg Ledermann schrieb am 25. August 2009 um 21:39

Thanks, the link is updated now.

Hierzu einen eigenen Kommentar abgeben.