关于接口测试自动化的总结与思考(三)

发表于:2022-11-21 09:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿里云云栖号    来源:知乎

  TestNG 接口自动化实践
  参数化测试示例
  以 DeviceStatusHSFService 为例,测试类如下:
  public class DeviceStatusHSFServiceTest {
      private DeviceStatusHSFService deviceStatusHSFService;
      @BeforeTest(alwaysRun = true)
      public void beforeTest() {
          String envName = System.getProperty("maven.env");  //运行环境可配置
          SwitchENV switchEnv = new SwitchENV(envName);    //运行环境可配置
          deviceStatusHSFService = HsfRepository.getConsumer(DeviceStatusHSFService.class, switchEnv.getEnv(),
              "HSF", switchEnv.getHsfVersion(), "aicloud-device-center", switchEnv.getTargetIp()).getTarget();
      }
      @Test(dataProvider = "updateDeviceStatus", dataProviderClass = DeviceStatusHSFServiceTestDataProvider.class)
      public void updateDeviceStatusTest(Long userId, String uuid, DeviceStatus deviceStatus){
          Result<Boolean> result = deviceStatusHSFService.updateDeviceStatus(userId, uuid, deviceStatus);
          System.out.println("traceId:"+EagleEye.getTraceId()+result.toString());
          Boolean res = result.getResult();
          assertTrue(res);
      }
  }
  其中通过 SwitchENV 类实现运行环境可配置:
  /**
   * 自定义环境配置
   */
  public class SwitchENV {
      /**
       * 运行环境
       */
      private Env env;
      /**
       * hsf环境
       */
      private String hsfVersion;
      /**
       * 目标机器
       */
      private String targetIp;
      /**
       * 环境名称
       */
      private String envName;
      public SwitchENV(String envName) {
          Properties prop = new Properties();
          // TODO: 本地自动化测试切换环境专用
          if (envName == null) {
              envName = "pre1";
          }
          switch (envName) {
              case "online": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-online.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.ONLINE;
                  break;
              }
              case "pre1": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre1.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              case "pre2": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre2.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              case "pre3": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre3.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              default:
                  try {
                      throw new Exception("环境变量输入错误!");
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  break;
          }
          hsfVersion = prop.getProperty("hsfVersion").trim();
          targetIp= prop.getProperty("targetIp").trim();
          this.envName = envName;
      }
      public Env getEnv() {
          return env;
      }
      public String getHsfVersion() {
          return hsfVersion;
      }
      public String getTargetIp() {
          return targetIp;
      }
      public String getEnvName() {
          return envName;
      }
  }
  测试参数全部放在 DeviceStatusHSFServiceTestDataProvider 类中,实现具体的请求接口、参数、校验等数据做到与代码相隔离。
  /**
   * 自定义环境配置
   */
  public class SwitchENV {
      /**
       * 运行环境
       */
      private Env env;
      /**
       * hsf环境
       */
      private String hsfVersion;
      /**
       * 目标机器
       */
      private String targetIp;
      /**
       * 环境名称
       */
      private String envName;
      public SwitchENV(String envName) {
          Properties prop = new Properties();
          // TODO: 本地自动化测试切换环境专用
          if (envName == null) {
              envName = "pre1";
          }
          switch (envName) {
              case "online": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-online.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.ONLINE;
                  break;
              }
              case "pre1": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre1.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              case "pre2": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre2.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              case "pre3": {
                  InputStream in = SwitchENV.class.getClassLoader().getResourceAsStream(
                      "config/application-pre3.properties");
                  try {
                      prop.load(in);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  env = Env.PREPARE;
                  break;
              }
              default:
                  try {
                      throw new Exception("环境变量输入错误!");
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  break;
          }
          hsfVersion = prop.getProperty("hsfVersion").trim();
          targetIp= prop.getProperty("targetIp").trim();
          this.envName = envName;
      }
      public Env getEnv() {
          return env;
      }
      public String getHsfVersion() {
          return hsfVersion;
      }
      public String getTargetIp() {
          return targetIp;
      }
      public String getEnvName() {
          return envName;
      }
  }
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号