如何以编程方式设置karate.env?

问题描述 投票:3回答:1

我试图通过netty服务器设置karate.env并回复使用的环境。使用java system.setProperty对karate.env所做的更新未在功能文件中反映出来。但java已正确更新system.setProperty。

任何输入都会有帮助。谢谢。

Background:
* def setEnvVar = Java.type('CMA_Release.Java_Lib.setEnvVar')

Scenario: pathMatches('/orangeFMW/psd2_cma/cctoken') && methodIs('post')
* call setEnvVar.set('karate.env',request.Environment)
* print request.Environment
* print karate.env
# * call read('classpath:karate-config.js')
# few other operations
* def response = "Selected Environment : " + karate.env

Response : Selected Environment : null

Server log
scenario matched: pathMatches('/orangeFMW/psd2_cma/cctoken') && 
methodIs('post')
UAT // Java update the value correctly
not a js function or feature file: 
setEnvVar.set('karate.env',request.Environment) - [type: NULL, value: null]
[print] UAT
[print] 

Java class
public class setEnvVar {

public static void set(String key, String value){
    System.setProperty(key, value);
    System.out.println(System.getProperty(key,value));
}
karate
1个回答
0
投票

编辑:没有注意到你问服务器端(netty)。

不,你不能依赖从客户端到服务器这样传递的karate.env。你应该做的是当你开始测试时,客户端和服务器应该知道环境。您已经知道如何为客户端(karate-config.js)执行此操作。

启动netty服务器时,可以选择传递Java Map参数,并且服务器端功能文件中将提供所有键和值。所以你需要做的就是在这个karateEnv中传递像Map这样的密钥。

server = FeatureServer.start(file, 0, false, Collections.singletonMap("karateEnv", "blah"));

另请参阅此答案以获取更多想法:https://stackoverflow.com/a/52272220/143475

© www.soinside.com 2019 - 2024. All rights reserved.