首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zerocode:在主机配置文件中设置系统属性

Zerocode:在主机配置文件中设置系统属性
EN

Stack Overflow用户
提问于 2019-05-22 08:08:52
回答 3查看 715关注 0票数 0

配置:零代码-tdd.1.3.2

${host}在运行时,使用-D java选项设置系统属性。平安无事。

问题/我需要的:单元测试时的,未设置的系统属性,以及未解决的主机。应用程序使用Junit和Zerocode,只想简单地配置Zerocode来设置系统属性。

示例:

host.properties

代码语言:javascript
复制
web.application.endpoint.host:${host}
web.application.endpoint.port=
web.application.endpoint.context=

更多信息:要求只用于配置。无法在IDE中引入新的Java代码或条目。

有什么帮助吗?任何想法都会受到赞赏。

EN

回答 3

Stack Overflow用户

发布于 2019-07-21 11:02:37

此功能可在零代码版本1.3.9及更高版本中使用。请像${SYSTEM.PROP:host}一样使用位置保持器,例如${SYSTEM.PROPERTY:java.vendor}解析为Oracle CorporationAzul Systems, Inc.

示例链接:https://github.com/authorjapps/zerocode/blob/master/README.md#general-place-holders

票数 1
EN

Stack Overflow用户

发布于 2019-05-23 07:42:33

找到了一个解决方案,但不确定这是否是正确的方法。

步骤1:创建一个配置文件并加载系统属性。

Config.java

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    "scenarioName": "Test ...",
    "steps": [
         {
            "name": "config",
            "url": "com.test.Config",
            "operation": "readProperties",
            "request": "",
            "assertions": {}
        }
    ]
}

步骤3:在步骤配置中使用已加载的属性

test.json

代码语言:javascript
复制
 {
        "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
                 }
            }
        ]
    }

就是这样,虽然它是有效的,但我正在寻找更好的方法。

我正在尝试的一些可能的选择是:

  • 加载/配置的公共步骤(在一个地方)
  • 在json文件中直接使用属性作为{host}
  • 自定义客户端

再次感谢任何帮助/想法。

票数 0
EN

Stack Overflow用户

发布于 2021-01-07 19:18:16

我的问题是,您为什么要访问实际的主机/端口?很抱歉给你这么长的答案,但请容忍我。我认为有一个更容易的方法来达到你正在尝试的目标。我发现最好用两种方式来考虑零码的用法,

  1. 实时集成测试(我认为这就是您想要做的),这意味着这将调用一个活动的端点/服务,或者
  2. 我所指的稀薄集成测试(一个集成测试,但使用模拟端点/服务)。

考虑到这一点,这样你就有机会获得两种不同的衡量标准,

  1. 当使用模拟端点/服务时,代码的性能/弹性如何,以及
  2. 在使用实时集成测试时,实际性能如何(由于数据设置/测试设置,期望比外部负载测试慢一点)。这使您可以同时评估自己和合作伙伴的服务。

那么,除了上面的评估之外,您为什么要构建一个细化测试?这样做的真正价值在于,您仍然像在集成测试中一样,将其贯穿于代码中,但您可以像在标准单元测试中一样控制所述测试的结果。此外,由于您控制了测试的结果,相对于动态api,这可能会提高构建时测试的稳定性。

显然,您似乎已经知道如何设置集成测试了,所以我假设您很适合进行集成测试,但是稀薄集成测试呢?

要设置一个集成测试,您实际上有两个选项,

  1. 使用postman模拟服务器(https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/) a.需要建立的更多工作 b.要维护的外部配置 c.每月api调用限制
  2. 使用WireMock (http://wiremock.org/) a.用你的代码生活 b.所有地方的一切都是无限制的

如果您已经进行了集成测试,您可以将它们复制到一个新文件中并进行更新,或者只转换您现有的测试。

*回答您的具体问题*

在使用WireMock时,可以使用以下方法设置具有动态端口的动态本地服务器url。

代码语言:javascript
复制
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测试了上述内容

希望这可以帮助您回答如何动态获取测试的服务器/端口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56252109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档