Testowanie oprogramowania

Od pewnego czasu myślę o zajęciu się testowaniem oprogramowania. Na razie nie chodzi mi o aplikacje internetowe (może to będzie to dla mnie melodia przyszłości, kto wie?) lecz o desktopowe. Przeczytałem, że do wykonywania testów automatycznych warto stosować któryś z języków skryptowych. No to akurat Ruby pewnie nada się do tego. Szukałem w internecie jakiś prościutkich skryptów, ale takich naprawdę prostych, jak dla początkującej osoby. Np. do przetestowania czy Windowsowy kalkulator działa poprawnie. Niekoniecznie on, może być coś innego, ale pewnie już wyczuwacie o co mi mniej więcej chodzi. W Googlach nic nie znalazłem. Czy możecie mi podać jakieś wskazówki, coś żebym mógł ruszyć z miejsca.

Czemu chciałbyś testować zewnętrzne oprogramowanie? Zazwyczaj testujesz program jeśli go piszesz / piszą w twojej firmie i jesteś testerem. Zewnętrze testowanie wygląda słabiej, jak nie masz dostępu do kodu i nie masz pewności jakie był założenia.

Testować webowe aplikacje jest łatwiej -> spojrzyj na pakiet Selenium.

Paweł

Nie wiem, czy istnieja do tego gotowe narzedzia (skryptowe, w szczegolnosci w Rubym), bo nie znam windowsowego ekosystemu zbyt dobrze (ale wydaje mi sie, ze kiedys o takim skryptowaniu slyszalem), natomiast chyba wiem, jak mozna by do tego tematu podejsc.

Pare lat temu pisalem mini-aplikacje/agenta pod Windows, ktorego celem byla integracja z Quickbooksem. Quickbooks co prawda wystawial oficjalne API (XML-owe) z ktorym mozna sie bylo ‘polaczyc’ (poprzez interfejs COM), ale w pewnym momencie potrzebne mi bylo cos, czego teoretycznie nie dawalo sie zrobic: moc w sposob programowy ‘kliknac’ przycisk w oknie Quickbooksa.

Nie wiem, czy jest to nadal prawda w Windows 7 i nowszych, ale w Viscie, XP i dawniej, dowolna aplikacja mogla wyslac ‘wiadomosc’ do dowolnej kontrolki dowolnego okna w kazdym z dziajalacych programow. Cale API windowsa opiera sie na wysylaniu takich ‘komunikatow’ pomiedzy ‘oknami’ - zazwyczaj w obrebie jednej aplikacji, ale niekoniecznie; przy czym pojecie ‘okna’ jest tu dosc szerokie, kazda kontrolka to tez jest ‘okno’ - ktore moze miec wlasna petle do przetwarzania zdarzen, zajmuje pewien obszar, mozna ja pokazywac i chowac itp.

A skoro tak, to mozna miec narzedzie, ktore - dla Twojego przypadku kalkulatora:

  • znajdzie HWND (id) okna programu ktory Cie interesuje
  • namierzy pole do wprowadzania danych - sa do tego narzedzia, ktore pozwalaja na ‘inspekcje’ struktury dzialajacej aplikacji, ale znajac ID okna ‘glownego’ mozna to rowniez znalezc programowo,
  • znajac ID okna elementu, mozna mu ‘wyslac wiadomosc’ pt. ‘naciskam klawisze’ z dowolna trescia
  • nastepnie wyslac wiadomosc / zdarzenie klikniecia w przycisk
  • i w koncu wyslac wiadomosc ktora zwroci zawartosc pola z wynikiem

Na najnizszym poziomie mozna to robic w C, ale mysle, ze na 95% jest modul do Rubyego ktory te niskopoziomowe komendy opakowuje w skore rubyego.

http://ruby.about.com/od/Automation-and-FFI/ss/Sending-Win32-Keyboard-Messages-with-via-FFI.htm

Jeżeli chodzi o wypowiedź @pawelek, to dziękuję za sugestię dotyczącą Selenium i testowania aplikacji webowych, ale widzę że nie zostałem zrozumiany. Nie chodzi mi o testowanie aplikacji webowych, co podkreślałem w pierwszym poście w tym temacie. Jak już pisałem, chodzi mi o testowanie oprogramowania desktopowego, takiego tworzonego przez programistów w firmach.
@mark, tak to jest mniej więcej to, o czym myślałem. Dzięki.

Ok 3 lat temu próbowałem sterować Outlookiem z poziomu Rubiego. Można to było osiągnąć korzystając z win32 OLE. Działało, można było imitować różne zachowania jak kliknięcie w “Nowa wiadomość”, uzupełnienie pól itp. Jednak było to dość zawodne, losowe faile, “zawieszki” przy najmniejszym odstępstwie od założonej ścieżki. Próbowałem nawet używać IronRuby.
Nie słyszałem by ktoś używać Rubiego do testowania windowsowych aplikacji desktopowych. Może da radę jakoś użyć Cucumbera, tylko nadal musisz mieć coś do interakcji z taką apką.

A czy takie rzeczy można robić w Pythonie? Chociaż wolałbym uniknąć tego języka, bo pomimo zachwalanej prostoty, jakoś mi nie “leży”.

Oczywiście że można :slight_smile:

Hmmm, powiedz jeszcze że Python bardziej się nadaje do tego niż Ruby :wink: ?

Nie wiem czy się bardziej do tego nada, mo sama idea testowania jakiegoś tam oprogramowania w sposób “zewnętrzny” jest mi obca. Ale z drugiej strony, będąc o wiele bardziej Pythonistą niż Rubystą, nie spotkałem jeszcze niczego takiego w Rubym czego nie dało by się zrobić w Pythonie (do tego mając pewnie czytelniejszy kod :wink: bo w np. w railsach za dużo jest dla mnie magii :stuck_out_tongue: )

W tym momencie nie chodziło mi o Railsy, lecz o “czystego” Ruby. Ja się zraziłem do Pythona. Ruby raczej bardziej mi odpowiada.

Ruby i Pythons są dosyć podobne, nie wiem co Cię zraziło do Pythona, ale to raczej kwestia indywidualnego podejścia. Ja nie Cierpię składni typu “C”, co mi nie przeszkadzało pisać projekty do szkoły i w C++, Javie czy C#.

Ogromną przewagą Pythona nad Rubym nie jest to do czego się on nadaje, tylko w w jak wielu dziedzinach jest stosowany z powodzeniem i mnogość bibliotek które są dostępne. Numpy… w sumie całe Scipy i IPython sprawiają że ludzie przerzucają się z R na Pythona, bo w Pythonie jest prościej i szybciej itd… PyQt sprawia, że aplikacje GUI można szybko i sprawnie pisać w Pythonie i wiele osób zamiast męczyć się z C++ czy Javą pisze wieloplatformowe aplikacje w Pythonie. Dzięki Kivy można pisać fajne apki na Androida w łatwy i przyjemny sposób. Można by tak bez końca wymieniać. To jest potęga Pythona, ale to nie znaczy że w Rubym się nie da, tylko pewni trzeba się bardziej napracować i tak jak pisałem, nie spotkałem jeszcze niczego czego nie dało by się zrobić w Pythonie a da w Rubym.

na upartego porównujesz najpier Pythona z Rubym a później piszesz o Railsach, a tego porównać się nie da, mógłbyś porównać Railsy z Django.

Nie na upartego, ale jako odpowiedź na moje wcześniejsze rozważania o Rubim i Pythonie. @sztosz po prostu rozwinął ten temat.

@Merano nie ucinaj cytowanej wypowiedzi w połowie bo traci sens, chodziło mi o to, że @sztosz pisał o Rubym, Pythonie i nagle, że woli Pythona bo w Railsach za dużo magi jest. Jak można Pythona z Railsami porównać, przecież to są dwie zupełnie różne rzeczy.

Te emotikonki i nawias nie są tam dlatego, że kot mi przeszedł po klawiaturze :wink:

Ale jeżeli trzeba to śmiało mogę napisać, że o wiele łatwiej jest się połapać dlaczego i jak coś działa w Django niż w Railsach, bo “explicit is better than implicit” a nie “convention over configuration”. Co nie znaczy że jedno jest lepsze od drugiego tylko co kto woli.

nikt ciebie nie zmusza do pisania w Railsach, możesz wybrać coś lżejszego np. Sinatrę i sam dobierać co chcesz. Jak zobaczyłem jeden projekt w Django (nawiasem mówiąc działający na produkcji), to się załamałem jeśli chodzi o jakość kodu. Nie mówię, że w RoR nie można napisać brzydkiego kodu, ale w Django jest pełna dowolność, więc jeśli chodzi o początkujących to polecam RoR, bo tam mogą szybciej napisać i uruchomić coś co będzie działać.

Ale każdy wybiera to co mu bardziej odpowiada.

To dobrze, bo jest raczej odwrotnie. Większość dyskusji dzisiaj się toczy na temat tego czy w Rails w ogóle jest możliwe pisanie ładnego kodu.