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

时间:2019-11-14 06:45:34

标签: rest api katalon-studio

我有关键字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)
	
}

1 个答案:

答案 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。使用测试监听器

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