Как создать сервлет / postResults для ядра селена - PullRequest
0 голосов
/ 14 апреля 2009

Я посмотрел документацию и все, что она говорит, это создать сервлет ... С чем?

Есть ли код, который мне нужно использовать для этого сервлета?

Должно ли оно быть пустым и иметь имя postResults?

Есть ли для этого муравей сценарий?

Я не могу найти ничего на сайте Google или Селена, который позволил бы мне в этом.

Спасибо

ОБНОВЛЕНИЕ: я нашел следующий пример

       <servlet>
        <servlet-name>postResults</servlet-name>
        <servlet-class>com.thoughtworks.selenium.results.servlet.SeleniumResultsServlet</servlet-class>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>postResults</servlet-name>
        <url-pattern>/postResults</url-pattern>
    </servlet-mapping>

Однако я не могу найти этот файл Class где-нибудь в моих селеновых банках. У меня есть RC и обычные ядра, но нет игральных костей. Где взять этот файл jar?

Ответы [ 2 ]

1 голос
/ 15 апреля 2009

Если вы используете чистые html / javascript-возможности Selenium, как я, то вы знаете, что вы не получите отчет о результатах при тестировании, если у вас нет установки сервлета postResults где-нибудь, куда вы можете отправить результаты.

Я нашел решение, разобрав плагин fitRunner, чтобы определить, что мне нужно, чтобы получить одну настройку.

Кстати, это решение Java.

http://jira.openqa.org/browse/SEL-102 вы можете скачать здесь zip-файл со всем, что вам нужно, и кучей вещей, которые вам не нужны.

В вашем веб-приложении просто добавьте отображение сервлета, которое вы найдете в web.xml, в ваше веб-приложение. убедитесь, что нижеприведенный пакет, на который вы ссылаетесь,

Затем добавьте следующие jar-файлы, которые вы найдете в zip-файле, в свою библиотеку веб-приложений, если у вас их еще нет.

jstl.jar а также standard.jar

создать два класса your.package.path.SeleniumResultServlet

вставьте в него следующий код.

package com.your.package.path;

import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SeleniumResultsServlet extends HttpServlet {

    private static TestResults results;

    public static TestResults getResults() {
        return results;
    }

    public static void setResults(TestResults testResults) {
        results = testResults;
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        if (request.getParameter("clear") != null) {
            results = null;
            ServletOutputStream out = response.getOutputStream();
            out.println("selenium results cleared!");
        } else {
            forwardToResultsPage(request, response);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                                                throws ServletException, IOException {
        String result = request.getParameter("result");
        String totalTime = request.getParameter("totalTime");
        String numTestPasses = request.getParameter("numTestPasses");
        String numTestFailures = request.getParameter("numTestFailures");
        String numCommandPasses = request.getParameter("numCommandPasses");
        String numCommandFailures = request.getParameter("numCommandFailures");
        String numCommandErrors = request.getParameter("numCommandErrors");
        String suite = request.getParameter("suite");

        int numTotalTests = Integer.parseInt(numTestPasses) + Integer.parseInt(numTestFailures);

        List testTables = createTestTables(request, numTotalTests);

        results = new TestResults(result, totalTime,
                numTestPasses, numTestFailures, numCommandPasses,
                numCommandFailures, numCommandErrors, suite, testTables);

        forwardToResultsPage(request, response);
    }

    private List createTestTables(HttpServletRequest request, int numTotalTests) {
        List testTables = new LinkedList();
        for (int i = 1; i <= numTotalTests; i++) {
            String testTable = request.getParameter("testTable." + i);
            System.out.println("table " + i);
            System.out.println(testTable);
            testTables.add(testTable);
        }
        return testTables;
    }


    private void forwardToResultsPage(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setAttribute("results", results);
        request.getRequestDispatcher("/WEB-INF/jsp/viewResults.jsp").forward(request, response);
    }

    public static class TestResults {

        private final String result;
        private final String totalTime;
        private final String numTestPasses;
        private final String numTestFailures;
        private final String numCommandPasses;
        private final String numCommandFailures;
        private final String numCommandErrors;
        private final String suite;

        private final List testTables;

        public TestResults(String postedResult, String postedTotalTime, 
                String postedNumTestPasses, String postedNumTestFailures, 
                String postedNumCommandPasses, String postedNumCommandFailures, 
                String postedNumCommandErrors, String postedSuite, List postedTestTables) {

            result = postedResult;
            numCommandFailures = postedNumCommandFailures;
            numCommandErrors = postedNumCommandErrors;
            suite = postedSuite;
            totalTime = postedTotalTime;
            numTestPasses = postedNumTestPasses;
            numTestFailures = postedNumTestFailures;
            numCommandPasses = postedNumCommandPasses;
            testTables = postedTestTables;
        }

        public String getDecodedTestSuite() {
            return new UrlDecoder().decode(suite);
        }

        public List getDecodedTestTables() {
            return new UrlDecoder().decodeListOfStrings(testTables);
        }

        public String getResult() {
            return result;
        }
        public String getNumCommandErrors() {
            return numCommandErrors;
        }
        public String getNumCommandFailures() {
            return numCommandFailures;
        }
        public String getNumCommandPasses() {
            return numCommandPasses;
        }
        public String getNumTestFailures() {
            return numTestFailures;
        }
        public String getNumTestPasses() {
            return numTestPasses;
        }
        public String getSuite() {
            return suite;
        }
        public Collection getTestTables() {
            return testTables;
        }
        public String getTotalTime() {
            return totalTime;
        }
        public int getNumTotalTests() {
            return Integer.parseInt(numTestPasses) + Integer.parseInt(numTestFailures);
        }
    }
}

затем создайте класс UrlDecoder в том же пакете

 package your.package.path;
import java.io.UnsupportedEncodingException;import java.net.URLDecoder;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;

    /**
     * @author Darren Cotterill
     * @author Ajit George
     * @version $Revision: $
     */
    public class UrlDecoder {

        public String decode(String string) {
            try {
                return URLDecoder.decode(string, System.getProperty("file.encoding"));
            } catch (UnsupportedEncodingException e) {
                return string;
            }
        }

        public List decodeListOfStrings(List list) {
            List decodedList = new LinkedList();

            for (Iterator i = list.iterator(); i.hasNext();) {
                decodedList.add(decode((String) i.next()));
            }

            return decodedList;
        }

}

В вашем web-inf создайте папку с именем jsp

скопируйте в него файл viewResults.jsp, который находится в zip-файле. скопируйте ctld в / web-inf

перезагрузите сервер

если при попытке загрузить сервлет postResults из selenium вы получите несколько глупых ошибок, попробуйте изменить ссылку taglib в viewResults.jsp, чтобы вместо этого использовать URL-адрес sun из-за различных зависимостей версий, он может не работать. сервлет 1,0 против 2,0 шт.

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

Затем, когда вы запустите тестовый прогон и выберете автоматический вариант на экране селена, у вас будет сервлет postResults, который вы можете использовать и настраивать по своему усмотрению.

Надеюсь, это поможет другим. Наличие способа форматирования результатов теста очень полезно, когда вы пытаетесь создать документацию, а материал, который выходит из почтового индекса с обычным селеном, не дает вам этой базовой функциональности, и вы должны испечь его самостоятельно.

0 голосов
/ 14 апреля 2009

Сервлет postResults полезен в среде непрерывной интеграции, где вы хотите, чтобы результаты теста на селен отправлялись на URL по вашему выбору (я думаю, это настраивается при настройке теста на селен), а затем этот сервер включал результаты селен как часть результатов сборки. Если вы не хотите выполнять какую-либо постобработку результатов теста на селен, вам вообще не нужно настраивать сервлет postResults.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...