在功能文件的后台,我正在调用一个 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
只需实现一个“普通”Java 单例或您的自定义逻辑。像这样的东西:
if (!initialized) {
initialized = true;