模板化

为了使测试用例的编写更加简单快捷,Tiga 实现了一套可扩展的模板化引擎,用户只需结合自己的场景简单扩展模板的能力,即可实现 配置即用例 的能力。除此之外,Tiga 也会针对通用化场景提供预置模板,支持开箱即用。

使用方法

通过 tiga.template(name?) 方法可以获取一个新的模板实例(Template),然后可以调用实例上的各方法注入相关配置,最终调用 template.exec() 方法执行用例模板。

// 使用 http-mock 预置模板
tiga.template('http-mock')
.config({
env: 'web',
pageUrl: 'https://wq.jd.com/mcoss/wxmall/home',
specs: [{
name: '主接口数据异常测试',
// 注入接口 mock 规则
mock: [{
test: new RegExp('func=home_cover', 'g'),
data: { status: 500 }
}]
// 采用截图比较的断言方式
screenshot: true
}]
})
.exec()

执行结果与下图类似:

执行结果

模板扩展

Tiga 的模板支持插件化扩展,用户可以通过插件钩入(hook)到用例执行的每个关键节点,从而注入自定义的执行步骤,扩展模板用例的能力。

插件的详细写法可以参考 Class: TemplatePlugin

插件化架构是基于 Tapable 实现的,因此支持多插件同步运行,同时 Tiga 在挂载插件时会自动化完成 Tapable 的事件绑定,用户无需关心 taptapAsynctapPromise 等方法。

注意,每个插件类都要声明唯一的插件名属性 name

插件挂载可以通过下面两种方式完成:

  • template.plugin(Plugin)

    class MyPlugin {
    name: 'MyPlugin'
    async beforeAllSpecs(store) {}
    }
    // 通过 plugin() 注入单个插件
    tiga.template()
    .plugin(MyPlugin)
    .config({ ... })
    .exec()
  • template.config(options)

    class MyPlugin {
    name: 'MyPlugin'
    async beforeAllSpecs(store) {}
    }
    // 通过 config() 批量注入插件
    tiga.template()
    .config({
    plugins: [MyPlugin]
    })
    .exec()

另外,可以参考预置模板 http-mock 的写法。

模板插件生命周期

Tiga Template Plugin 生命周期

预置模版库

Tiga 针对比较常用的场景提供了预置模板,可以直接通过 template(name) 配置使用。

Template NameDescription
http-mock模拟数据异常,提供截图像素对比/页面元素节点两种断言方式