Jenkins 用于JMeter性能测试的Hybris服务器启动
我正在尝试为我为Hybris平台构建的Jenkins PR自动化JMeter性能测试 为了运行JMeter性能脚本,显然需要首先启动hybrisserver,以便本地主机可用 我的方法是以与集成测试相同的方式启动服务器,然后执行性能测试。 我可以看到服务器的启动方式与integrationtests目标中的启动方式相同,但由于localhost不可用,来自jmeter脚本的所有请求都失败了 有人能帮忙吗 编辑: 编辑:在运行JMeter性能测试的ANT目标中启动Hybris服务器的方法-它也启动Hybris服务器,但本地主机也无法访问Jenkins 用于JMeter性能测试的Hybris服务器启动,jenkins,jmeter,hybris,Jenkins,Jmeter,Hybris,我正在尝试为我为Hybris平台构建的Jenkins PR自动化JMeter性能测试 为了运行JMeter性能脚本,显然需要首先启动hybrisserver,以便本地主机可用 我的方法是以与集成测试相同的方式启动服务器,然后执行性能测试。 我可以看到服务器的启动方式与integrationtests目标中的启动方式相同,但由于localhost不可用,来自jmeter脚本的所有请求都失败了 有人能帮忙吗 编辑: 编辑:在运行JMeter性能测试的ANT目标中启动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();
您可以将“等待”服务器可用的逻辑放在下面,例如:
- 循环直到子采样器成功
- 定义了一些超时的采样器
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秒钟,然后重试。当服务器可用时,它将退出循环并启动其他“正常”线程组
请尝试使用9001或9002端口。我认为您还需要使用类似…
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了解targetallwebtests
。您会看到其中传递了一个属性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