Jmeter Включить выполнение внешнего скрипта контроллера, получая пропуск при вызове его из теста TestNG - PullRequest
0 голосов
/ 18 октября 2019

У нас есть сценарий JMeter, имеющий много тестовых элементов, таких как фрагменты теста, включая контроллеры, сэмплеры beanhell, сэмплеры ssh, JDBC и т. Д. Когда мы попытались запустить JMX-скрипт с использованием кода Java (ниже), часть контроллера скрипта пропускается. Мы запускаем тестовые фрагменты, используя контроллеры include, упоминая как абсолютный, так и относительный путь. Пожалуйста, предложите нам, как сделать тестовые фрагменты внутри файла JMX, используя нижеприведенный Java-код.

У нас есть один скрипт JMeter, скажем, xyz.jmx, который вызывается из сценария ABC.jmx jemeter с использованием include controller.

public class Test_INV_TI_001_XML extends BaseClass {
StandardJMeterEngine jmeter = new StandardJMeterEngine();
Summariser summer = null;
JMeterResultCollector results;

@Test()
public void INV_TI_001_XML() throws Exception {
    File JmxFile1 = new File("/Path/To/JMX/File/ABC.jmx");
    HashTree testPlanTree = SaveService.loadTree(JmxFile1);

    JMeterTreeModel treeModel = new JMeterTreeModel();
    JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
    treeModel.addSubTree(testPlanTree, root);

    SearchByClass<ReplaceableController> replaceableControllers =
            new SearchByClass<>(ReplaceableController.class);
    testPlanTree.traverse(replaceableControllers);
    Collection<ReplaceableController> replaceableControllersRes = replaceableControllers.getSearchResults();
    for (ReplaceableController replaceableController : replaceableControllersRes) {
        replaceableController.resolveReplacementSubTree(root);
    }
    HashTree clonedTree = JMeter.convertSubTree(testPlanTree,true);
    jmeter.configure(clonedTree);


    String summariserName = JMeterUtils.getPropDefault("summariser.name", "TestSummary");
    if (summariserName.length() > 0) {
        summer = new Summariser(summariserName);
    }
    results = new JMeterResultCollector(summer);
    testPlanTree.add(testPlanTree.getArray()[0], results);

    jmeter.runTest();

    while (jmeter.isActive())
    {
        System.out.println("StandardJMeterEngine is Active...");
        Thread.sleep(3000);
    }

    if (results.isFailure())
    {
        TestAutomationLogger.error("TEST FAILED");
        Assert.fail("Response Code: " + JMeterResultCollector.getResponseCode() + "\n" + "Response Message: " + JMeterResultCollector.getResponseMessage() + "\n" + "Response Data: " + JMeterResultCollector.getResponseData());
    }
}

}

При выполнении сценария ABC.jmx с использованием приведенного выше кода также должен вызываться xyz.jmx, вызываемый в сценарии ABC.jmx, и успешно выполняться.

1 Ответ

1 голос
/ 21 октября 2019
  1. Если это ваш полный код, он не будет работать, так как вам нужно вызвать JMeterUtils.loadJMeterProperties () function
  2. Также необходимо вызвать JMeterUtils. setJMeterHome () function
  3. Ваши сценарии .jmx и тестового фрагмента относительно чего? В настоящее время JMeter будет искать их в текущей папке user.dir , если сценарии находятся в папке «bin» JMeter - вам нужно вызвать функцию FileServer.setBaseDir () , указывающую на ваш файл. ABC.jmx сценарий и убедитесь, что в путях «Включить контроллеры» указаны относительные пути к этому ABC.jmx

Извлечение Пять способов запуска теста JMeter без использования статьи JMeter GUI для получения дополнительной информации о различных способах запуска тестов JMeter, скорее всего, было бы проще использовать, например, Apache Maven для организации выполнения вашего теста, однако вы сможете найти некоторую информацию о программном выполнении тестов JMeter, какхорошо.

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