Luboš Račanský
26.4.2010

JUnit anotace @AfterFailure



Na automatické testování GUI našeho produktu Orinoco používáme framework Selenium. Pro identifikaci a opravu chyby je často klíčové vědět, co uživatel(respektive selenium test) v okamžiku chyby viděl. Selenium umí uložit snímek obrazovky, ale jak definovat okamžik, kdy ho má vytvořit? Nechtěli jsme mít přesně definované, které obrazovky má pokaždé ukládat. Naopak jsme chtěli snímek jen v případě, když Selenium test selže. A k tomu právě lze využít vlastní anotaci @AfterFailure

Na začátku byla jasná představa: ukládat snímky obrazovky, pokud Selenium test selže. Zbývalo jen doplnit metodu Selenium#captureScreenshot(String) na správné místo. Narazil jsem na zajímavý článek Capture Screenshots of Selenium Failures, který popisuje, jak anotaci @AfterFailure a vlastní Runner naprogramovat. Pozor na pořadí anotací! Řešení popsané ve zmiňovaném článku volá nejprve metodu anotovanou @After a poté teprve @AfterFailure. To samo o sobě není problém, pokud stejně jako my v metodě anotované @After nevoláte metodu Selenium#stop(), která zavírá prohlížeč. To pak vám je získaný snímek obrazovky k ničemu. Rešení je jednoduché, stačí v runneru jen prohodit volání metod v metodě #withAfters(FrameworkMethod, Object, Statement).

@Override protected Statement withAfters(FrameworkMethod method, Object target, Statement statement) {
  statement = withAfterFailures(method, target, statement);
  
  return super.withAfters(method, target, statement);
} 

Věřím, že vám snímky v případě selhání Selenium testů ušetří čas při opravování bugů. Edit JUnit od verze 4.7 má svoje řešení jménem TestWatchman.

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • Miroslav Hruz

    Lubosi, jsem rad ze se dari!