Jenkins 用于JMeter性能测试的Hybris服务器启动

Jenkins 用于JMeter性能测试的Hybris服务器启动,jenkins,jmeter,hybris,Jenkins,Jmeter,Hybris,我正在尝试为我为Hybris平台构建的Jenkins PR自动化JMeter性能测试 为了运行JMeter性能脚本,显然需要首先启动hybrisserver,以便本地主机可用 我的方法是以与集成测试相同的方式启动服务器,然后执行性能测试。 我可以看到服务器的启动方式与integrationtests目标中的启动方式相同,但由于localhost不可用,来自jmeter脚本的所有请求都失败了 有人能帮忙吗 编辑: 编辑:在运行JMeter性能测试的ANT目标中启动Hybris服务器的方法-它也启动

我正在尝试为我为Hybris平台构建的Jenkins PR自动化JMeter性能测试

为了运行JMeter性能脚本,显然需要首先启动hybrisserver,以便本地主机可用

我的方法是以与集成测试相同的方式启动服务器,然后执行性能测试。 我可以看到服务器的启动方式与integrationtests目标中的启动方式相同,但由于localhost不可用,来自jmeter脚本的所有请求都失败了

有人能帮忙吗

编辑:

编辑:在运行JMeter性能测试的ANT目标中启动Hybris服务器的方法-它也启动Hybris服务器,但本地主机也无法访问

    <yrun>
         de.hybris.platform.core.Registry.setCurrentTenantByID("junit");

         de.hybris.platform.util.RedeployUtilities.shutdown();
     </yrun>

de.hybris.platform.core.Registry.setCurrentTenantByID(“junit”);
de.hybris.platform.util.RedeployUtilities.shutdown();

您可以将“等待”服务器可用的逻辑放在下面,例如:

  • 循环直到子采样器成功
    • 定义了一些超时的采样器
然而,通过这种方式,您将在.jtl结果文件中得到额外的负面结果,我将使用JSR223采样器和如下代码:

SampleResult.setIgnore()
def attempt = 1
def host = 'localhost'
def port = 8080
while (true) {
    try {
        def s = new Socket(host, port)
        if (s.isConnected()) {
            log.info('Server is available, starting the test')
            s.close()
            break
        }
    }
    catch (Exception ex) {
        log.info('Server is not available after ' + attempt + ' attempts, retrying...')
        attempt++
        sleep(5000)
    }
}
它将尝试与给定的端点建立连接,如果失败,请等待5秒钟,然后重试。当服务器可用时,它将退出循环并启动其他“正常”线程组


请尝试使用90019002端口。

我认为您还需要使用类似…
de.hybris.platform.core.Registry.activateTenant()(请检查可在注册表类中使用的可用函数)


您可以使用“@NeedsEmbeddedServer”注释启动嵌入式服务器,例如在“ycommercewebservicestest”扩展中的Spock(BDD)测试中使用该注释

请注意,这将使用“junit”租户,默认情况下,嵌入式服务器在端口8001(http)和8002(https)上运行

您可以在属性中检查端口:

# specifies default http port for embedded server
embeddedserver.http.port=8001

# specifies default https port for embedded server
embeddedserver.ssl.port=8002
例如:

@IntegrationTest
@NeedsEmbeddedServer(webExtensions={“ycommercewebservices”})
公共类示例WebTest扩展ServicelayerTest{
@试验
public void exampleTest(){
//您的实现
}
}

谢谢Dmitri T,问题实际上不是在服务器启动之前执行JMeter。这似乎是Hybris side的问题=>服务器启动精简,或者本地主机位于另一个我不知道的端口上。Hi@Theo-请尽可能添加命令和任何相关屏幕截图。当您以集成测试所用的方式说
时,您是如何尝试实现它的?。请添加更多的信息,你会吸引更多的答案。谢谢你的提示。我添加了更多信息hi@Theo,我认为您还需要调用
Registry.activateMasterTenant()
activateTenant
我已经以这种方式启动了服务器,但仍然无法访问本地主机:/I使用此行启动服务器de.hybris.platform.core.Registry.setCurrentTenantByID(“主”);de.hybris.platform.core.Registry.activateMasterTenant();哦,应该检查是否使用ActivateInstant,hybris也加载web上下文,还是仅加载spring应用程序上下文。如果您不使用
de.hybris.platform.util.RedeployUtilities.shutdown()
关闭它,您可以使用浏览器访问该站点吗?这是一个非常有趣的问题。我无法使用浏览器访问该网站。我尝试了,但两者都不可用。您可以参考platform/build.xml了解target
allwebtests
。您会看到其中传递了一个属性
web=true
。即使在我运行allwebtests时,localhost在我的浏览器上不可用:/Open ports,如果它们在防火墙后面。您使用的是什么操作系统?。Hybris通常需要80、443、9001、9002和8983(对于solr)Hi@BNR,我使用的是mac os,我认为端口必须打开,因为当我启动服务器时,如./hybrisserver.sh localhost可用,并且一切正常
<target name="allwebtests" description="">
        <callback extname="" target="before_yunitweb"/>
        <annotationtests annotations="unittests,demotests,integrationtests" web="true"/>
        <callback extname="" target="after_yunitweb"/>
    </target>
# specifies default http port for embedded server
embeddedserver.http.port=8001

# specifies default https port for embedded server
embeddedserver.ssl.port=8002