понедельник, 20 июня 2016 г.

Custom Sampler in Jmeter

Custom Sampler in Jmeter


Иногда при создании тест планов в Jmeter, нужно кастомизировать определенные запросы.Вариантов для этого достаточно много,можно использовать BeanShellSampler,JSR223 Sampler,Java Sampler или создать свой собственный.

Наверное один из самых простых вариантов(по моему мнению) использовать Java Sampler.

Что для этого нужно сделать?

Создаем проект в нашей любимой среде разработки
Добавляем следующие jar в classpath
  • $JMETER_HOME/lib/ext/ApacheJMeter_core.jar
  • $JMETER_HOME/lib/ext/ApacheJMeter_java.jar
Создаем наш главный класс и расширяем класс AbstractJavaSamplerClient

Его методы:


 
public abstract class AbstractJavaSamplerClient implements JavaSamplerClient {
    private static final Logger log = LoggingManager.getLoggerForClass();

    public AbstractJavaSamplerClient() {
    }

    public void setupTest(JavaSamplerContext context) {
        log.debug(this.getClass().getName() + ": setupTest");
    }

    public void teardownTest(JavaSamplerContext context) {
        log.debug(this.getClass().getName() + ": teardownTest");
    }

    public Arguments getDefaultParameters() {
        return null;
    }

    protected Logger getLogger() {
        return log;
    }
}

И нам требуется переопределить метод  runTest

Если требуется переопределить какие то дефолтные параметры то делаем это вот так

 
public Arguments getDefaultParameters() {
    Arguments defaultParameters = new Arguments();
    defaultParameters.addArgument("username", "test");
    defaultParameters.addArgument("password", "test");
    return defaultParameters;
}

Метод runTest может выглядеть как то так:

 
 @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        SampleResult result = new SampleResult();
        RequestClient requestClient = new RequestClient();
        boolean successful = true;
        String responseText = "";
        result.sampleStart();
        try {
            responseText = requestClient.sendRequest(RequestClient.METHODS.GET, "yandex.ru", null).getResponseText();
        } catch (Exception e) {
            successful = false;
            responseText = "Error with request " + requestClient.getRequestLine();
        }
        result.sampleEnd();
        result.setSuccessful(successful);
        result.setResponseData(responseText, "UTF-8");
        return result;
    }

После этого создаем jar  файл и кидаем его вот сюда $JMETER_HOME/lib/ext/


В самом Jmeter создаем новый тест план и добавляем туда Java Request,там мы сможем выбрать наш тест по имени класса 

Ну и запустив этот sampler мы получим




Вот и все.

среда, 24 февраля 2016 г.

Отправить запрос из сессии Selenium WD

Отправить запрос из сессии Selenium WD.


Собственно тут все просто,иногда вместо того чтобы открывать какие то страницы во время функциональных тестов на WD,нужно достать какие нибудь данные используя текущую сессию.(инфа о пользователе или еще что нить такое).

Сделать это вроде как просто,но я не нашел ничего подобного на просторах интернета.

Вот мой вариант

 
public Elements sendRequest(String host, String path, String select) {
       HttpGet get;
        Set cookieSet = driver.manage().getCookies();
        try {
            get = new HttpGet(new URIBuilder().setPath(path).build());
            CookieStore cookieStore = new BasicCookieStore();
            HttpClientContext context = HttpClientContext.create();
            RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
            cookieSet.forEach(cookie -> cookieStore.addCookie(new ApacheCookie(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getExpiry())));
            HttpResponse response = HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy()).setDefaultRequestConfig(globalConfig)
                    .setDefaultCookieStore(cookieStore).build().execute(get, context);
            Elements elements = Jsoup.parse(EntityUtils.toString(response.getEntity(), "UTF-8")).select(select);
            return elements;
        } catch (Exception e) {
                e.printStackTrace();
        }
        return null;
    }

Вроде все просто,как я и говорил)