存储生成的动态唯一 ID 并解析到下一个测试用例

Store generated dynamic unique ID and parse to next test case

我有关键字 groovy,它允许我为测试数据生成动态唯一 ID。

package kw
import java.text.SimpleDateFormat

import com.kms.katalon.core.annotation.Keyword


class dynamicId {

 //TIME STAMP
 String timeStamp() {
  return new SimpleDateFormat('ddMMyyyyhhmmss').format(new Date())
 }

 //Generate Random Number
 Integer getRandomNumber(int min, int max) {
  return ((Math.floor(Math.random() * ((max - min) + 1))) as int) + min
 }

 /**
  * Generate a unique key and return value to service
  */
 @Keyword
 String getUniqueId() {
  String prodName = (Integer.toString(getRandomNumber(1, 99))) + timeStamp()

  return prodName
 }
}

然后我有几个 API 测试用例如下:

测试用例 1:

POST通过调用关键字测试数据。这个测试用例运行良好。

正在post编辑动态唯一 ID 并将其存储在数据库中。

partial test case


//test data using dynamic Id
NewId = CustomKeywords.'kw.dynamicId.getUniqueId'()
println('....DO' + NewId)

GlobalVariable.DynamicId = NewId

//test data to simulate Ingest Service sends Dispense Order to Dispense Order Service.
def incomingDOInfo = '{"Operation":"Add","Msg":{"id":"'+GlobalVariable.DynamicId+'"}'

现在测试用例2作为验证测试​​用例。

我需要验证动态唯一 ID 可以通过 GET API 检索(通过 ID 获取数据,此 ID 应与 POSTED 匹配)。

如何存储从测试用例 1 生成的动态唯一 ID?

我在测试用例 1 中有 "println('....DO' + NewId)",但我不知道如何使用它并把它放在测试用例 2 中。

我应该使用哪种方法取回生成的动态唯一 ID?

根据建议更新了测试用例 2,效果很好。

def dispenseOrderId = GlobalVariable.DynamicId
'Check data'
getDispenseOrder(dispenseOrderId)



def getDispenseOrder(def dispenseOrderId){
 def response = WS.sendRequestAndVerify(findTestObject('Object Repository/Web Service Request/ApiDispenseorderByDispenseOrderIdGet', [('dispenseOrderId') : dispenseOrderId, ('SiteHostName') : GlobalVariable.SiteHostName, , ('SitePort') : GlobalVariable.SitePort]))
 println(response.statusCode)
 println(response.responseText)
 WS.verifyResponseStatusCode(response, 200)
 
 println(response.responseText)
 
 //convert to json format and verify result
 def dojson = new JsonSlurper().parseText(new String(response.responseText))
 println('response text: \n' + JsonOutput.prettyPrint(JsonOutput.toJson(dojson)))
 
 assertThat(dojson.dispenseOrderId).isEqualTo(dispenseOrderId)
 assertThat(dojson.state).isEqualTo("NEW")
}

====================

已更新 post 以尝试 #2 建议,有效

TC2

//retrieve the dynamic ID generated at previous test case
def file = new File("C:/DynamicId.txt")


//Modify this to match test data at test case "IncomingDOFromIngest"
def dispenseOrderId = file.text
'Check posted DO data from DO service'
getDispenseOrder(dispenseOrderId)



def getDispenseOrder(def dispenseOrderId){
 def response = WS.sendRequestAndVerify(findTestObject('Object Repository/Web Service Request/ApiDispenseorderByDispenseOrderIdGet', [('dispenseOrderId') : dispenseOrderId, ('SiteHostName') : GlobalVariable.SiteHostName, , ('SitePort') : GlobalVariable.SitePort]))
 println(response.statusCode)
 println(response.responseText)
 WS.verifyResponseStatusCode(response, 200)
 
 println(response.responseText)
 
}

我可以想到多种方法。

1.将动态 ID 的值存储在 GlobalVariable

如果您运行正在测试套件中测试用例 1 (TC1) 和 TC2,则可以使用全局变量进行内部存储。

您已经在 TC1 中这样做了:

GlobalVariable.DynamicId = NewId

现在,如果 TC1 和 TC2 运行作为同一测试套件的一部分,这将工作。 那是因为 GlobalVariables 是 在测试套件的拆解或者当单个测试用例是 运行.

时拆解测试用例

假设您检索了 GET 响应并将其放入 response 变量中。

assert response.equals(GlobalVariable.DynamicId)

2。将值 od 动态 ID 存储在文件系统上

即使您 运行 单独测试用例(即不在测试套件中),此方法仍然有效。

您可以使用文件系统将 ID 值永久存储到文件中。有各种 Groovy mehods 可以帮助您。

下面是一个关于如何将 ID 存储到文本文件的示例c:/path-to/variable.txt:

def file = new File("c:/path-to/variable.txt")
file.newWriter().withWriter { it << NewID }
println file.text

TC2需要这个断言(根据需要调整):

def file = new File("c:/path-to/variable.txt")
assert response.equals(file.text)

确保您也在 TC2 中定义了 file

3。 Return TC1 末尾的 ID 值并将其用作 TC2 的输入

这还假定 TC1 和 TC2 在同一个测试套件中。你returnID的值跟

return NewId

然后用作 TC2 的输入参数。

4.使用测试监听器

这与第一个解决方案相同,您只需使用测试侦听器创建一个临时保持变量,该变量将在测试套件期间处于活动状态 运行。