Тестирование нагрузки VSTS с помощью плагина JMeter PathNotFoundException?

#visual-studio #jmeter #azure-devops #load-testing

#visual-studio #jmeter #azure-devops #нагрузочное тестирование

Вопрос:

Я создал нагрузочный тест в JMeter, чтобы получить действительный токен доступа, а затем выполнить несколько запросов к моему WebAPI, чтобы протестировать выполнение запросов, которое работает в JMeter.

В моем плане тестирования используется плагин JSONPathExtractor для извлечения токена из ответа JSON, прежде чем сохранять этот токен как свойство для использования в последующих группах тестирования. Я хочу загрузить и запустить эти тесты JMeter в Visual Studio Team Services, однако мне выдается сообщение «при инициализации тестового запуска в службе произошла внутренняя ошибка».

Вот сгенерированный файл журнала из VSTS:

 2016/10/20 13:26:22 INFO  - jmeter.util.JMeterUtils: Setting Locale to en_US 
2016/10/20 13:26:22 INFO  - jmeter.JMeter: Loading user properties from: C:PackagesPluginsMicrosoft.Compute.CustomScriptExtension1.8DownloadsapprootJMeterLoadTestclt_jmeterdropbinuser.properties 
2016/10/20 13:26:22 INFO  - jmeter.JMeter: Loading system properties from: C:PackagesPluginsMicrosoft.Compute.CustomScriptExtension1.8DownloadsapprootJMeterLoadTestclt_jmeterdropbinsystem.properties 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: Copyright (c) 1998-2015 The Apache Software Foundation 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: Version 2.13 r1665067 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: java.version=1.8.0_60 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: java.vm.name=Java HotSpot(TM) 64-Bit Server VM 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: os.name=Windows Server 2012 R2 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: os.arch=amd64 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: os.version=6.3 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: file.encoding=Cp1252 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: Default Locale=English (United States) 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: JMeter  Locale=English (United States) 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: JMeterHome=C:PackagesPluginsMicrosoft.Compute.CustomScriptExtension1.8DownloadsapprootJMeterLoadTestclt_jmeterdrop 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: user.dir  =C:Windowssystem32 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: PWD       =C:WindowsSystem32 
2016/10/20 13:26:23 INFO  - jmeter.JMeter: IP: 10.0.0.4 Name: vstsloadagent0 FullName: vstsloadagent0.oykuxugkk15uzmtpoj4pw2mxgh.fx.internal.cloudapp.net 
2016/10/20 13:26:23 INFO  - jmeter.services.FileServer: Default base='C:Windowssystem32' 
2016/10/20 13:26:23 INFO  - jmeter.services.FileServer: Set new base='d:td99ed1TestRunOut' 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: Testplan (JMX) version: 2.2. Testlog (JTL) version: 2.2 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: Using SaveService properties file encoding UTF-8 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: Using SaveService properties file version 1656252 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: Using SaveService properties version 2.8 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: All converter versions present and correct 
2016/10/20 13:26:23 INFO  - jmeter.save.SaveService: Loading file: d:td99ed1TestRunOutJMeter Tile Test (Complete).jmx 
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.control.CookieManager: Settings: Delete null: true Check: true Allow variable: true Save: false Prefix: COOKIE_ 
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Cannot find .className property for htmlParser, using default 
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/html is  
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xhtml xml is  
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xml is  
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/xml is  
2016/10/20 13:26:23 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser 
2016/10/20 13:26:23 ERROR - jmeter.JMeter: Error in NonGUIDriver java.lang.IllegalArgumentException: Problem loading XML from:'d:td99ed1TestRunOutJMeter Tile Test (Complete).jmx', conversion error com.thoughtworks.xstream.converters.ConversionException: com/jayway/jsonpath/PathNotFoundException : com/jayway/jsonpath/PathNotFoundException
---- Debugging information ----
message             : com/jayway/jsonpath/PathNotFoundException
cause-exception     : java.lang.NoClassDefFoundError
cause-message       : com/jayway/jsonpath/PathNotFoundException
first-jmeter-class  : org.apache.jmeter.save.converters.TestElementConverter.unmarshal(TestElementConverter.java:102)
class               : org.apache.jmeter.save.ScriptWrapper
required-type       : com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor
converter-type      : org.apache.jmeter.save.ScriptWrapperConverter
path                : /jmeterTestPlan/hashTree/hashTree/hashTree[3]/hashTree/hashTree[3]/com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor
line number         : 118
version             : 2.13 r1665067
-------------------------------
    at org.apache.jmeter.save.SaveService.readTree(SaveService.java:586)
    at org.apache.jmeter.save.SaveService.loadTree(SaveService.java:537)
    at org.apache.jmeter.JMeter.runNonGui(JMeter.java:750)
    at org.apache.jmeter.JMeter.startNonGui(JMeter.java:737)
    at org.apache.jmeter.JMeter.start(JMeter.java:395)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.jmeter.NewDriver.main(NewDriver.java:264)
Caused by: com.thoughtworks.xstream.converters.ConversionException: com/jayway/jsonpath/PathNotFoundException : com/jayway/jsonpath/PathNotFoundException
---- Debugging information ----
message             : com/jayway/jsonpath/PathNotFoundException
cause-exception     : java.lang.NoClassDefFoundError
cause-message       : com/jayway/jsonpath/PathNotFoundException
first-jmeter-class  : org.apache.jmeter.save.converters.TestElementConverter.unmarshal(TestElementConverter.java:102)
class               : org.apache.jmeter.save.ScriptWrapper
required-type       : com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor
converter-type      : org.apache.jmeter.save.ScriptWrapperConverter
path                : /jmeterTestPlan/hashTree/hashTree/hashTree[3]/hashTree/hashTree[3]/com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor
line number         : 118
version             : 2.13 r1665067
-------------------------------
    at org.apache.jmeter.save.ScriptWrapperConverter.createConversionException(ScriptWrapperConverter.java:105)
    at org.apache.jmeter.save.ScriptWrapperConverter.unmarshal(ScriptWrapperConverter.java:97)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
    at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1206)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1190)
    at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1061)
    at org.apache.jmeter.save.SaveService.readTree(SaveService.java:559)
    ... 9 more
Caused by: java.lang.NoClassDefFoundError: com/jayway/jsonpath/PathNotFoundException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.jmeter.save.converters.TestElementConverter.unmarshal(TestElementConverter.java:102)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
    at org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
    at org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
    at org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
    at org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
    at org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at org.apache.jmeter.save.ScriptWrapperConverter.unmarshal(ScriptWrapperConverter.java:95)
    ... 19 more
Caused by: java.lang.ClassNotFoundException: com.jayway.jsonpath.PathNotFoundException
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 59 more
  

Похоже, что при нагрузочном тестировании VSTS не удается найти плагин JSONPathExtractor. Как я могу включить это в мой файл .jmx или файлы поддержки для загрузки? Большое спасибо!

Комментарии:

1. Я обнаружил проблемы с использованием JSON-экстракторов путей с версией JMeter 2.13 (та же ошибка, что и выше), но с JMeter 3.0 работает нормально, я бы посоветовал вам попробовать с версией 3.0

2. Привет, Навин! В настоящее время я использую JMeter 3.0 (r1743807), я не думаю, что это проблема.

Ответ №1:

Это может быть вызвано версией JMeter, поскольку при нагрузочном тестировании VSTS в агенте тестирования все еще используется версия JMeter 2.13, обратитесь к этой ссылке для получения подробной информации: Тесты Apache JMeter:

Вопрос: Какая версия JMeter поддерживается?

A: Агенты нагрузочного тестирования запускают Apache JMeter версии 2.13, последнюю доступную на данный момент версию.

Для этого уже подан голос пользователя, вы можете проголосовать за него здесь: Поддержка JMeter 3.0.

Комментарии:

1. Спасибо! Я этого не осознавал и поэтому переключился на JMeter 2.13 для создания тестов для VSTS.

Ответ №2:

Ваша проблема в том, что ваш план зависит от стороннего плагина JSON Path Extractor от JMeter-plugins project. Таким образом, вам нужно будет добавить его до тех пор, пока не появятся его зависимости.

Но лучшим вариантом является использование JMeter 3.0 и встроенного почтового процессора JSON :

Комментарии:

1. Привет, как добавить его в список всех его зависимостей? Не могли бы вы предоставить подробные инструкции. У меня тоже такая же проблема.

2. Обязательно включите плагин. файл jar в разделе «Файлы поддержки»

Ответ №3:

Это не проблема JMeter или его версии, это проблема VSTS, visual studio не распознает / не поддерживает JSON Path Extractor, используемый в скрипте JMeter, лучше использовать регулярные выражения.