存储生成的动态唯一 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.使用测试监听器
这与第一个解决方案相同,您只需使用测试侦听器创建一个临时保持变量,该变量将在测试套件期间处于活动状态 运行。
我有关键字 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.使用测试监听器
这与第一个解决方案相同,您只需使用测试侦听器创建一个临时保持变量,该变量将在测试套件期间处于活动状态 运行。