如何重用我在每个场景中在空手道功能背景中调用的已初始化的Java类,而不需要每次都刷新?

问题描述 投票:0回答:1

在功能文件的后台,我正在调用一个 Java 类并使用下面提供的两个服务对其进行初始化。这允许我使用此类中的加密方法。然而,由于这些服务在每个场景中都位于后台,因此它们会被重复发布,从而导致 Gattle 性能测试中的性能损失。我知道在每种情况下重新加载背景都是正常的。

如何确保这个Java类在后台只被调用和初始化一次?我知道这个概念

如果我不调用RequestPublicKey和SessionRegister服务来初始化Java类,Java类中的方法将返回null。

我尝试从不同的功能中使用 call、callsingle、callonce 进行调用,但这些方法返回 null。我尝试用JS执行这些操作,但无法达到预期的结果

这是我的背景:

Background:
* def conf = call read('../karate-config.js')
* url conf.whiteboxUrlUat
* def requestFile = read('data.json')

#Database Configurations
* def dbJsFile = call read('../database-configurations.js')
* def dbConfigurations = dbJsFile.sqlServerConfigurations
* def DbUtils = Java.type('testrails.DbUtils')
* def db = new DbUtils(dbConfigurations)

Given path 'api/SecureChannel/RequestPublicKey'
* def requestBody = requestFile.requestPublicKey
Given request requestBody
When method POST
* java.lang.Thread.sleep(1000)
Then print response
* def secureChannelPublicKey = response.PublicKey
* def scrChnl = Java.type('testrails.SecureChannel')
* def scr = new scrChnl(secureChannelPublicKey,"PB10203S60738","")
* match response.ErrorCode == 0

Given path 'api/SecureChannel/SessionRegister'
* def requestBody = requestFile.sessionRegister
Given request requestBody
* def sessionRegisterEncData = scr.generateSessionRegisterEncData()
* requestBody.EncData = sessionRegisterEncData
When method POST
Then print response
* scr.decryptData(response.EncData)
* match response.ErrorCode == 0

这是我的场景之一: 如本场景所示,我正在使用带有“scr”的方法。

场景:注册

* url conf.mposEntMainUrl
Given path 'api/MainAppExternal/Register'
* def requestBody = requestFile.register
* def requestBodyConvertString = scr.mapToString(requestBody)
* def secureContentOlustur = scr.initSecureRequest(requestBodyConvertString,"PB99999999999")
Then print secureContentOlustur.secureContent
* def secureBody = requestFile.register2
* secureBody.SecureContent = secureContentOlustur.secureContent
Given request secureBody
When method POST
Then print response
Then print scr.generateRandomAesKey()
* match response.Code == 0
karate
1个回答
0
投票

只需实现一个“普通”Java 单例或您的自定义逻辑。像这样的东西:

if (!initialized) {
  initialized = true;
© www.soinside.com 2019 - 2024. All rights reserved.