Если вы используете чистые 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, который вы можете использовать и настраивать по своему усмотрению.
Надеюсь, это поможет другим. Наличие способа форматирования результатов теста очень полезно, когда вы пытаетесь создать документацию, а материал, который выходит из почтового индекса с обычным селеном, не дает вам этой базовой функциональности, и вы должны испечь его самостоятельно.