定向班第二期_测试框架封装_20191116

BasePage的封装

测试步骤数据驱动

  • 操作步骤
  • 元素定位符
  • 多平台、多版本、多个备选定位符
  • 操作步骤不同,直接使用文件区分、方法名区分、步骤区分

测试用例的执行流程

  • 参数化用例,读取Parameters指定的数据源,对应到TestNG的data provider,或者JUnit5的MethodSource
  • 读取TestSearch.yaml读取三行测试数据
  • 对每一行数据做如下处理
  • 参数化执行 stock=alibaba
  • 执行单个参数化的用例 searchPage.search(stock).getCurrentPrice()
  • SearchPage中的search方法被调用,search(‘alibaba’)
  • 参数保存:keyword=‘alibaba’ params={‘keyword’: “alibaba”}
  • 测试步骤数据驱动 parse steps,从SearchPage.yaml中读出${keyword}
  • 测试步骤参数化:用传递进来的keyword命名变量,也就是内容为keyword=alibaba这个值替换
  • 测试步骤:getAttribute get关键字 结果内容保存为data,当dump出现的时候,把数据保存为 results={ ‘price’: data}
  • 读取result数据获得中间的各种控件读取结果
  • 断言

属性的底层识别符

public enum Attribute {
    CHECKABLE(new String[]{"checkable"}),
    CHECKED(new String[]{"checked"}),
    CLASS(new String[]{"class", "className"}),
    CLICKABLE(new String[]{"clickable"}),
    CONTENT_DESC(new String[]{"content-desc", "contentDescription"}),
    ENABLED(new String[]{"enabled"}),
    FOCUSABLE(new String[]{"focusable"}),
    FOCUSED(new String[]{"focused"}),
    LONG_CLICKABLE(new String[]{"long-clickable", "longClickable"}),
    PACKAGE(new String[]{"package"}),
    PASSWORD(new String[]{"password"}),
    RESOURCE_ID(new String[]{"resource-id", "resourceId"}),
    SCROLLABLE(new String[]{"scrollable"}),
    SELECTION_START(new String[]{"selection-start"}),
    SELECTION_END(new String[]{"selection-end"}),
    SELECTED(new String[]{"selected"}),
    TEXT(new String[]{"text", "name"}),
    // The main difference of this attribute from the preceding one is that
    // it does not replace null values with empty strings
    ORIGINAL_TEXT(new String[]{"original-text"}, false, false),
    BOUNDS(new String[]{"bounds"}),
    INDEX(new String[]{"index"}, false, true),
    DISPLAYED(new String[]{"displayed"}),
    CONTENT_SIZE(new String[]{"contentSize"}, true, false);

断言的数据驱动

框架优化

持续集成

总结

数据驱动的作用

  • 面向非技术人员,比如业务测试、产品、外包
  • 如果你的团队都是测试开发,可以直接用代码,而不用考虑测试步骤的数据驱动
  • 数据化、智能化、录制回放、自动生成case等生态工具依赖于数据驱动
关闭