【测试开发】Junit5 + YAML 轻松实现参数化和数据驱动,让 App 自动化测试更高效(二)

 

上篇文章提到了数据驱动可以在几个方面进行:

  • 测试数据的数据驱动 

  • 测试步骤的数据驱动 

    • 定位符 

    • 行为流 

  • 断言的数据驱动 

下面将详细解说如何进行数据驱动。

5. 数据驱动

5.1 测试数据的数据驱动

5.1.1 Junit5的 参数化

说到测试数据的数据驱动,就必然离不开测试框架的参数化,毕竟测试数据是传给用例的,用例是由框架来管理的,这里以目前最推荐使用的Junit5框架为例,介绍参数化的使用

@ParameterizedTest+@ValueSource参数化

在Junit5中,提供了@ParameterizedTest注解来实现方法的参数化设置,另外@ValueSource注解用来存放数据,写法如下:

@ParameterizedTest@ValueSource(strings = { "racecar", "radar", "able was I ere I saw elba" })void palindromes(String candidate) {
      assertTrue(StringUtils.isPalindrome(candidate));}

@ParameterizedTest+@CsvSource参数化

Junit5还提供了@CsvSource注解来实现csv格式的参数传递,写法如下:

@ParameterizedTest@CsvSource({
          "滴滴,滴滴出行",        "alibaba,阿里巴巴",        "sougou,搜狗"})public void searchStocks(String searchInfo,String exceptName)   {
      String name = searchpage.inputSearchInfo(searchInfo).getAll().get(0);    assertThat(name,equalTo(exceptName));}

@ParameterizedTest+@CsvFileSourc数据驱动

最终,Junit5提供了@CsvFileSourc注解来实现csv数据格式的数据驱动,可以传递csv文件路径来读取数据,写法如下:

  • csv数据文件:

pddxiaomipdd
  • 用例实现:

@ParameterizedTest@CsvFileSource(resources = "/data/SearchTest.csv")void choose(String keyword){
  ArrayList<String> arrayList = searchPage.inputSearchInfo(keyword).addSelected();}

对于简单的数据结构,可以使用CSV,上面也说过,较为复杂的数据结构,推荐使用yaml,接下来看如何用yaml文件完成测试数据驱动。

@ParameterizedTest+@MethodSource参数化

  • 先来看Junit5提供的另一个注解——@MethodSource,此注解提供的方法是我们做测试数据驱动的核心,它可以让方法接收指定方法的返回值作为参数化的入参,用法是在注解的括号中填入数据来源的方法名,具体用法如下:

@ParameterizedTest@MethodSource("stringProvider")void testWithExplicitLocalMethodSource(String argument) {
      assertNotNull(argument);}
static Stream<String> stringProvider() {
      return Stream.of("apple", "banana");}

@ParameterizedTest+@MethodSource参数化 + jackson yaml数据驱动

有了@MethodSource的参数化支持,我们就可以在方法中利用jackson库对yaml文件进行数据读取,从而完成数据驱动了

  • 现有如下yaml数据文件,我需要取出testdata中的测试数据

  username: 888  password: 666  testdata:    滴滴: 滴滴出行    alibaba: 阿里巴巴    sougou: 搜狗
  • 创建Config类:

import java.util.HashMap;
public class Config {
      public String username;    public String password;    public HashMap<String,String> testdata = new HashMap<>();}
  • 创建Config对象,与yaml文件建立映射关系,读取数据,通过@MethodSource完成数据的参数化传递

public class TestSteps {
  
  @ParameterizedTest    @MethodSource("YamlData")    public void search(String searchInfo,String exceptName)   {
          String name = searchpage.inputSearchInfo(searchInfo).getAll().get(0);        assertThat(name,equalTo(exceptName));    }
    static Stream<Arguments> YamlData() throws IOException {
      ObjectMapper mapper = new ObjectMapper(new YAMLFactory());    Config data = mapper.readValue(Config.class.getResourceAsStream("/demo2.yaml"), Config.class);    List<Arguments> list = new ArrayList<>();    Arguments arguments = null;    for (String key : data.testdata.keySet()) {
          Object value = data.testdata.get(key);        arguments = arguments(key, value);        list.add(arguments);    } 
  • 38
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值