配置: zerocode-tdd.1.3.2
$ {host} 在运行时,使用-D java选项设置系统属性。一切都很好。
问题/我需要什么: 在单元测试时,未设置系统属性,并且未解析主机。 App使用Junit和Zerocode,想简单地配置Zerocode来设置系统属性。
示例:
host.properties
web.application.endpoint.host:${host}
web.application.endpoint.port=
web.application.endpoint.context=
更多信息: 要求仅用于配置。无法引入新的Java代码或IDE中的条目。
有什么帮助吗?任何想法都值得赞赏。
答案 0 :(得分:0)
找到了解决方案,但不确定这是否是正确的方法。
第1步:创建配置文件并加载系统属性。
Config.java
public class Config {
public Map<String, Object> readProperties(String optionalString) {
Map<String, Object> propertiesMap = new HashMap<>();
final String host = System.getProperty("host");
propertiesMap.put("host", host);
return propertiesMap;
}
}
步骤2 :在其他步骤之前添加一个步骤,以使用.json文件中已加载的属性。
test.json
{
"scenarioName": "Test ...",
"steps": [
{
"name": "config",
"url": "com.test.Config",
"operation": "readProperties",
"request": "",
"assertions": {}
}
]
}
步骤3 :在步骤config中使用已加载的属性
test.json
{
"scenarioName": "Test ...",
"steps": [
{
"name": "config",
"url": "com.test.Config",
"operation": "readProperties",
"request": "",
"assertions": {}
},
{
"name": "test",
"url": "${$.config.response.host}/test/xxx",
"operation": "GET",
"request": {},
"assertions": {
"status": 200
}
}
]
}
就是这样,尽管它正在工作,但是我正在寻找更好的方法。
我正在尝试的一些可能的选择是:
再次感谢您的帮助/想法。
答案 1 :(得分:0)
此功能在零码版本1.3.9
及更高版本中可用。
请使用${SYSTEM.PROP:host}
之类的占位符,例如${SYSTEM.PROPERTY:java.vendor}
解析为Oracle Corporation
或Azul Systems, Inc.
示例链接: https://github.com/authorjapps/zerocode/blob/master/README.md#general-place-holders
答案 2 :(得分:0)
我的问题是您为什么要尝试访问实际的主机/端口?抱歉回答太长,但请耐心等待。我认为有一种更简单的方法可以实现您的尝试。我发现最好从两种方式来考虑零代码的使用,
以这种方式思考它可以让您有机会获得两个不同的指标,
那么除了上面的评估之外,您为什么要构建集成测试?这样做的真正价值在于,您仍然可以像在集成测试中一样一直通过代码进行测试,但您可以像在标准单元测试中一样控制所述测试的结果。此外,由于您控制测试结果,因此与实时 API 相比,这可能会提高构建时间测试的稳定性。
很明显,您似乎已经知道如何设置集成测试,所以我假设您很乐意去那里,但是集成测试呢?
要设置集成测试,您确实有两种选择,
使用邮递员模拟服务器(https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/)
一个。更多设置工作
B.要维护的外部配置
c.每月 api 调用限制
使用 WireMock (http://wiremock.org/)
一个。与您的代码共存
B.都是本地的所以没有限制
如果您已经有集成测试,您可以将它们复制到一个新文件并进行更新或仅转换现有的。
**** 解决您的具体问题 ****
使用 WireMock 时,您可以使用以下方法设置带有动态端口的动态本地服务器 url。
protected String urlWithPort;
@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort().dynamicHttpsPort());
protected String getUriWithPort() {
return "http://localhost:" + wireMockRule.port();
}
注意:以上是使用 WireMock 2.27.1 和 ZeroCode 1.3.27 测试的
希望能帮助您回答如何为您的测试动态获取服务器/端口。