Katalon Studio Preferences


This is a companion discussion topic for the original entry at https://docs.katalon.com/katalon-studio/docs/katalon-studio-preferences.html

There is no documentation on Cucumber preferences in Katalon Studio. There are two preferences panels realated with Cucumber:

  • Window > Katalon Studio Preferences … > Cucumber and
  • Window > Katalon Studio Preferences … > Cucumber > User Settings

I will be thankfull if some one could add documentation for both panels

1 Like

Hello,
what is the syntax for exclusion list in proxy settings ? ( In Katalon Studio> Preferences > Katalon > Proxy )

I put “*.mycompany.fr” in it, but it generates PatternSyntaxException in Katalon log.
If I put "mycompany.fr, exclusion list does no more throw exception, but does not work also…

detail of logs : 

Thu Mar 12 11:48:51 CET 2020
Activation collection is failed
com.kms.katalon.integration.analytics.exceptions.AnalyticsApiExeception: java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*.mycompany.fr
^
	at com.kms.katalon.integration.analytics.exceptions.AnalyticsApiExeception.wrap(AnalyticsApiExeception.java:23)
	at com.kms.katalon.integration.analytics.providers.AnalyticsApiProvider.requestToken(AnalyticsApiProvider.java:128)
	at com.kms.katalon.integration.analytics.providers.TestOpsFeatureActivatorImpl.connect(TestOpsFeatureActivatorImpl.java:41)
	at com.kms.katalon.application.utils.ActivationInfoCollector.getLicenseFromTestOps(ActivationInfoCollector.java:497)
	at com.kms.katalon.application.utils.ActivationInfoCollector.activate(ActivationInfoCollector.java:385)
	at com.kms.katalon.application.utils.ActivationInfoCollector.checkAndMarkActivatedForGUIMode(ActivationInfoCollector.java:140)
	at com.kms.katalon.core.application.ApplicationStaupHandler.lambda$2(ApplicationStaupHandler.java:81)
	at com.kms.katalon.application.utils.ActivationInfoCollector.lambda$1(ActivationInfoCollector.java:796)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*.mycompany.fr
^
	at java.util.regex.Pattern.error(Pattern.java:1957)
	at java.util.regex.Pattern.sequence(Pattern.java:2125)
	at java.util.regex.Pattern.expr(Pattern.java:1998)
	at java.util.regex.Pattern.compile(Pattern.java:1698)
	at java.util.regex.Pattern.<init>(Pattern.java:1351)
	at java.util.regex.Pattern.compile(Pattern.java:1028)
	at com.kms.katalon.core.util.internal.ProxyUtil.excludes(ProxyUtil.java:115)
	at com.kms.katalon.core.util.internal.ProxyUtil.getProxy(ProxyUtil.java:80)
	at com.kms.katalon.core.network.HttpClientProxyBuilder.create(HttpClientProxyBuilder.java:149)
	at com.kms.katalon.integration.analytics.providers.AnalyticsApiProvider.executeRequest(AnalyticsApiProvider.java:501)
	at com.kms.katalon.integration.analytics.providers.AnalyticsApiProvider.executeRequest(AnalyticsApiProvider.java:533)
	at com.kms.katalon.integration.analytics.providers.AnalyticsApiProvider.requestToken(AnalyticsApiProvider.java:126)
	... 13 more

Furthermore, I have a side effect that is quite annoying : Now that I exited Katalon7, I cannot launch it again because it is crashing during checking activation at startup.
But I can nomore modify Exclusion list as it is not displayed in activation proxy screen…

Is there a file where I can modify this exclusion list in order to be able to launch Katalon 7 again ?

Hi @staniere,
Regarding your first question, please use .*.mycompany.fr (with . before *).
For your second question, please go to <Your_Katalon_Installation_Folder>/config/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.kms.katalon.execution.prefs and change the line with proxy.excludes to the correct value.

1 Like

thank you huynguyen for your answers.
It allowed me to get again Katalon 7 working.

But it could be usefull to complete your documentation https://docs.katalon.com/katalon-studio/docs/katalon-studio-preferences.html#proxy-preferences

Manual proxy configuration : you can manually set up your proxy.

  • Address: a HTTP Proxy host.
  • Port: a HTTP Proxy port.
  • Excludes: A list of addresses separated by comma to exclude.

Add some example may be usefull for another users (for one address or several adresses)
This field would be quite more easy to use if we could put classical proxy exclusion list as “*.mycompany.fr,*.othercompany.com”
But if we have to use regex, please put it in documentation !

Hi @staniere,
Thank you for your idea. We will update the documentation accordingly.

Why PROXY password is visible in “Test Log”. Some people have to use domain passwords not just “MySimpleProxyPswd”. PROXY password should be mask with stars “****”.

Window > Katalon Studio Preferences > General > Network Connections
What are these settings for?

This is way too many steps!

There needs to be a single method to export and import all settings.

Could someone indicate how to disable .har files in Katalon?

Hi @dongyu.zhou

Currently, the ability to disable HAR file generation is not available yet and we’re planning to support it in 8.2 that’s tentatively available in late November.

Meanwhile, please try the following workaround:

  • Disable “Log executed test step“ in Project Settings/Execution

  • Create package com.kms.katalon.core.webservice.keyword.builtin in Keywords folder

  • Create class SendRequestKeyword with the following content:
 package com.kms.katalon.core.webservice.keyword.builtin

import com.kms.katalon.core.annotation.internal.Action
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.keyword.internal.KeywordMain
import com.kms.katalon.core.keyword.internal.SupportLevel
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.webservice.common.HarLogger
import com.kms.katalon.core.webservice.common.ServiceRequestFactory
import com.kms.katalon.core.webservice.constants.StringConstants
import com.kms.katalon.core.webservice.helper.WebServiceCommonHelper
import com.kms.katalon.core.webservice.keyword.internal.WebserviceAbstractKeyword
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject

import groovy.transform.CompileStatic

@Action(value = "sendRequest")
public class SendRequestKeyword extends WebserviceAbstractKeyword {

	@CompileStatic
	@Override
	public SupportLevel getSupportLevel(Object ...params) {
		return super.getSupportLevel(params)
	}

	@CompileStatic
	@Override
	public Object execute(Object ...params) {
		RequestObject request = (RequestObject) params[0]
		FailureHandling flowControl = (FailureHandling)(params.length > 1 && params[1] instanceof FailureHandling ? params[1] : RunConfiguration.getDefaultFailureHandling())
		return sendRequest(request,flowControl)
	}

	@CompileStatic
	public ResponseObject sendRequest(RequestObject request, FailureHandling flowControl) throws Exception {
		Object object = KeywordMain.runKeyword({
			WebServiceCommonHelper.checkRequestObject(request)
			HarLogger harLogger = new HarLogger()
			harLogger.initHarFile()
			ResponseObject responseObject = WebServiceCommonHelper.sendRequest(request)
			//                harLogger.logHarFile(request, responseObject, RunConfiguration.getReportFolder())

			logger.logPassed(StringConstants.KW_LOG_PASSED_SEND_REQUEST_SUCCESS)
			return responseObject
		}, flowControl, StringConstants.KW_LOG_FAILED_CANNOT_SEND_REQUEST)
		if (object instanceof ResponseObject) {
			return (ResponseObject) object
		}
		return null
	}
}
  • Create SendRequestAndVerifyKeyword
package com.kms.katalon.core.webservice.keyword.builtin

import com.kms.katalon.core.annotation.internal.Action
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.exception.StepErrorException
import com.kms.katalon.core.exception.StepFailedException
import com.kms.katalon.core.keyword.internal.KeywordMain
import com.kms.katalon.core.keyword.internal.SupportLevel
import com.kms.katalon.core.logging.model.TestStatus
import com.kms.katalon.core.main.TestCaseMain
import com.kms.katalon.core.main.TestResult
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testcase.TestCaseBinding
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.webservice.common.HarLogger
import com.kms.katalon.core.webservice.common.ServiceRequestFactory
import com.kms.katalon.core.webservice.constants.StringConstants
import com.kms.katalon.core.webservice.helper.WebServiceCommonHelper
import com.kms.katalon.core.webservice.keyword.internal.WebserviceAbstractKeyword
import com.kms.katalon.core.webservice.verification.WSResponseManager
import groovy.transform.CompileStatic

@Action(value = "sendRequestAndVerify")
public class SendRequestAndVerifyKeyword extends WebserviceAbstractKeyword {

	@CompileStatic
	@Override
	public SupportLevel getSupportLevel(Object ...params) {
		return super.getSupportLevel(params)
	}

	@CompileStatic
	@Override
	public Object execute(Object ...params) {
		RequestObject request = (RequestObject) params[0]
		FailureHandling flowControl = (FailureHandling)(params.length > 1 && params[1] instanceof FailureHandling ? params[1] : RunConfiguration.getDefaultFailureHandling())
		return sendRequestAndVerify(request,flowControl)
	}

	@CompileStatic
	public ResponseObject sendRequestAndVerify(RequestObject request, FailureHandling flowControl) throws Exception {
		Object object = KeywordMain.runKeyword({
			WebServiceCommonHelper.checkRequestObject(request)
			HarLogger harLogger = new HarLogger()
			harLogger.initHarFile()
			ResponseObject responseObject = WebServiceCommonHelper.sendRequest(request)
			//            harLogger.logHarFile(request, responseObject, RunConfiguration.getReportFolder())

			logger.logDebug(StringConstants.KW_LOG_INFO_VERIFICATION_START)
			String verificationScript = request.getVerificationScript()
			WSResponseManager.getInstance().setCurrentRequest(request)
			WSResponseManager.getInstance().setCurrentResponse(responseObject)

			TestResult result = TestCaseMain.runWSVerificationScript(createTestCaseBinding(request),
					verificationScript, flowControl, true)
			switch(result.getTestStatus().getStatusValue()) {
				case TestStatus.TestStatusValue.FAILED:
					throw new StepFailedException(StringConstants.KW_LOG_VERIFICATION_STEP_FAILED)
					break
				case TestStatus.TestStatusValue.ERROR:
					throw new StepErrorException(StringConstants.KW_LOG_VERIFICATION_STEP_FAILED_BECAUSE_OF_ERROR)
					break
				case TestStatus.TestStatusValue.PASSED:
					logger.logPassed(StringConstants.KW_LOG_VERIFICATION_STEP_PASSED)
					break
				default:
					break
			}
			logger.logPassed(StringConstants.KW_LOG_PASSED_SEND_REQUEST_AND_VERIFY_SUCCESS)
			return responseObject
		}, flowControl, StringConstants.KW_LOG_FAILED_CANNOT_SEND_REQUEST_AND_VERIFY)
		if (object instanceof ResponseObject) {
			return (ResponseObject) object
		}
		return null
	}

	private TestCaseBinding createTestCaseBinding(RequestObject requestObject) {
		Map<String, Object> variables = new HashMap<String, Object>()
		TestCaseBinding testCaseBinding = new TestCaseBinding(requestObject.getName(), variables);
		return testCaseBinding;
	}
}

Happy Testing

Jass

Do anyone know how to add specific packages from here
Window > Katalon Studio Preferences … > Cucumber ?
In that way, we can let cucumber scan only specific packages instead of scanning whole package ?