pytest-yaml-sanmu(二):使用hook自定义yaml用例的执行方式

前言

本文抛砖引玉,通过以下几个测试框架的封装示例,一步步引导你实现属于自己的 yaml 测试框架:

  • 加法测试

  • 计算测试

  • 接口测试

  • Web 测试

使用本插件需要对 Python 和 Pytest 较为熟练的应用经验,本文认为你已经具备这些条件。

关于本插件的基本介绍这里不再赘述,请参见前文《pytest-yaml-sanmu(一):把yaml作为测试文件的pytest插件》。

实现 yaml 加法测试

yaml 加法测试是指:

在 yaml 中编写加法的测试用例,并由 pytest 加载、执行、判断

01.设计用例

假设在进行加法测试时,需要 3 个值:

  • num1: 第一个数字

  • num2 : 第二个数字

  • expected_results:预期的计算结果

则在 yaml 中可以这样表示

num1: 111num2: 222expected_results: 333

为符合插件要求,需要加上必填字段,即为​​​​​​​

test_name: 加法测试steps:  - num1: 111    num2: 222    expected_results: 333

如果在测试用例需要包含多个步骤,或多组断言,可以在 steps 中继续增加内容

test_name: 加法测试steps:  - num1: 111    num2: 222    expected_results: 333 # 成功的用例  - num1: 111    num2: 999    expected_results: 333 # 失败的用例  - num1: 111    expected_results: 333 # 不符合要求的用例

至此, yaml 用例已设计完毕,pytest 执行结果如下:

图片

实现 hook 前执行用例

02.实现 hook

此时 pytest 虽然可以正确地识别、加载用例内容,却没有根据用例步骤进行具体动作的执行。

既没有进行加法运算,也没有对结果进行断言。

接下来通过实现 hook 将 yaml 用例步骤变为具体的用例动作

图片

实现 yaml 加法测试

实现 hook 后重新启动 pytest

图片

yaml 用例执行结果

首先看到的是,这个用例执行失败了

再细看失败原因,正是由于第二个测试步骤断言失败了

- num1: 111  num2: 999  expected_results: 333 # 失败的用例

和普通的 pytest 测试用例一样的是:当某个测试步骤执行失败,那么后续的都不再继续执行

所以我们只能看到第二个步骤失败,看不到第三个步骤失败(因为它没有执行)

如果你有多个测试步骤,力求每一个步骤都能够执行,可以考虑把步骤分散到不同的用例中。

按照一般的测试原则,用例之间相互隔离,所以就算某个用例失败了,其他用例也会继续执行

这里有一个小技巧:

我们不需要真的创建三个 yaml 文件,

只需要在同一个 yaml 在文件通过 --- 进行分隔,即可模拟出三个 yaml 文件的效果

图片

一个 yaml 文件中写多个用例

执行结果如下:

图片

多个用例的执行结果

从执行结果可以看到,1 个成功 2 个失败

失败的原因分别是因为断言失败和用例格式不正确

03.补充用例

至此,yaml 加法测试已实现,

你可以在测试用例中补充更多的步骤,或者创建更多的 yaml 文件里补充测试用例

实现 yaml 计算测试

在前面的例子中,我们只对测试步骤做了【加法计算】这一种处理,

在实际项目中,测试步骤的类型往往有多种,不同的步骤类型,需要不同的方式去执行。

接下来我们实现一个支持加、减、乘、除的计算测试,来模拟演示不同步骤类型的实现方式

01.设计用例

这一次,在测试步骤中多了一个层级,用以表示步骤的类型

test_name: 计算测试steps:  - add:  # 加      num1: 111      num2: 222      expected_results: 333
  - subtract: # 减      num1: 111      num2: 222      expected_results: -111
  - multiply : # 乘      num1: 111      num2: 222      expected_results: 222
  - divide: # 除      num1: 111      num2: 222      expected_results: 0.5

为了保持简单,本例不同的步骤类型中内容格式是相同的,但这不是强制要求,

你也可以为不同的步骤类型定义不同的内容格式、不同的处理方式

02.实现 hook

由于测试步骤发生了变化,hook 必须更新才正确处理。

在新的 hook 实现中,我们需要做到 2 点:

  1. 判断具体的步骤类型

  2. 根据不同的步骤类型,做出不同的测试动作

图片

新的 hook 实现

执行结果如下:

图片

断言失败

首先看到的是,这个用例执行失败了

再细看失败原因,却发现无法判断失败的步骤

这是因为断言写得太过简洁,可以为 assert 提供第二个参数进行断言描述,比如这样:

msg = f'测试步骤: {item.current_step_no},测试类型: {step_type}, 测试步骤: {step_data}'
assert actual_results == step_data['expected_results'], msg

修改后的执行结果如下:

图片

在断言中添加描述

PS:有计划在 yaml content 直接标注错误的步骤,但暂时没找到好的实现方式

03.补充用例

至此,yaml 计算测试已实现,

你可以在测试用例中补充更多的步骤,或者创建更多的 yaml 文件里补充测试用例

小结

通过目前这两个例子,想必你已经更直观地感受到通过 yaml 编写测试用例的步骤和思路。

如果这些内容已经消化完毕,接下来还有两个更加贴近现实的例子:基于 yaml 文件的 API 测试和 Web 测试

原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!

  • 33
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值