你的测试写全了吗?
QA设计的测试用例大部分都是面向业务的端到端测试,怎么能保证从DB来的数据通过层层service能顺利的到达前端并被正确的展示出来呢?我们可以尝试以UI和DB作为data flow的两端串起所有的测试。
场景
QA:这些个case都有测试吗?
Sign off结束了,但是代码里的测试真的覆盖了QA预期的全部用例吗?
举个例子
User should see new file in bold User should see downloaded(or upload by himself) file not in bold
以这两个case为例,下图展示了数据在代码中的流动过程:
第一步:FileSharing Frontend
should_be_shown_as_new_file should_not_be_new_file_after_download
get isNew() {
return !!this.isNewDocumentFromOthers;
}
第二步:FileSharing Backend
/files
/user/types
/user/verified
根据上一步得到的信息可以知道/files就是要找的请求
{
"id": "9a4af273-2d4e-4491-8f10-a93d2ba15e42",
"country": "US",
"fileName": "Instruction of FileSharing System",
"documentType": "Message",
"isNewDocumentFromOthers": true,
"uploadedAt": "12/16/2019",
"uploadedBy": "ad77d3fc-e0af-499e-8a71-ab020073db34",
"year": 2000
}
在FileController的测试文件里找到一个测试
should_flag_new_files_uploaded_from_others
public bool IsNewDocumentFromOthers(Guid userId)
{
return IsUploadedFromOthers() && DocumentType != DocumentType.Consent &&
(DownloadHistories == null ||
DownloadHistories.ToList()
.TrueForAll(HasNotDownloadedByUser));
}
可以知道FileSharing Backend需要File Service传来IsUploadedFromOthers/DocumentType和DownloadHistory的信息
第三步:File Service
should_get_by_user_id
测试覆盖分析
UI层面没有对html做测试(风险较大) 现有的测试大部分集中在API层面,service层以下的UT测试比较少 服务之间缺乏契约测试导致修改一个API的时候只能人工检查被影响的范围 测试使用的内存DB可能跟实际DB有差别(风险较小)
改进
在signoff的时候DEV可以试着给QA说明现有代码的结构,解释数据流动的方式,帮助QA理解目前测试覆盖的范围,评估没有测试的部分风险有多大,找出manual test的重点 后端service数据传递时如果是靠API测试验证,则需要保证每个property都被测到 保证前端每个view model的行为和状态都有JT cover