簡體   English   中英

從 IDE 中在遠程服務器上運行 TestNG/JUnit 集成測試

[英]Run TestNG/JUnit Integration Tests on Remote Server from within IDE

Inside my IDE (Eclipse or NetBeans, doesn't matter), i have some TestNG testclasses (But my question also refers to remote JUnit tests), which are Integration tests. 這些測試需要集成服務器才能運行,它們不能在本地機器上運行。 他們需要完整的集成服務器環境——不僅僅是 JavaEE 容器相關的東西(=> 沒有 Arquillian 也沒有 JEEUnit)。

現在我希望能夠從我的 IDE (Eclipse) 中運行這些測試——最好使用 TestNG 插件——但是當我啟動它們時,它們實際上應該在遠程集成服務器上運行。

是否可以從我的 IDE 中的遠程服務器上啟動集成測試? 我喜歡在遠程服務器上安裝某種代理來等待測試請求並執行它們的想法。 但正如我所說,如果它從 TestNG 插件內部運行,那就太好了。

我是否需要某種解決方法,例如 Ant 腳本(希望不是)或一些 Maven 魔法? 最佳實踐是什么?

我知道我還可以為我的應用程序創建 Web 服務,然后我可以從本地單元測試中調用它們。 但是我想知道沒有Webservices是否也有可能。

您將如何實現這一點在很大程度上取決於您使用的集成服務器和 IDE,以及您的應用程序是什么。 我假設您使用的是 Eclipse; 我會假設你正在使用Jenkins ,因為 IMO 最容易讓它做你想做的事。

其中大部分將開箱即用。 但是,有一點需要一些額外的工作。

您需要執行以下操作:

  1. 在 Jenkins 中設置一個名為“集成測試”的作業(名稱無關緊要)。 將其配置為運行您希望能夠從 IDE 運行的測試,並允許遠程計算機觸發構建。
  2. 將此作業設為參數化作業,並添加文件參數。 讓我們假設這被稱為“TestingProgram”。 這將是作業將測試的程序。
  3. 使集成測試作業使用 TestingProgram 文件來運行測試。 如果您的程序需要多個文件,則假設這將是一個包含所有必要文件的 zip 文件。
  4. 配置您的 Eclipse 項目以生成集成測試作業所期望的相同文件(我假設這已經發生,因為它可能正在構建您程序的某種 bin 版本)

現在是連接 Eclipse 到 Jenkins 的稍微復雜的部分。 不幸的是,我認為沒有任何預先存在的工具可以完全滿足您的需求。 好消息是使用自定義腳本應該非常簡單。 腳本所要做的就是:

  1. 如果您的程序需要多個文件,而 eclipse 還沒有這樣做,則需要 zip 這些文件
  2. 它需要獲取文件並將其讀入某個變量,然后 base64 對其進行編碼。 有很多庫可以為您處理大部分內容,例如這個 讓我們假設這個文件被讀入一個名為$programFile的變量
  3. 它需要向http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile發送 HTTP 請求

您可以閱讀更多關於使用jenkins 文檔中的參數觸發 Jenkins 遠程構建的信息。

完成這些步驟的腳本幾乎可以是任何東西。 鑒於您希望最終將其合並到 IDE 中,似乎最合乎邏輯的選擇是 ant 腳本或 Eclipse 插件。 兩者都不會太復雜 - ant 腳本只會執行這些步驟,您可以將 ant 腳本導入 Eclipse 項目,該項目專門用於在項目中運行時執行測試 - 並且在項目中運行時,只需添加一個菜單項即可該項目的上述步驟。

注意:實際上有幾種不同的方法可以使用 Jenkins 觸發帶有參數的構建。 例如,您可以執行 POST 請求,使用 json 傳遞參數,如我鏈接到的 jenkins 文檔中所述,使用 Jenkins CLI 等。並非所有文件都使用它們,但它們都可以與參數一起使用非常相似的方式 - 作為自定義腳本中的一個步驟,您將在 Jenkins 上執行遠程構建,並傳遞您要用於測試的文件。 比如我給出的解釋假設測試文件很小; 如果不是這種情況,您可能想要改為執行 POST 請求。 如果您在使用一種方法時遇到問題,應該很容易將其切換為使用另一種效果更好的方法。

In my solution, I will lunch a local JNDI server and add a remote object (an object implement the Remote interface), then you could use the remote object to sync your local IDE and remote server or other place.

不幸的是,我沒有現成的解決方案,但我想我可以給你一些提示,因為我花了一些時間思考這個問題。

我不知道 TestNG 但 JUnit 能夠插入您自己的測試執行器。 我確信 TestNG 具有適當的功能。 所以,找到它並熟悉它。 由於您可以控制調用測試的方式,因此您甚至可以執行其他操作,而不是調用測試用例的方法。 例如調用一些遠程 API 將使測試遠程運行。

顯然,它可以是 web 服務使遠程代理(根據您的建議)在遠程機器上運行測試。 很好,但我更喜歡無代理或半無代理的解決方案。 我是什么意思? 例如,如果您的遠程計算機是 Unix 您可以執行 SSH 或 Telnet 連接並運行命令行。 在這種情況下,您可以創建 mvn 或 ant 腳本,使用 ssh 復制到遠程計算機,然后運行它。 該腳本將運行您的測試。 所以幾乎是少了代理。 您只需要 java 安裝和 SSH 支持。

如果遠程機器是 windows,您可以使用 Telnet 或 WMI。 因此,如果安全不是問題,但您需要跨平台支持,請使用 Telnet。

如果您需要有關 SSH/Telnet 的更多幫助,請隨時與我聯系。

我自己沒有做過(我的測試是本地的),但這里有一些可以工作的東西:

  • Cargo可用於運行服務器並將模塊部署到其中
  • 可以使用 Cactus(相當老的)或 JUnitEE 來運行測試。 在這兩種情況下,您都使用 JUnit 實現測試並遠程運行它們。 另一種選擇是編寫測試以與運行測試並返回報告的服務器上的專用 API 進行交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM