2012-12-02 114 views
3

我正在考慮爲ActivePivot服務器的不同部分以及最重要的後處理器實施自動化測試。ActivePivot測試策略

由於我在開始的時候,我想更多地瞭解藝術在這一領域的國家,什麼是最好的做法,如果有什麼注意事項,以避免。

如果您有任何經驗,我會很樂意爲您解讀。

乾杯, 帕斯卡爾

回答

0

這是一個很廣泛的問題。 ActivePivot解決方案是一款Java軟件,並繼承了有關軟件項目測試和持續構建的所有最佳實踐。

但這裏有一些基本的ActivePivot切入點:

如何,何時何地寫測試? 編寫junit測試,用maven運行它們,用Jenkins設置連續編譯。

如何embbed一個(真實的,不平凡)ActivePivot單元測試中的實例嗎? 啓動嵌入式Jetty Web應用程序服務器。 ActivePivot Sandbox應用程序就是一個例子(查看com.quartetfs.pivot.jettyserver.JettyServer)。如果您想要針對相同的ActivePivot實例運行一系列單元測試,則可以靜態啓動Jetty服務器(例如,在使用@BeforeClass註釋的靜態方法中)。無論如何,不​​要忘記在測試結束時停止它。

如何編寫性能測試? 在Sandbox項目中,有一個名爲com.quartetfs.pivot.client.MDXBenchmark小MDX基準。這很容易豐富和一個很好的起點。還有com.quartetfs.pivot.client.WebServiceClient說明連接到ActivePivot

如何測試後處理器? 從ActivePivot 4.3.5版本開始,就沒有專門用於隔離後處理器測試的框架。後處理器通過查詢(MDX查詢或GetAggregates查詢)進行測試。當然,如果您的後處理器實現有一些實用方法,那麼可以在標準單元測試中逐個測試這些方法。

0

要測試基於ActivePivot的項目,更簡單的方法是重新使用Spring配置。這可以通過ClassPathXmlApplicationContext完成:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 

這個簡單的測試將檢查你的Spring是否確實是好的。然後,如果你想運行一個查詢,你可以做到以下幾點:

IQueriesService queriesService = context.getBean(IQueriesService.class); 
queriesService.execute(new MDXQuery(someMDX)); 

如果要檢查你的負載層,你可以這樣做:

IStoreUniverse storeUniverse = context.getBean(IStoreUniverse.class); 
for (IRelationalStore store : storeUniverse.values) { 
    assertEquals(hardcodedValue1, store.getSize()) 
    assertEquals(hardcodedValue2, store.search("someKey", "someValue").size()) 
} 

這樣一來,你不需要啓動一個Web應用程序容器,這可能會失敗,因爲它需要某個端口可用(意思是說,例如,您不能同時運行多個測試)。

後處理程序應該是Basic或DynamicAggregation後處理程序,它們很容易測試:關注.init和在ILocations上調用的評估方法。高級後處理器不能被合理地進行單元測試。然後,我建議編寫MDX查詢儘可能簡單,但考慮到後處理器的相關性。

可以使用任何單元測試框架和模擬框架。不過,我建議使用JUnit和Mockito。

0

我會推薦使用Spring4JUnit來啓動上下文。然後,您可以自動裝入bean並直接訪問查詢服務和活動數據透視管理器等內容。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:SPRING-INF/ActivePivot.xml", "classpath:cusomTestContext-test.xml"}) 

... 

@Resource 
private IActivePivotManager manager; 

@Resource 
private IQueriesService queriesService; 

@Test 
public void testManagerOk() { 
    assertNotNull(manager); 
    assertTrue(manager.getStatus().equals(State.STARTED)); 
} 

@Test 
public void testManagerOk() { 
    // run a query with the queries service 
} 
... 

您可以在一個單獨的上下文文件測試定義自定義測試屬性,說用於裝載一組測試數據。