InsectCXY 2024-03-29 09:26 采纳率: 0%
浏览 77

在使用apifox做接口测试的时候,如何统一配置${spring.application.name}的值或者统一替换,如果不能批量指定或者统一配置

idea使用apifox helper 上传的接口中存在以下情况如何处理:

Get方法:
    /${spring.application.name}/task/resumeJob
说明:
    ${spring.application.name}读取的为springboot的配置文件
问题:
    在使用apifox做接口测试的时候,如何统一配置${spring.application.name}的值或者统一替换,如果不能批量指定或者统一配置,测试以及维护都不方便
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-29 09:26
    关注

    引自免费微信小程序:皆我百晓生

    在Apifox做接口测试时,为了统一配置${spring.application.name}的值或替换,通常可以遵循以下步骤进行操作:

    1. 创建环境变量: 首先,你需要在项目的 .idea 文件夹中创建一个名为 application.properties 的环境变量文件。在这个文件中,添加以下内容来存储并保存应用名称作为配置变量:

      spring.application.name=your-apicall-name
      

      确保你在项目的所有类、模块或其他Java类中将这个环境变量赋值为 ${spring.application.name}

    2. 将环境变量注入到类或方法: 在需要使用环境变量的地方(例如 application.properties 中定义的应用接口),将环境变量设置为相应的值。这可以通过在类的方法调用前或方法体中的上下文变量初始化方式完成。

      @Autowired
      private String applicationName;
      
      public void doSomethingWithApplicationName(String name) {
          System.out.println("Using Application Name: " + applicationName);
      }
      
    3. 测试用例集成:如果你在多个测试用例中都依赖于不同的 application.properties 文件,确保每个测试用例都有机会加载并获取正确的环境变量。通过编写测试用例,在输入不同应用名称后打印出对应的环境变量,就可以实现对这些环境变量的一致性校验。

      @Test
      public void testApplicationName() {
          // 测试单个应用
          String singleApp = "my-app";
          when(myBean.environmentVariableValue()).thenReturn(singleApp);
      
          System.out.println("Single Application Name: " + myBean.environmentVariableValue());
      
          // 测试多个应用
          String multiApp = "${spring.application.name}";
          List<String> apps = Arrays.asList("your-app", "another-app");
          when(myBean.environmentVariableValues()).thenReturn(apps.stream()
                   .collect(Collectors.toMap(String::toLowerCase, Function.identity()));
          for (String app : apps) {
              System.out.println("Multiple Applications Name: " + myBean.environmentVariableValues().get(app.toLowerCase()));
          }
      
          // 测试继承自同一应用的子类
          String subAppName = "sub-app";
          when(myBean.environmentVariableValue()).thenReturn(subAppName);
      
          System.out.println("Sub-Application Name: " + myBean.environmentVariableValue());
      }
      
    4. 定期更新环境变量: 持续跟踪和维护应用程序之间的环境变量变化,确保在新的Spring Boot版本发布或升级时保持一致的配置信息。你可以手动更改环境中包含 application.properties 文件的位置,并运行单元测试以确认环境变量被正确引用和更新。

      @Scheduled(fixedRate = 60_000L)
      public void updateEnvironmentVariables() {
          // 获取当前应用版本信息
          Class<?> currentVersionClass = SpringApplication.class.getClassLoader().loadClass("com.example.your.project.spring.boot.current.Something");
      
          // 可能有两种情况:
          // a) 当当前应用版本与之前的版本相同,无需更新环境变量。
          if (currentVersionClass.equals(SpringApplication.class)) {
              return;
          }
      
          // b) 当当前应用版本与之前的版本不同,需要更新当前应用配置的环境变量。
          try {
              Class<?> versionClass = Class.forName("com.example.your.project.spring.boot.version.Something");
              Field environmentVariableField = versionClass.getDeclaredField("environmentVariable");
              environmentVariableField.setAccessible(true);
      
              // 获取当前应用版本的环境变量值
              String applicationVersion = versionClass.getFields().get(0).getName();
              Object previousEnvVal = environmentVariableField.get(currentVersionClass);
      
              // 如果之前版本环境变量值未改变,更新环境变量
              if (previousEnvVal == null) {
                  environmentalVariableField.set(currentVersionClass, applicationVersion);
              } else {
                  throw new IllegalStateException("Previous Environment Variable Value not changed in current application version.");
              }
          } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
              e.printStackTrace();
          }
      }
      

    以上就是使用Apifox做接口测试时统一配置${spring.application.name}的基本方案,具体实现可以根据项目需求和版本特性进行调整。对于复杂的接口测试和维护场景,可能还需要考虑其他因素,如测试数据准备、异常处理、集成测试等。在开发过程中,建议定期备份和审查环境变量,以防止意外变化导致的问题影响测试结果。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日