Как передать значение / ключевое слово / аргумент в поле поиска веб-сайта при создании Jmeter Script из API с использованием Java? - PullRequest
0 голосов
/ 03 октября 2018

Я уже создал Jmeter Script из API с использованием Java.
Я хочу эмулировать действие, в котором мы ищем значение / ключевое слово / аргумент в окне поиска на сайте электронной коммерции.

Приведенный ниже скриптсостоит из следующих сэмплеров:

  1. Load Url (вызов образца URL-адреса электронной торговли)
  2. Вход в систему (используется AuthManager для использования учетных данных для входа в систему)
  3. Поиск (Поиск значения/ ключевое слово / аргумент в поле поиска примера веб-сайта)

Вот мой фрагмент кода:

package com.blazemeter.demo;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.gui.ArgumentsPanel;
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.gui.LoopControlPanel;
import org.apache.jmeter.control.gui.TestPlanGui;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.protocol.http.control.AuthManager;
import org.apache.jmeter.protocol.http.control.Authorization;
import org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui;
import org.apache.jmeter.protocol.http.gui.AuthPanel;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.threads.gui.ThreadGroupGui;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import java.io.FileOutputStream;


public class JMeterFromAPI {

  public static void main(String[] args) throws Exception {

      String jmeterHome = "Path of Jmeter Home";
      StandardJMeterEngine jmeter = new StandardJMeterEngine();

      //JMeter initialization (properties, log levels, locale, etc)
      JMeterUtils.setJMeterHome(jmeterHome);
      JMeterUtils.loadJMeterProperties("Path of Jmeter Properties Files");
      JMeterUtils.initLocale();

      // JMeter Test Plan, basically JOrphan HashTree
      HashTree testPlanTree = new HashTree();

      // HTTP Sampler - Load URL
      HTTPSamplerProxy LoadUrl = new HTTPSamplerProxy();
      LoadUrl.setDomain("www.samplewebsite.com");
      LoadUrl.setPort(80);
      LoadUrl.setPath("/");
      LoadUrl.setMethod("GET");
      LoadUrl.setName("Load Url");
      LoadUrl.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
      LoadUrl.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

      // Create HTTP Authorization Manager
      AuthManager manager = new AuthManager();
      Authorization authorization = new Authorization();
      authorization.setURL("https://www.samplewebsite.com");
      authorization.setUser("sampleusername");
      authorization.setPass("samepassword");
      manager.addAuth(authorization);
      manager.setName(JMeterUtils.getResString("auth_manager_title")); // $NON-NLS-1$
      manager.setProperty(TestElement.TEST_CLASS, AuthManager.class.getName());
      manager.setProperty(TestElement.GUI_CLASS, AuthPanel.class.getName());

      // HTTP Sampler - Login
      HTTPSamplerProxy Login = new HTTPSamplerProxy();
      Login.setDomain("www.samplewebsite.com");
      Login.setPort(80);
      Login.setPath("/account/login");
      Login.setMethod("GET");
      Login.setName("Login");
      Login.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
      Login.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

      // HTTP Sampler - Search
      HTTPSamplerProxy Search = new HTTPSamplerProxy();
      Search.setDomain("www.samplewebsite.com"");
      Search.setPort(80);
      Search.setPath("/search?q=mobiles");
      Search.setMethod("GET");
      Search.setName("Search");
      Search.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
      Search.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

      // Loop Controller
      LoopController loopController = new LoopController();
      loopController.setLoops(1);
      loopController.setFirst(true);
      loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName());
      loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName());
      loopController.initialize();

      // Thread Group
      ThreadGroup threadGroup = new ThreadGroup();
      threadGroup.setName("Thread Group");
      threadGroup.setNumThreads(3);
      threadGroup.setRampUp(1);
      threadGroup.setSamplerController(loopController);
      threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName());
      threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName());

      // Test Plan
      TestPlan testPlan = new TestPlan("Ecommerce Website");
      testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
      testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());
      testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel().createTestElement());

      // HTTP Request Sampler and Header Manager
      HashTree httpRequestTree = new HashTree();
      httpRequestTree.add(Login, manager);

      // Construct Test Plan from previously initialized elements
      testPlanTree.add(testPlan);
      HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
      threadGroupHashTree.add(LoadUrl);
      threadGroupHashTree.add(httpRequestTree);
      threadGroupHashTree.add(Search);

      SaveService.saveTree(testPlanTree, new FileOutputStream(jmeterHome + "/bin/test.jmx"));

      //Add Summarizer output
      Summariser summer = null;
      String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
      if (summariserName.length() > 0) {
          summer = new Summariser(summariserName);
      }

      // Store Execution Results into a .jtl file
      String logFile = jmeterHome + "/bin/result.jtl";
      ResultCollector logger = new ResultCollector(summer);
      logger.setFilename(logFile);
      testPlanTree.add(testPlanTree.getArray()[0], logger);

      // Run Test Plan
      jmeter.configure(testPlanTree);
      jmeter.run();

      System.exit(0);
  }
}

Итак, я хочу использовать Search Sampler для поиска значения/ ключевое слово / аргумент для окна поиска, приведенного на примере веб-сайта.

1 Ответ

0 голосов
/ 03 октября 2018
  1. Скорее всего, вы не сможете войти, используя Диспетчер авторизации HTTP , так как он предназначен для работы с внешними системами аутентификации, такими как Basic, NTLM и Kerberos .Если вам нужно ввести свои учетные данные в HTML-форму - скорее всего, вам нужно использовать сэмплер HTTP Request и отправить запрос POST с учетными данными.

    Например, этот код:

    HTTPSamplerProxy loginSampler = new HTTPSamplerProxy();
    loginSampler.setDomain("example.com");
    loginSampler.setPort(80);
    loginSampler.setPath("/login");
    loginSampler.setMethod("POST");
    loginSampler.setName("Perform Login");
    loginSampler.addArgument("username", "johndoe");
    loginSampler.addArgument("password", "secret");
    loginSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
    loginSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());
    

    приведет к следующей конфигурации:

    JMeter POST request from API

  2. Что касается поисковых запросов, я ожидаю, что вам нужно придерживаться того же подхода.

В общем случае создание планов тестирования JMeter с использованием API не рекомендуется / не поддерживается, поэтому я бы предложил следующий альтернативный подход:

  1. Запишите свой скелет плана тестирования с помощьюJMeter HTTP (S) Test Script Recorder
  2. Выполните корреляцию если требуется
  3. Проверьте, выполняет ли ваш тест то, что он должен делать:проверка запросов / ответов с использованием Просмотр дерева результатов слушатель
  4. Когда ваш сценарий .jmx готов, используйте JMeter API для программной генерации точно такого же плана тестирования.

PS Более простым способом создания сценариев JMeter без графического интерфейса пользователя является использование инструмента Taurus , где вы можете разработать план тестирования с использованием декларативного синтаксиса на основе YAML.

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