51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3512|回复: 1
打印 上一主题 下一主题

[转贴] 自动化测试用例如何进行参数化

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:34
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-6-11 09:50:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    参数化
      如官网所述,我们可以利用@ParameterizedTest+@ValueSource或@CsvSource进行参数化设置。

      参数化实例:
      以雪球APP股票搜索功能为例
          @ParameterizedTest
          @CsvSource({
                  "滴滴,滴滴出行",
                  "alibaba,阿里巴巴",
                  "sougou,搜狗"
          })
          public void 搜索股票(String searchInfo,String exceptName)   {
              String name = searchpage.inputSearchInfo(searchInfo).getAll().get(0);
              assertThat(name,equalTo(exceptName));
          }

      数据文件驱动
      官网中给出了@CsvFileSource的方法:

      csv数据文件驱动实例:
      csv数据文件:
      pdd  xiaomi
      pdd

      测试用例demo
          @ParameterizedTest
          @CsvFileSource(resources = "/data/SearchTest.csv")
          void 选择(String keyword){
          ArrayList<String> arrayList = searchpage.inputSearchInfo("xiaomi").addSelected();
          }

      利用yaml文件进行数据文件驱动
      先看如何对yaml文件进行数据操作
      官方地址:https://github.com/FasterXML/jac ... xt/tree/master/yaml
      阮一峰教程:http://www.ruanyifeng.com/blog/2016/07/yaml.html
      从官网中可以得到如下信息
      Maven dependency
      To use this extension on Maven-based projects, use following dependency:
      <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.9.2</version>
      </dependency>

      Usage
      Simple usage
      Usage is as with basic JsonFactory; most commonly you will just construct a standard ObjectMapper with com.fasterxml.jackson.dataformat.yaml.YAMLFactory, like so:
      ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
      User user = mapper.readValue(yamlSource, User.class);

      利用官网提供的信息可以封装方法对yaml文件进行操作:
      public static GlobalConfig load(String path){
              ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
              try {
                  GlobalConfig config = mapper.readValue(GlobalConfig.class.getResource(path), GlobalConfig.class);
                  return config;
              } catch (IOException e) {
                  e.printStackTrace();
                  return null;
              }
          }

      再来看Junit5提供的一个方法 @MethodSource

      利用此方法加载yaml文件中的数据,进行参数传递,完成数据文件驱动的目的
      · yaml文件:
      xqDemoConfig:
        username: 888
        password: 666
        testdata:
          滴滴: 滴滴出行
          alibaba: 阿里巴巴
          sougou: 搜狗

      测试用例demo
          @ParameterizedTest
          @MethodSource("YamlData")
          public void 搜索股票2(String searchInfo,String exceptName)   {
              String name = searchpage.inputSearchInfo(searchInfo).getAll().get(0);
              assertThat(name,equalTo(exceptName));
          }
          static Stream<Arguments> YamlData(){
              GlobalConfig config =GlobalConfig.load("/data/globalConfig.yaml");
              List<Arguments> list = new ArrayList<>();
              Arguments arguments = null;
              for (String key : config.xqDemoConfig.testdata.keySet()) {
                  Object value = config.xqDemoConfig.testdata.get(key);
                  arguments = arguments(key, value);
                  list.add(arguments);
              }
              return Stream.of(list.get(0),list.get(1),list.get(2));
          }

      效果演示:

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 04:35 , Processed in 0.068855 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表