2015-09-09 18 views
0

背景有沒有辦法爲需要很長時間的東西寫一個硒腳本?

我有一個網站,允許公司做廣告。程序的一部分是選擇一個日期來開始和結束廣告。這意味着該廣告應該在其發佈之前一直處於非活動狀態。

我使用的是使用TestNG,Maven和詹金斯Selenium測試運行我的服務器上的無頭測試。這些測試應該涵蓋網站的每個區域,我剛剛達到了廣告,但不知道如何測試廣告。

我的測試需要創建一些廣告,看看它是否在第二天上線,但我不知道如何用硒進行測試。

我可以創建與我的腳本沒有問題的廣告,但不能看到它是否明天上線沒有像一天長線程睡覺愚蠢的東西。

問題

是這種測試可能的解決方法?或者這是Selenium不能處理的東西?或者也許我正在以這種錯誤的方式進行呢?

+1

我在這裏看到兩個測試。 1創建廣告並2「激活」它。使用自動化測試,您應該隨時使用正確的配置或以前的任務來測試這兩件事情。 –

+0

難道你不能在當天創建一個廣告,重新啓動服務器並測試它是否變爲活動狀態?如果該測試成功,則該功能適用​​於任何日期。 –

回答

2

你可以提取now的計算服務

public interface DateSource { 
    Date getNow(); 
} 

在生產這種可以得到當前的日期

public class DefaultDateSource implements DateSource { 
    public Date getNow() { 
     return new Date(); 
    } 
} 

在測試中,你可以有一個可配置的DateSource

public class TestDateSource implements DateSource { 
    private Date now; 

    public Date getNow() { 
     if (now == null) throw new RuntimeException("TestDateSource not setup"); 
     return now; 
    } 

    public void setNow(Date now) { 
     this.now = now; 
    } 
} 

使用您選擇的IOC容器,您可以配置和@InjectDateSource納入您的服務。爲了測試,您可以注入TestDateSource並根據您的需要調整其值。

實例:

public class AdvertisingService { 
    private final DateSource dateSource; 

    public AdvertisingService(DateSource dateSource) { 
     this.dateSource = dateSource; 
    } 

    public boolean isActive(Advert advert) { 
     Date now = dateSource.getNow(); 
     return advert.startDate.before(now) && advert.endDate.after(now); 
    } 
} 
1

我有一個有點類似的情況:我需要測試2點之間的XML消息交換。我寫測試,從A點傳送到B,明明到B點發回消息,A點爲單位我不能在單元測試等測試我所做的就是這樣的:

  1. 你需要編寫2個課程:(1)爲每個日期收集「廣告活動」,並開始廣告。和(2)完成每天完成的所有廣告的課程。

  2. 在「真實」網站中,實現調用上面創建的類的計時器進程。沒有其他的。

  3. 在您的單元測試中(不一定是硒),創建一個具有特定日期的廣告。 「開始」之後的「to」可能是1秒,所以你需要的是線程睡眠1秒或2秒。

HTH

0

硒不會爲你提供的東西出來就當「測試」的方塊,但你可以使用類似Quartz調度,如何使用cron表達式來運行在特定的套房內測試固定時間。文檔here

+0

我使用Maven創建測試包和Jenkins以在我的服務器上運行它們,包括調度。 –

+0

您可以爲Selenium腳本添加Jenkins構建任務,然後從[命令行](http://techieroop.com/run-jenkins-build-from-command-line/#.VfAnyhHvPcs)啓動它,就像一個ProcessBuilder對象,在某個時間由測試確定? (你說,「我的測試需要創建一些廣告,看看它是否在第二天上線」,所以測試應該知道激活日期) – ThreeSidedCoin

3

或者這是硒只是不能處理?

硒可能可以處理它。你必須定期輪詢,以確保Selenium的某些部分不會因爲認爲其他部分已經死亡而決定超時。你可以通過執行一個空的JavaScript腳本來執行此操作(executeScript(""))。不過,我不建議這樣做,因爲在所有...

也許我會對此錯誤的方法嗎?

是的,你是。你應該做的是設計你的測試,以便你而不是必須等待一天,看看邏輯是否正常運行。每當我測試將在未來的最後期限內交付結果的流程時,我確保我有能力在測試中不要求測試暫停的時間超過執行測試絕對需要的時間。有很多方法可以做到這一點,最好的方式取決於你的應用程序的細節,你沒有分享你的問題。有時候重寫配置選項很有效。有時候改變系統如何確定時間的方式很好。有時你需要別的東西。

在測試期間等待的時間是每次運行測試時都會重複的成本。在一個項目的這段時間內,這可能會導致數週的生產力損失。

相關問題