Jakich narzędzi można użyć do automatyzacji aplikacji desktopowych, działających w systemie Windows (Windows Forms, WPF)?
Na szczęście istnieje wiele rozwiązań, dzięki którym pisanie testów automatycznych może być całkiem skuteczne. Poniżej kilka propozycji. Większość z nich jest darmowa – poza licencją na Visual Studio (w przypadku pierwszej grupy, opartej o .NET Framework lub rozwiązań Microsoftu).
Zapraszam do lektury:
Narzędzia z grupy .NET:
- Microsoft UI Automation (znane również jako UIA).Przykładowe testy używające UIA będą miały namespace: System.Windows.Automation.
Garść linków z przykładowym kodem: - Microsoft Coded UI Tests – rozbudowane narzędzie oparte o Microsoft UI Automation i wiele innych technologii, dzięki czemu umożliwia m.in. testowanie aplikacji Silverlight, Windows Forms czy WPF. Możliwe jest zarówno pisanie testów ręczne, jak i nagrywanie testów i na tej podstawie generowanie kodu w C#. Niestety wymaga Visual Studio w wersji Ultimate lub Premium.
Przykładowe testy używające Coded UI będą miały namespace: Microsoft.VisualStudio.TestTools.UITesting.
Trochę linków na ten temat:- http://www.codeduitutorial.com/ – ogólny tutorial
- https://msdn.microsoft.com/en-us/library/dd286726.aspx#VerifyingCodeUsingCUITCreate – tutorial na MSDN
- http://www.evoketechnologies.com/blog/getting-started-coded-ui-automation-tool/ – tutorial – getting started
- https://rburnham.wordpress.com/2011/03/15/bdd-ui-automation-with-specflow-and-coded-ui-tests/ – specflow i codedUI
- http://stackoverflow.com/questions/5620406/what-is-the-difference-between-using-system-windows-automation-and-microsoft-visu – dyskusja na temat Windows Automation UI
- http://stackoverflow.com/questions/4909206/microsoft-ui-automation-library-vs-coded-ui-test – dyskusja: UI Automation kontra CodedUI
- TestStack White Framework. Mój wybór. Świetny framework opensource do testów aplikacji desktopowych, podobny nieco do Selenium. White wymaga .NET Framework w wersji 4.0. Świetnie sprawdza się solo, a także w razie potrzeby połączenia testów aplikacji webowej z aplikacją desktopową. Wystarczy do projektu w Selenium dołączyć pliki .dll White i można korzystać z funkcjonalności oferowanych przez obydwie biblioteki.
Linki:- http://teststackwhite.readthedocs.io/en/latest/ – dokumentacja (White przeszło rebranding i wiele linków, na które natknęłam się w sieci, jest nieaktualnych)
- http://teststackwhite.readthedocs.io/en/latest/UIItems/ – kto jest kim? Czyli które kontrolki odpowiadają którym klasom w White.
- http://white.teststack.net/docs/getting-started – jak zacząć z White?
- https://github.com/TestStack/White – źródła projektu. Przydają się w wielu sytuacjach.
- http://codoid.com/white-framework-cheat-sheet/ – bardzo fajne przykłady konkretnego użycia – wykonywanie zrzutów ekranu, operowania na poszczególnych kontrolkach
- http://www.codeproject.com/Articles/289028/White-An-UI-Automation-tool-for-windows-applicatio – tutorial…
- https://www.joecolantonio.com/2012/11/26/getting-started-with-white-netwpf-automation-framework/ – kolejny tutorial…
- http://www.dreamincode.net/forums/topic/322108-c%23-teststackwhite-for-beginners/ – i jeszcze jeden tutorial.
- http://enterprisecraftsmanship.com/2015/09/22/coded-ui-vs-white/ – ciekawe porównanie CodedUI kontra White. Co ciekawe, White wygrywa pod względem wydajności.
- Windows Automation API – zbudowane na COM, „wymaga dużego doświadczenia w programowaniu w C”.
- Twin – framework stworzony w eBay, oparty o Selenium WebDriver.
Link: https://code.google.com/archive/p/twin – na ten moment wygląda raczej na projekt archiwalny. - Winium.Desktop – kolejna propozycja z rodziny Selenium WebDriver, dla aplikacji WPF i WinForms. Testy można pisać w C#. Co istotne, projekt jest żywy i wciąż się rozwija (co pewnie jest spowodowane rozwojem bliźniaczego rozwiązania Winium dla testowania WindowsPhone).
Link: https://github.com/2gis/Winium.Desktop
Narzędzia do automatyzacji aplikacji desktopowych z nieco innym podejściem:
- Sikuli. Ciekawe narzędzie, w którym programuje się w sposób graficzny. Opiera się na wykonywaniu zrzutów ekranu i sprawdzaniu, czy zadany fragment screena jest widoczny na ekranie. Możliwe jest także użycie mechanizmu OCR (rozpoznawania tekstu z obrazu). Plotki mówią, że ktoś tego używa 😉
- AutoIt. Skryptowy język programowania stworzony do automatyzacji i wszelakich skryptów. Jako typowy język skryptowy umożliwia automatyzację różnych procesów (kopiowanie plików, instalacje softu, pingowanie, symulacja klawiatury, myszy i wiele innych), a we współpracy z biblioteką UI Automation pisanie automatycznych testów GUI. Skrypty można pisać w edytorze SciTE, który podpowiada składnię. Dużo przykładów można znaleźć na forum.
- https://www.autoitscript.com/forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/#comment-1105548 – przykłady z użyciem UIAutomation
- https://www.autoitscript.com/forum/topic/164226-get-all-windows-controls/ – przykład – jak pobrać wszystkie kontrolki widoczne w oknie.
- Robot Framework + AutoIt + Python. Ciekawe połącznie, zgrabnie omijające użycie rozwiązań Microsoftu.
„Inspektory”
Poza narzedziami umożliwiającymi pisanie testów, niezbędne są także „inspektory”, umożliwiające odnajdywanie identyfikatorów kontrolek w testowanej aplikacji:
- Snoop Wpf – http://snoopwpf.codeplex.com/
- CodedUI – wyszukiwarki są wbudowane.
- Inspect – świetne narzędzie Microsoftu z Windows SDK („Windows SDK for Windows 7”). Jak dotąd najlepiej poradziło sobie z testowaną przeze mnie aplikacją – https://msdn.microsoft.com/en-us/library/dd318521(v=vs.85).aspx
Dodatkowo rozwiązania płatne do automatyzacji aplikacji desktopowych:
- Test Automation FX.
- TestComplete.
- HP Quick Test Pro.
- Telerik Test Studio.