动机
vllm中的一些测试既不充分也不易于阅读,例如:
vllm/tests/core/test_scheduler.py
8344f77的第293行到第297行
| | seq_group_meta, out=schedule_and_update_computed_tokens(scheduler) |
| | assertlen(out.scheduled_seq_groups) ==2 |
| | assertout.num_batched_tokens==2 |
| | assertout.blocks_to_swap_out!= {} |
| | assertout.blocks_to_swap_in== {} |
测试assert out.blocks_to_swap_out != {}
不充分,这些行仅测试输出的某些属性。
建议更改
我们可以使用来自https://github.com/ezyang/expecttest的内联黄金测试(也称为预期测试):https://github.com/pytorch/pytorch/blob/8b4d62009ddbc24a69dfcdbebc2cc84e4b2ee8f5/test/test_python_dispatch.py#L645-L654
回复期限
- 无响应*
抄送列表
- 无响应*
其他事项
- 无响应*
4条答案
按热度按时间disho6za1#
工作流程:
我们只需编写
assert_expected_inline(str(obj), """""")
,然后使用EXPECTTEST_ACCEPT=1
运行。""""""
将自动更新。一个最小可行示例:
7bsow1i62#
如果我们重构调度器或其他待测试组件,我们如何知道测试失败是由于未定义行为的变化还是真正的故障?
lo8azlld3#
当我们更新代码,如调度器或其他待测组件时,更改的作者需要使用
EXPECTTEST_ACCEPT=1
运行以自动更新测试,并确保更新后的测试是有意义的。工作流程是相同的,只是我们有更好的方法来Assertobj
的形式与我们想要的完全相同,而不仅仅是测试一些属性。好处是,更新测试与运行测试相同。我们不需要像我在 #4659 中所做的那样手动更新每个测试。6l7fqoea4#
这是一个关于测试的妥协,因为人们通常会在没有仔细检查更改的情况下批准它们。我们实际上应该投资于一个更可测试的调度器,这样测试就能帮助更容易地进行修改(而不是拖慢进度)。话虽如此,这作为短期的权宜之计是可以接受的。