2011-08-25 102 views
0

我有5個測試套件(即多個類),每個套件都有自己單獨的server.start()和stop()以及selenium.start()並停止()。現在,我想要的是:我希望我的腳本在不停止服務器的情況下運行所有​​測試套件。換句話說,如果你想說,我需要在一個會話中運行多個測試套件。任何人都可以幫助我如何做到這一點?如何通過運行一臺硒服務器運行多個測試用例

+0

你正在使用什麼單元測試框架? Junit或TestNG,你目前如何執行你的個案? –

+0

感謝您的回覆。我正在使用Junit框架。目前,我使用TestSuite類來運行測試,但每個測試套件都作爲單獨的服務器運行。 – Rank

回答

0

我真的很想知道你正在使用什麼樣的測試框架,像Varun問的。如果你使用的是Python,你可以看看這個例子,它以_test.py結尾運行任何測試文件。

#!/usr/bin/python27 

import os 
import sys 

failure = False 
f = open('test.log', 'w') 
xmlHeader = """ 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> """ 
f.write(xmlHeader) 

for dirname, dirnames, filenames in os.walk('.'): 
    for filename in filenames: 
     if filename.endswith("_test.py"): 
      filename = "python27 %s/%s" % (dirname, filename) 
    testLine = "Running test: " + filename 
    seperator = "---------------------------------------------------------" 
    print seperator 
      print testLine 
      print seperator 
    f.write("<testsuite name=\"" +testLine + "\">") 
      out = os.popen(filename) 
    outputString = out.read() 
      print outputString 
    f.write("""<system-out><![CDATA[""" + outputString + "]]></system-out>") 
      retval = out.close() 
      if retval: 
       failure = True 
     failString = "FAILURE - test file: " + filename 
     print failString 
     f.write("<failure desc=\"" + failString +"\"/>") 
    f.write("</testsuite>") 
f.write("</html>") 


if failure: 
    sys.exit(1) 

您可能還需要尋找到設立類似詹金斯http://jenkins-ci.org/一些東西,可以運行不同的測試套件。

0

請嘗試以下操作。我正在講這個Junit。

  1. 創建一個基類,您可以使用批註@ BeforeClass,@ AfterClass,@ Before,@ After定義4個方法。
  2. 在Before/AfterClass中添加您的服務器啓動和停止。在BeforeClass中檢查一次,如果服務器已經運行或沒有運行。如果沒有,那麼只能開始。
  3. 在@Before和@After中添加硒啓動和停止命令。
  4. 將此BaseClass擴展到所有Test類中。嘗試運行套件。

在出現任何問題時回覆。 它更好地使用TestNg,因爲它可以更靈活地處理和執行測試用例。

0

您可以從您的套房 我使用硒沒有任何JUnit和測試套件 刪除JUnit和測試套件扶養添加類包含的主要功能,並添加函數調用您的套房 的所有類定義硒對象這樣selenium = new DefaultSelenium(serverHost,serverPort,browserStartCommand,browserURL); selenium.start(); 執行全部測試後 add selenium.stop();

+0

@ Abhinav-我不認爲它是不使用測試框架的好主意。原因是你需要給你寫的每個測試方法添加一個調用。對於小號碼。這很好,但實際上測試案例總是會很大。併爲每個電話寫一個不是一個好方法。你也需要明確地寫出這種方法的報告框架。 –

+0

好吧我認爲你的方法是不同的我正在執行從xml文件使用java反射API我的測試用例,我設計基於硒的自動化套件和使用反射硒調用 –

0

要以編程方式執行此操作,您需要創建一個靜態變量來保存SeleniumServer實例。

public class SeleniumServerManager { 

    private static SeleniumServer seleniumServer; 

    public static void attemptToStartSeleniumServer() throws Exception { 
     if (null == seleniumServer) { 
      seleniumServer = new SeleniumServer(); 
      seleniumServer.start(); 
     } 
    } 
} 

你必須在所有的測試套件來引用此,以確保服務器啓動

public class StackOverflowTest extends TestCase { 

    private Selenium selenium; 

    @Override 
    public void setUp() { 
     SeleniumServerManager.attemptToStartSeleniumServer(); 
     this.selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.stackoverflow.com"); 
     this.selenium.start(); 
    } 

    public void testStackoverflow() { 
     this.selenium.open("/"); 
    } 
} 

如果你不喜歡#attemptToStartSeleniumServer重複呼叫,並使用Ant或者Maven在你的項目中,看看可以管理你的服務器實例的可用Ant任務/ Maven插件。

0

添加到討論中,您可以將Testng框架用於自動化測試。在所有測試完成後,你可以有一個Class將設置和拆除硒實例。

class something{ 
    public static Selenium selenium; 
    public static Selenium globalSeleniumInstance 

@BeforeSuite(alwaysRun = true) 
public void init(){ 
selenium = new DefaultSelenium() 
    globalSeleniumInstance = selenium; 
     selenium.start(); 
} 
@AfterSuite(alwaysRun = true) 
    public void destroy() throws Exception { 
     selenium.stop(); 
    } 

Now for you test class you can 

@Test(groups = {"myWebsite"}, alwaysRun = true) 
public class MyWebsite { 
    private Selenium selenium; 

    @BeforeClass(alwaysRun = true) 
    public void init() { 
    selenium = ResourceManager.globalSeleniumInstance; 
    selenium.windowFocus(); 
    selenium.windowMaximize(); 
    } 

    @Test(alwaysRun = true) 
    public void lookForRecentPosts() throws Exception { 
do something with selenium here 
} 
     } 

so in you testng xml file you can add the classes like these 
<suite thread-count="1" verbose="1" name="Test Automation Suite" 
    annotations="JDK" parallel="false"> 
<test name="Tests" junit="false"> 
classes> 
      <class name="com.test.managerclass" /> 
</classes> 
    </test> 

</suite> 
相關問題