Можно ли запускать команды в Каталоне?

Каталон популярен в области автоматизации тестирования. Я уже использовал его в нашем проекте, и он работает потрясающе.

Теперь я хочу создать тестовый пример, в котором он открывает терминал (используя mac) и ввести несколько команд для его запуска, например:

cd /documents/pem/key.pem
connect to -my server via SSH@method
sudo su
yum install php7
yum install mysql

1 ответ

Можно запустить Katalon Studio из командной строки.

Здесь есть краткое руководство.

И будет возможно переопределить переменные профиля через режим выполнения командной строки с v5.10 (в настоящее время в бета-версии). Пример, приведенный на форуме Katalon:

Просто передайте параметры в командной строке, используя: -g_XXX = XXX

Ниже приведен пример переопределения переменной URL:

-g_URL=http://demoaut.katalon.com

Вы не одиноки, и с помощью пользовательских ключевых слов вы можете достичь того, что вы хотите. Вот пример, показывающий тест приложения командной строки. Вы можете сделать то же самое, чтобы вызвать любой скрипт командной строки, который вы пожелаете. Подумайте о ключевом слове runCmd или runCmdWithOutput, чтобы получить выходные данные и выполнить для них различные утверждения.

@Keyword
def pdfMetadata(String input) {
    KeywordUtil.logInfo("input: ${input}")

    def csaHome = System.getenv("CSA_HOME")
    def cmd = "cmd /c ${csaHome}/bin/csa -pdfmetadata -in \"${projectPath}${input}\"";
    runCmd(cmd)
}

def runCmd(String cmd) {
    KeywordUtil.logInfo("cmd: ${cmd}")

    def proc = cmd.execute();
    def outputStream = new StringBuffer();
    def errStream = new StringBuffer()
    proc.waitForProcessOutput(outputStream, errStream);
    println(outputStream.toString());
    println(errStream.toString())

    if(proc.exitValue() != 0){
        KeywordUtil.markFailed("Out:" + outputStream.toString() + ", Err: " + errStream.toString())
    }
}

Затем вы можете использовать это в тестовом примере:

CustomKeywords.'CSA.pdfMetadata'('/src/pdf/empty.pdf')

Вот еще одно настраиваемое ключевое слово! Он принимает имя файла и путь, и, если вы не укажете путь, он ищет файл в корневом каталоге проекта. Он экспортирует вывод командного файла в папку batch_reports в папке вашего проекта, вам нужно создать ее заранее.

@Keyword
    def runPostmanBatch(String batchName , String batchPath){


        // source: https://www.mkyong.com/java/how-to-execute-shell-command-from-java/

        String firstParameter = "cmd /c " + batchName;
        String  secondParameter =  batchPath;

        if (batchPath == ""){
            secondParameter = RunConfiguration.getProjectDir();
            }

        try {
            KeywordUtil.logInfo("Executing " + firstParameter + " at " +  secondParameter)
                Process process = Runtime.getRuntime().exec(
                        firstParameter , null, new File(secondParameter));

                StringBuilder output = new StringBuilder();

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));

                String line;

                while ((line = reader.readLine()) != null) {
                    output.append(line + "\n");
                }

                int exitVal = process.waitFor();

                Date atnow = new Date()
                String now = atnow.format('yy-MM-dd HH-mm-ss')
                String report_path = RunConfiguration.getProjectDir() + "/postman_reports/" + RunConfiguration.getExecutionSourceName() + "_" + now + ".txt"
                BufferedWriter writer = new BufferedWriter(new FileWriter(report_path));
                writer.write(output.toString());
                writer.close();
                KeywordUtil.logInfo("postman report at: " + report_path)
                if (exitVal == 0) {

                    println("Success!"); 
                    println(output); 
                    KeywordUtil.markPassed("Ran successfully")                  
                } else {
                KeywordUtil.markFailed("Something went wrong")
                    println(exitVal);
                }



            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }               
    }

Я сделал некоторые исследования. Я не нашел никаких ресурсов или людей, которые ищут то же, что и я. Я думаю, что это официально, нет. Ответ на это, это невозможно.

Другие вопросы по тегам