# TestCaseId

**URL:** <https://forum.katalon.com/t/testcaseid/13287>\
**Category:** API Testing\
**Tags:** api-testing, katalon-studio\
**Created:** [September 18, 2018, 8:17pm UTC](https://forum.katalon.com/t/testcaseid/13287 "2018-09-18T20:17:34Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Valeriy](https://avatars.discourse-cdn.com/v4/letter/v/5e9695/32.png) [@Valeriy](https://forum.katalon.com/u/Valeriy)\
**Post date:** [September 18, 2018, 8:17pm UTC](https://forum.katalon.com/t/testcaseid/13287/1 "2018-09-18T20:17:34Z")

</div>

Is there are any possibility to initialize a string variable with test case id?  
for example, I want to do smth like this

In TestCase:  
**def currentTestCaseId = this.id**

and then I want to create a method and send there my current testCaseId

–  
I tried to use Test Listener, but it could write ID in log only. I cant initialize and return ID as a value (return in a global value is not an option, because test cases could be run in test suite in parallel mode)

---

<div class="post-metadata">

**Author:** ![kazurayam](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/kazurayam/32/333_2.png) [@kazurayam](https://forum.katalon.com/u/kazurayam)\
**Post date:** [September 18, 2018, 9:01pm UTC](https://forum.katalon.com/t/testcaseid/13287/2 "2018-09-18T21:01:57Z")

</div>

I think GlobalVariable is your option.

GlobalVariable is allocated per each TestSuite run. If you run 5 TestSuites in a TestSuiteCollection in parallel mode, each TestSuite will have its own set of GlobalVariables.

See [https://github.com/kazurayam/KatalonDiscussion9725](https://github.com/kazurayam/KatalonDiscussion9725). There I tried to prove my thought. Clone it out and execute the TestSuiteCollection TSC. It will run successful. You will not see any IllegalStateException raised.

---

<div class="post-metadata">

**Author:** ![Valeriy](https://avatars.discourse-cdn.com/v4/letter/v/5e9695/32.png) [@Valeriy](https://forum.katalon.com/u/Valeriy)\
**Post date:** [September 18, 2018, 10:40pm UTC](https://forum.katalon.com/t/testcaseid/13287/3 "2018-09-18T22:40:57Z")

</div>

> kazurayam said:
> 
> I think GlobalVariable is your option.
> 
> GlobalVariable is allocated per each TestSuite run. If you run 5 TestSuites in a TestSuiteCollection in parallel mode, each TestSuite will have its own set of GlobalVariables.
> 
> See [GitHub - kazurayam/KatalonDiscussion9725: How a TestCase script get its TestCaseId](https://github.com/kazurayam/KatalonDiscussion9725). There I tried to prove my thought. Clone it out and execute the TestSuiteCollection TSC. It will run successful. You will not see any IllegalStateException raised.

Thanks!)

---

<div class="post-metadata">

**Author:** ![Ibus](https://avatars.discourse-cdn.com/v4/letter/i/e9a140/32.png) [@Ibus](https://forum.katalon.com/u/Ibus)\
**Post date:** [September 19, 2018, 5:17am UTC](https://forum.katalon.com/t/testcaseid/13287/4 "2018-09-19T05:17:14Z")

</div>

you can use also the `**[getTestCaseId](https://api-docs.katalon.com/com/kms/katalon/core/testcase/TestCase.html#getTestCaseId())**() method`

[https://api-docs.katalon.com/com/kms/katalon/core/testcase/TestCase.html](https://api-docs.katalon.com/com/kms/katalon/core/testcase/TestCase.html)

---

<div class="post-metadata">

**Author:** ![kazurayam](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/kazurayam/32/333_2.png) [@kazurayam](https://forum.katalon.com/u/kazurayam)\
**Post date:** [September 19, 2018, 6:09am UTC](https://forum.katalon.com/t/testcaseid/13287/5 "2018-09-19T06:09:37Z")

</div>

Ibus,

Could you please elaborate this?

I made a test case:

```auto
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
WebUI.comment("${this.getTestCaseId()}")

```

When I ran it, I got the following error message:

```auto
09-19-2018 03:04:30 PM - [ERROR] - Test Cases/GetTestCaseId FAILED because (of) (Stack trace: groovy.lang.MissingMethodException: No signature of method: Script1537337010963.getTestCaseId() is applicable for argument types: () values: []
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:158)
at Script1537337010963.run(Script1537337010963.groovy:16)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:183)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:108)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:294)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:285)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:264)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:256)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:200)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:99)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:90)
at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
at TempTestCase1537337065278.run(TempTestCase1537337065278.groovy:22)
at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:263)
at groovy.lang.GroovyShell.run(GroovyShell.java:518)
at groovy.lang.GroovyShell.run(GroovyShell.java:507)
at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653)
at groovy.ui.GroovyMain.run(GroovyMain.java:384)
at groovy.ui.GroovyMain.process(GroovyMain.java:370)
at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129)
at groovy.ui.GroovyMain.main(GroovyMain.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)
)

```

What is the appropriate way to call getTestCaseId() ?

---

<div class="post-metadata">

**Author:** ![Valeriy](https://avatars.discourse-cdn.com/v4/letter/v/5e9695/32.png) [@Valeriy](https://forum.katalon.com/u/Valeriy)\
**Post date:** [September 19, 2018, 7:54am UTC](https://forum.katalon.com/t/testcaseid/13287/6 "2018-09-19T07:54:25Z")

</div>

> Ibus said:
> 
> you can use also the `**[getTestCaseId](https://api-docs.katalon.com/com/kms/katalon/core/testcase/TestCase.html#getTestCaseId())**() method `
> 
> [TestCase (Katalon Studio API Specification)](https://api-docs.katalon.com/com/kms/katalon/core/testcase/TestCase.html)

But how should I get it from current test case context?  
I tried like this  
\*\*this.get  
\*\*but there are no method getTestCaseId

---

<div class="post-metadata">

**Author:** ![Mate\_Mrse](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/mate_mrse/32/345_2.png) [@Mate\_Mrse](https://forum.katalon.com/u/Mate_Mrse)\
**Post date:** [September 19, 2018, 8:13am UTC](https://forum.katalon.com/t/testcaseid/13287/7 "2018-09-19T08:13:08Z")

</div>

getTestCaseId() can be called from a test listener

```auto
@BeforeTestCase
def infoBeforeTestCase(TestCaseContext testCaseContext) {
       println testCaseContext.getTestCaseId()
}

```

But why can’t I use TestCaseContext.getTestCaseId() outside of a test listener is still a mystery to me.

Maybe someone with better understanding of OOP could explain?

---

<div class="post-metadata">

**Author:** ![Russ\_Thomas](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/russ_thomas/32/11884_2.png) [@Russ\_Thomas](https://forum.katalon.com/u/Russ_Thomas)\
**Post date:** [September 19, 2018, 1:42pm UTC](https://forum.katalon.com/t/testcaseid/13287/8 "2018-09-19T13:42:44Z")

</div>

> But why can’t I use TestCaseContext.getTestCaseId() outside of a test listener is still a mystery to me.

Basically, listeners are “hooks” which are called at a specific time during test case “startup”. After that time, the context in which they existed no longer exists.

Make sense?

Under the current regime, (as I’m sure you know, Mate) you need to catch the Id at that hook point and store it in a global you can use later/elsewhere.

Proposal: Perhaps the (java) Runtime object could be extended to add a test case context object reference?

---

<div class="post-metadata">

**Author:** ![kazurayam](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/kazurayam/32/333_2.png) [@kazurayam](https://forum.katalon.com/u/kazurayam)\
**Post date:** [September 19, 2018, 1:50pm UTC](https://forum.katalon.com/t/testcaseid/13287/9 "2018-09-19T13:50:12Z")

</div>

Valeriy,

The following post would answer to your first question:

- [http://forum.katalon.com/discussion/6410/get-name-of-test-in-a-custom-keyword](http://forum.katalon.com/discussion/6410/get-name-of-test-in-a-custom-keyword)

---

<div class="post-metadata">

**Author:** ![Mate\_Mrse](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/mate_mrse/32/345_2.png) [@Mate\_Mrse](https://forum.katalon.com/u/Mate_Mrse)\
**Post date:** [September 19, 2018, 2:00pm UTC](https://forum.katalon.com/t/testcaseid/13287/10 "2018-09-19T14:00:49Z")

</div>

> [Russ Thomas](https://forum.katalon.com/profile/4015/Russ%20Thomas "Link: /profile/4015/Russ%20Thomas") said:
> 
> Basically, listeners are “hooks” which are called at a specific time during test case “startup”. After that time, the context in which they existed no longer exists.  
> Make sense?

Yes, perfect. Thanks!

> Under the current regime, (as I’m sure you know, Mate) you need to catch the Id at that hook point and store it in a global you can use later/elsewhere.

That’s exactly what I do.

---

<div class="post-metadata">

**Author:** ![Valeriy](https://avatars.discourse-cdn.com/v4/letter/v/5e9695/32.png) [@Valeriy](https://forum.katalon.com/u/Valeriy)\
**Post date:** [September 19, 2018, 6:35pm UTC](https://forum.katalon.com/t/testcaseid/13287/11 "2018-09-19T18:35:42Z")

</div>

> [kazurayam](https://forum.katalon.com/profile/4280/kazurayam) said:
> 
> Valeriy,
> 
> The following post would answer to your first question:
> 
> - [Get Name of test in a custom keyword - Katalon Studio - Katalon Community](http://forum.katalon.com/discussion/6410/get-name-of-test-in-a-custom-keyword)

Thanks, Kazurayam, it works fine  
I just thought, that ID parameter is an attribute of test case and it had initialized when I created it. So i thought, there is a way one could get it without running a test case.  
But anyway global variable is an option

---

<div class="post-metadata">

**Author:** ![kazurayam](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/kazurayam/32/333_2.png) [@kazurayam](https://forum.katalon.com/u/kazurayam)\
**Post date:** [October 4, 2025, 10:44pm UTC](https://forum.katalon.com/t/testcaseid/13287/12 "2025-10-04T22:44:39Z")

</div>

See  
[http://forum.katalon.com/t/contexttrace-test-case-script-can-get-its-own-test-case-id/183190](http://forum.katalon.com/t/contexttrace-test-case-script-can-get-its-own-test-case-id/183190)
