テストデータの目的で動的な一意のIDを生成できるキーワードgroovyがあります。
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します。このテストケースはうまく機能します。
動的な一意の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がGETAPIで取得できることを確認する必要がある場合(IDでデータを取得します。このIDはPOSTされている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.動的IDの値をGlobalVariableに格納します
テストスイートでテストケース1(TC1)とTC2を実行している場合は、ストレージ間でグローバル変数を使用できます。
あなたはすでにTC1でこれを行っています:
GlobalVariable.DynamicId = NewId
現在、これはTC1とTC2が同じテストスイートの一部として実行されている場合にのみ機能します。これは、GlobalVariablesが、テストスイートの分解または単一のテストケースの実行時のテストケースの分解時にデフォルトにリセットされるためです。
GET応答を取得し、それをresponse
変数に入れたとしましょう。
assert response.equals(GlobalVariable.DynamicId)
2.動的IDの値をファイルシステムに保存します
この方法は、テストケースを個別に(つまり、テストスイートではなく)実行した場合でも機能します。
ファイルシステムを使用して、ID値をファイルに永続的に保存できます。それを支援するさまざまなGroovyの方法があります。
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)
file
TC2でも定義したことを確認してください。
3. TC1の最後にID値を返し、それをTC2への入力として使用します。
これは、TC1とTC2が同じテストスイートにあることも前提としています。IDの値を次のように返します
return NewId
次に、TC2の入力パラメータとして使用します。
4.テストリスナーを使用する
これは最初のソリューションと同じです。テストリスナーを使用して、テストスイートの実行中にアクティブになる一時的な保持変数を作成するだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加