【问题标题】:Zerocode: Set system property in host configuration fileZerocode:在主机配置文件中设置系统属性
【发布时间】:2019-05-22 08:08:52
【问题描述】:

配置: zerocode-tdd.1.3.2

${主机} 在运行时,使用 -D java 选项设置系统属性。一切都很好。

问题/我需要什么: 在单元测试时,系统属性未设置,主机未解析。 App使用Junit和Zerocode,想简单配置Zerocode来设置系统属性。

例子:

host.properties

web.application.endpoint.host:${host}
web.application.endpoint.port=
web.application.endpoint.context=

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

有什么帮助吗?任何想法都表示赞赏。

【问题讨论】:

    标签: automated-tests integration-testing junit5 zerocode


    【解决方案1】:

    此功能在零码版本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

    【讨论】:

      【解决方案2】:

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

      第 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 步:在步骤配置中使用加载的属性

      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
                       }
                  }
              ]
          }
      

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

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

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

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

      【讨论】:

        【解决方案3】:

        我的问题是你为什么要访问实际的主机/端口?对不起,答案很长,但请耐心等待。我认为有一种更简单的方法可以实现您的尝试。我发现最好从两个方面考虑零代码的使用,

        1. 实时集成测试(我认为您正在尝试这样做)[意味着这称为实时端点/服务],或者
        2. 我称之为精简测试(集成测试,但使用模拟端点/服务)。

        以这种方式思考会给您提供两种不同指标的机会,

        1. 在使用模拟端点/服务时,我的代码的性能/弹性如何,并且
        2. 当使用实时集成测试时,实际生活中的粗略性能是多少(由于数据设置/测试设置,预计会比外部负载测试慢一些)。 这让您可以评估自己和合作伙伴的服务。

        那么在上面的评估之外,您为什么要构建一个thintegration 测试?这样做的真正价值在于,您仍然可以像在集成测试中一样通过代码,但您可以像在标准单元测试中一样控制所述测试的结果。此外,由于您可以控制测试结果,因此与实时 api 相比,这可能会提高构建时间测试的稳定性。

        显然,您似乎已经知道如何设置集成测试,所以我假设您很适合去那里,但是thintegration 测试呢?

        要设置thintegration 测试,您确实有两个选择,

        1. 使用邮递员模拟服务器 (https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/)

          一个。更多的设置工作

          b.要维护的外部配置

          c。每月 api 调用限制

        2. 使用 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 测试的

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

        【讨论】:

          猜你喜欢
          • 2011-03-21
          • 1970-01-01
          • 2016-02-07
          • 2011-12-02
          • 2019-01-25
          • 2016-07-02
          • 1970-01-01
          • 2014-10-25
          • 1970-01-01
          相关资源
          最近更新 更多