如何通过运行一个selenium服务器来运行多个测试用例

时间:2011-08-25 11:39:32

标签: selenium selenium-rc

我有5个测试套件(即多个类),每个套件都有自己独立的server.start()和stop()以及selenium.start()和stop()。现在,我想要的是:我希望我的脚本在不停止服务器的情况下运行所有​​测试套件。换句话说,如果你想说,我需要在一个会话中运行多个测试套件。任何人都可以帮我怎么做?

5 个答案:

答案 0 :(得分: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)

您可能还想研究设置类似于Jenkins http://jenkins-ci.org/的东西,它可以运行不同的测试套件。

答案 1 :(得分:0)

尝试以下方法。我告诉你这个单位Junit。

  1. 创建一个基类,使用注释定义4个方法@ BeforeClass,@ AfterClass,@ Before,@ After。
  2. 在Before / AfterClass中添加服务器启动和停止。在BeforeClass中,检查一次服务器是否已经运行。如果没有那么只开始。
  3. 在@Before和@After中添加selenium start和stop命令。
  4. 在所有测试类中扩展此BaseClass。尝试运行套件。
  5. 如有任何问题,请回复。 最好使用TestNg,因为它可以更灵活地处理和执行测试用例。

答案 2 :(得分:0)

您可以从套件中删除junit和测试套件依赖性 我使用selenium没有任何junit和测试套件 添加一个包含main函数的类,并将函数调用添加到套件的所有类中 像这样定义一个selenium对象 selenium = new DefaultSelenium(serverHost,serverPort,browserStartCommand,browserURL); selenium.start(); 在你的所有测试执行之后 添加selenium.stop();

答案 3 :(得分: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,请查看可以管理您的Server实例的可用Ant任务/ Maven插件。

答案 4 :(得分:0)

添加到讨论中,您可以将Testng框架用于自动化测试。所有测试完成后,您可以在一个类中设置和拆除selenium实例。

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>
相关问题