CheckBox Navigation 1
-
-
- Checkbox nested test plans tutorial
-
- 1. Quick start
- 2. Use cases
-
- 1)How to use a base test plan?
- 2) How to use a base test plan, but without running them last?
- 3) How to change category or certification status of jobs coming from nested parts?
- 4) How to include a nested part from another namespace?
- 5) Is it possible to have multiple levels of nesting?
- 6) How to use a base test plan except a few jobs?
- 3. Known limitations
-
Checkbox nested test plans tutorial
我们设计Checkbox来使用测试提供程序。
因此,测试工具和测试是完全分开的。
Checkbox可以从多个提供程序加载测试。
它们可以作为Debian包安装,也可以从源代码加载以构建快照。
要加载测试并运行它们,我们需要一个测试计划。
Checkbox的测试计划是要逐一运行的作业(测试)id的集合。
大多数时候,当我们创建一个新的测试计划时,需要包括一个通用的部分,这是其他几个测试计划的共同部分。
但是测试计划单元不允许这样的特性,我们最终在我们的项目中产生了许多重复。
而复制意味着重复的工作,以保持所有这些测试计划部分的同步和最新。
如果现在可以嵌套测试计划呢?
一个是由一个或多个“基本测试计划”的部分聚合而来的?
让我们详细回顾一下checkbox从0.29开始提供的新特性
1. Quick start
唯一要添加到您的测试计划的是您想要包含的测试计划的标识符,如下所示:
nested_part:com.canonical.certification::my_base_test_plan
然后,测试计划的顺序将是测试计划include
+所有嵌套的测试计划include
,按照这个顺序。
加载嵌套部分将加载include
、mandatory_include
和bootstrap_include
部分以及所有覆盖(类别、认证状态)。
注意:所有强制包含将总是首先运行。
注意:如果作业定义与定义测试计划的提供者位于同一个名称空间中,则可以以缩写形式(不带名称空间前缀)列出作业和测试计划id。
2. Use cases
这里提供了以下所有示例:
https://github.com/yphus/nested_testplan_demo要在本地测试它们,你只需要开发这3个提供商并运行其中一个演示启动程序:
git clone https://github.com/yphus/nested_testplan_demo.git
cd nested_testplan_demo/
find . -name manage.py -exec {
} develop \;
./demo1 # or demo2, 3, 4, 5, 6.
-
1)How to use a base test plan?
让我们使用两个提供程序,它们都属于同一个命名空间
com.ubuntu: com
ubuntu: foo
和com.ubuntu:baz
Baz provider包含以下单元、4个作业和一个测试计划(我们的基本测试计划):
id: hello command: echo hello flags: simpleid: bye command: echo bye flags: simpleid: mandatory command: true flags: simpleid: bootstrap command: echo os: ubuntu plugin: resource flags: simpleunit: test plan id: baz_tp _name: Generic baz test plan _description: This test plan contains generic test cases estimated_duration: 1m include:hello certification-status=blockerbye certification-status=non-blocker mandatory_include:mandatory certification-status=blocker bootstrap_include:bootstrap
Foo provider包含两个新测试:
id: always-pass command: true flags: simpleid: always-fail command: true flags: simple
我们希望在新的测试计划(在Foo提供程序中)中重用
baz_tp
和两个新的测试。这样的测试计划如下:unit: test plan id: foo_tp_1 _name: Foo test plan 1 _description: This test plan contains generic tests + 2 new tests include:always-pass certification-status=blockeralways-fail nested_part:baz_tp
jobs的执行顺序是:
-bootstrap
-mandatory
-always-pass
-always-fail
-hello
-bye
-
2) How to use a base test plan, but without running them last?
让我们保留前面的提供程序Foo和Baz。这一次,我们希望在
always-pass
和始always-fail
之间运行基本测试计划。为了更改作业的执行顺序,新的测试计划将由几个嵌套的部分组成,因为它们将遵循列表的顺序。让我们在Foo provider中创建两个新的测试计划,我们将使用它们作为嵌套部分来微调作业顺序:unit: test plan id: foo_tp_part1 _name: Foo test plan part 1 _description: This test plan contains part 1 estimated_duration: 1m include:always-pass certification-status=blockerunit: test plan id: foo_tp_part2 _name: Foo test plan part 2 _description: This test plan contains part 2 estimated_duration: 1m include:always-fail
最终的测试计划将只包含嵌套的部分:
unit: test plan id: foo_tp_2 _name: Foo test plan 2 _description:This test plan contains generic tests + 2 new tests (but ordered differently) include: nested_part:foo_tp_part1baz_tpfoo_tp_part2
注意:总是保持
include
部分(即使是空的),因为这个字段是必须的,否则验证将失败(并且测试计划永远不会通过Checkbox加载)jobs的执行顺序是:
-bootstrap
-mandatory
-always-pass
-hello
-bye
-always-fail
-
3) How to change category or certification status of jobs coming from nested parts?
测试计划覆盖机制仍然适用于嵌套部分。
例如,来自Baz提供程序的hello
作业被定义为拦截器,并且没有类别。让我们更新之前的用例:
unit: test plan id: foo_tp_3 _name: Foo test plan 3 _description: This test plan contains generic tests + 2 new tests + overrides include:always-pass certification-status=blockeralways-fail nested_part:baz_tp certification_status_overrides:apply non-blocker to hello category_overrides:apply com.canonical.plainbox::audio to hello
要检查重写是否如预期的那样工作,您可以打开json导出器报告:
"result_map": { "com.ubuntu::hello": { "summary": "hello","category_id": "com.canonical.plainbox::audio","certification_status": "non-blocker" [...]
-
4) How to include a nested part from another namespace?
您可以从另一个名称空间中包含嵌套的部分,只需在测试计划标识符前面加上提供者名称空间。
让我们使用第三个提供程序(Bar,在
com.ubuntu
命名空间)作为一个例子:id: sleep command: sleep 1 flags: simpleid: uname command: uname -a flags: simpleunit: test plan id: bar_tp _name: bar test plan _description: This test plan contains bar test cases estimated_duration: 1m include:sleepuname
现在在provider Foo中,一个测试计划包含了provider Bar中的一个部分,看起来像这样:
unit: test plan id: foo_tp_4 _name: Foo test plan 4 _description:This test plan contains generic tests + 2 new tests + 2 tests from adifferent namespace provider include:always-pass certification-status=blockeralways-fail nested_part:baz_tpcom.ubuntu::bar_tp
jobs的执行顺序是:
-bootstrap
-mandatory
-always-pass
-always-fail
-hello
-bye
-sleep
-uname
-
5) Is it possible to have multiple levels of nesting?
是的,可以有多个层次的嵌套,一个嵌套部分是由另一个嵌套部分构建的,每个层次带来它自己的一组新测试。
让我们向供应商Baz添加一个新的测试计划:
unit: test plan id: baz_tp_2 _name: Generic baz test plan 2 _description: This test plan contains generic test cases + a nested part include:hello certification-status=blockerbye certification-status=non-blocker mandatory_include:mandatory certification-status=blocker bootstrap_include:bootstrap nested_part:com.ubuntu::bar_tp
正如您所看到的,这个测试计划包含了提供者栏中的一部分(与前面的例子中使用的相同)。
在提供程序Foo中,我们可以创建一个新的测试计划,包括baz_tp_2
:unit: test plan id: foo_tp_5 _name: Foo test plan 5 _description: This test plan is built from multiple level of nested test plans include:always-pass certification-status=blockeralways-fail nested_part:baz_tp_2
jobs的执行顺序仍然是:
-bootstrap
-mandatory
-always-pass
-always-fail
-hello
-bye
-sleep
-uname
-
6) How to use a base test plan except a few jobs?
测试计划单元支持一个可选字段 -
exclude
- 我们可以使用该字段从嵌套的include 包含
部分中删除作业。注意:
exclude id
不能删除属于mandatory_include
部分的作业(嵌套或非嵌套)。
下面的测试计划(来自provider Foo)不会运行provider Baz的hello
任务:unit: test plan id: foo_tp_6 _name: Foo test plan 6 _description: This test plan contains generic tests + 2 new tests - hello job include:always-pass certification-status=blockeralways-fail exclude:hello nested_part:baz_tp
jobs的执行顺序是:
-bootstrap
-mandatory
-always-pass
-always-fail
-hello
-bye
3. Known limitations
如果嵌套部分正在调用自己,或者嵌套链中的某个地方存在这样的循环,则可以创建无限循环。
Checkbox不会喜欢这样,目前还没有验证来防止它,请注意!