Как запустить несколько тестовых случаев, запустив один сервер Selen - PullRequest
0 голосов
/ 25 августа 2011

У меня есть 5 наборов тестов (т. Е. Несколько классов), каждый набор имеет свои собственные отдельные server.start () и stop (), а также selenium.start () и stop (). Теперь я хочу, чтобы мой скрипт запускал все тестовые наборы без остановки сервера. Если вы хотите сказать другими словами, мне нужно запустить несколько наборов тестов за один сеанс. Кто-нибудь может мне помочь, как это сделать?

Ответы [ 5 ]

0 голосов
/ 19 июня 2012

В дополнение к обсуждению вы можете использовать среду Testng для тестирования автоматизации.Где вы можете иметь один класс, который будет настраивать и удалять экземпляр селена после завершения всех испытаний.

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>
0 голосов
/ 27 августа 2011

Для этого вам нужно создать статическую переменную для хранения экземпляра 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 task / Maven, который может управлять вашим экземпляром сервера.

0 голосов
/ 26 августа 2011

Попробуйте следующее.Это в отношении Junit, о котором я говорю.

  1. Создайте базовый класс, в котором вы определяете 4 метода с аннотациями @ BeforeClass, @ AfterClass, @ Before, @ After.
  2. Добавьте запуск вашего сервераи остановиться в до / после класса.В BeforeClass проверьте один раз, если сервер уже запущен или нет.Если нет, то только запуск.
  3. Добавление команд запуска и остановки селена в @Before и @ After.
  4. Расширение этого базового класса во всех ваших тестовых классах. Попробуйте запустить свои наборы.

Ответ в случае каких-либо вопросов.Лучше использовать TestNg, поскольку он дает вам больше гибкости в обработке и выполнении тестовых случаев.

0 голосов
/ 27 августа 2011

вы можете удалить зависимости junit и test suite из вашего пакета Я использую селен без джунтов и тестов Добавьте класс, содержащий основную функцию, и добавьте вызовы функций ко всем классам вашего набора Определите объект селена, как это selenium = новый DefaultSelenium (serverHost, serverPort, browserStartCommand, browserURL); selenium.start (); после выполнения всех ваших тестов добавить selenium.stop ();

0 голосов
/ 26 августа 2011

Мне бы очень хотелось узнать, какой тестовый фреймворк вы используете, как спросил Варун. Если вы используете 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 / , которое может запускать разные наборы тестов.

...