Учим Genie самостоятельно определять путь к class файлам.
В одной из предыдущих статей мы делали запуск скриптов Genie.
Выглядело это так:
GenieScriptsExecutor.ExecuteScript("Path to GenieScript.class");
Выглядит такая запись несколько неудобно. Вообще хардкод - это не очень здорово.Давайте попробуем сделать так, чтобы наш метод сам понимал, где находится класс для запуска.
public
class GenieScriptsExecutor
{
public static void ExecuteScript(Class<?> classname) {
try {
String[] path_arr = {getClassLocation(classname)};
Executor.startExecution(path_arr);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
public static void ExecuteScript(Class<?> classname) {
try {
String[] path_arr = {getClassLocation(classname)};
Executor.startExecution(path_arr);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private
static
String getClassLocation(Class<?> c){
String filename =
c.getSimpleName();
String
path = c.getResource(filename+".class").getPath();
return
path;
}
}
GenieScriptsExecutor.ExecuteScript(SomeGenieScript.class);
Здравствуйте, Дмитрий.
ОтветитьУдалитьНастал день очередного глупого вопроса :)
в приведенном выше коде вылетает ошибка на строку
String[] path_arr = getClassLocation(classname);
"Type mismatch: cannot convert from String to String[]"
можно ли это как-то обойти?
И, наверное, главный вопрос.. можно ли как-то в тестах добавить проверку на подключение genie server и нужного genie script?
Ибо, даже если скрипт джина по каким-либо причинам не может быть выполнен, тест считается успешно пройденным.
Не сталкивались ли вы с подобной проблемой?
дабы решить проблему с выводом ошибки при неправильном подключении джин скрипта, внесла небольшие изменения в ваш парсер:
ОтветитьУдалитьpublic static ShortTestResult getShortExecutionResult(String xml){
ShortTestResult str = new ShortTestResult();
TestResultsModel parsedresult = DeserializeXML(xml);
ArrayList testcases = parsedresult.testCases;
String errorMessages = "";
if (testcases != null) {
for (TestCase testCase : testcases) {
ArrayList testSteps = testCase.testScript.testSteps;
for (TestStep testStep : testSteps) {
String teststatus = testStep.testresults.status;
if(teststatus.equals("Failed")){
str.setExecutionStatus(teststatus);//если хоть один шаг упал, то мы будем считать весь тест упавшим
}
if (testStep.message!=null){ //Собираем все сообщения об ошибках
errorMessages += testStep.message.messagetext +"\n";
}
}
}
} else if (parsedresult.messages != null && parsedresult.messages.message != null) {
Message message = parsedresult.messages.message;
errorMessages += message.messagetext;
str.setExecutionStatus("Failed");
}
str.setMessage(errorMessages);
return str;
}
с объявлением нового класса в testresultmodel:
public static class Message{
@XmlAttribute(name = "message")
String messagetext;
@XmlAttribute(name = "type")
String type;
}
может быть кому-то пригодится :)
Доброго времени суток :) Ну конечно, я ошибся. Метод getClassLocation() возвращает результат String. В Executor же нужно передать массив строк.
ОтветитьУдалитьМожно просто сделать так:
String[] path_arr = {getClassLocation(classname)};
Со второй задачей, вижу, вы справились.