我有关键字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:
通过调用关键字来发布测试数据。这个测试用例效果很好。
动态唯一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用作验证测试案例。
我需要验证可以通过GET API检索动态唯一ID(按ID取回数据,此ID应该与被发布的ID匹配)。
从测试用例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")
}
===================
更新帖子以尝试#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)
}
答案 0 :(得分:1)
我可以想到多种方式。
1。将值od动态ID存储在GlobalVariable
中如果在测试套件中运行测试用例1(TC1)和TC2,则可以使用全局变量进行存储。
您已经在TC1中这样做了
GlobalVariable.DynamicId = NewId
现在,如果TC1和TC2作为同一测试套件的一部分运行,这将仅工作。是因为GlobalVariables在reset to default上运行单个测试用例时,测试套件的拆除或测试用例的拆除。
让我们说您检索了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。返回TC1末尾的ID值,并将其用作TC2的输入
这还假设TC1和TC2在同一测试套件中。您可以使用
返回ID的值return NewId
,然后用作TC2的输入参数。
4。使用测试监听器
这与第一种解决方案相同,只是使用测试侦听器创建一个临时的保持变量,该变量将在测试套件运行期间处于活动状态。