2018年5月にはダボインタフェースのテストに接触した、テスト対象が主な事業CRUD関連マイクロサービス・インタフェースのための基礎データを提供することで、インターフェース・ロジックはシンプルですが、かなりの数のバグが見つかりました。
次のようにマイクロサービスクラスインターフェース・テスト・ポイントと共通のバグを要約:
の価値を考えてみましょう | よくある質問 | 注アイテム | |
---|---|---|---|
パラメータ |
空の ヌル [] 「」 未定義 |
図1に示すように、ヌル・ポインタ例外java.lang.NullPointerExceptionが
|
必須のパラメータ値が空ではないかもしれない、必要性の治療を言い渡され、空 |
正しいです | 要件を満たしていない、1、あなたはインターフェイスを呼び出すことができますが、インタフェースが渡されていない小切手の内容を返します。 2、行方不明の内容を返します。 コンテンツは、大量のデータを返された場合、図3に示すように、秩序の合理性を示し、 4、インタフェースの呼び出し機能は有効になりません、需要に沿ったものではありません |
1、返されたコンテンツの正確性を確認する必要があります 2は、返されたコンテンツの整合性をチェックする必要があります 図3は、リターン・コンテンツへの注文の妥当性をチェックする必要があります 4、インターフェース呼び出しの正確さをチェックする必要 |
|
間違いました (DOESはないという記録に対応する、存在しない、不正な形式) |
|||
削除されました (非表示/無効/捨てられました) |
|||
特殊タイプ (基礎となるデータサービス属性のおなじみの特性の後、関連するデータ・ディクショナリ、特別な注意データ値をまとめることができます) 1、デフォルト 2、デモンストレーションのために 3、入力しないでください 4、関係(親、子、子会社)があります 待ち |
図1は、プロセスが開いたまま 2、フィルタリングされていないデータのデモクラス(例えば、情報の提示は、他の通常の統計情報に影響を与えるべきではありません) 図3に示すように、特定の製品の特定の種類の機能が限定されるものではなく、関数入口 未処理に関連するオブジェクトパラメータ値の複雑な関連ロジックより複雑なタイプがあり、4、 |
1、予約パラメータの種類は制約処理に対応して行われる特別な意味を持っています 図2に示すように、正常な非ユーザー生成されたデータ(ラインテスト、デモンストレーション)フィルタのように、他のユーザーが通常の使用に影響を与えません 権限制限の異なるタイプ間3は、明らかである入口を制限する必要があれば、それは、生成されたデータの通常の使用に影響を与えません 図4に示すように、パラメータ値のタイプが存在するより複雑なオブジェクト、実行する必要があると考えるに対応するプロセス 5、ビジネスに精通し、可能なタイプと特殊な状況のパラメータを理解 |
|
境界値、臨界値 | 1、入力パラメータ200、それは「せいぜい200」を言わない(実際には、200にプロンプトに従い正常ですが、例外がスローされますヒント)
|
含めるか否する1、ノート限界境界値条件が関係、明確な対応するメッセージを含みます 「いいえ以上、未満、以上で、以下に等しい以上、より小さい、より大きい、」 |
|
内部クラス、パラメータ | 内部パラメータは、対応する制限処理を行うことなく、内部パラメータ又はオブジェクトを含む1、 | 図1に示すように、内部パラメータも確認することができ | |
これは、内部インターフェースが含まれているインタフェース | 1、接口包含内部接口,但是相关限制条件和校验规则不一致 | 1、使用内部接口,需要认真了解内部接口信息,至少要看看内部接口的文档,特别注意限制条件,保持里外一致
|
|
多个参数 | 1、各种条件的排列组合 2、参数间的关系不匹配 |
1、组合后的参数校验失效、错误 2、参数间有关系,但未作相关判断限制(比如老师加入部门,但未判断老师所在学校与部门所在学校是否一致;用户A的工单用用户B的登录token也能成功绑定;开始时间大于结束时间未限制) |
1、保持严谨的逻辑,清晰地处理各个参数的限制,并对组合参数做处理 2、考虑参数间的显性、隐性关系,校验必要的关系匹配性 |
接口类型 |
取值考虑 |
常见问题 |
注意项 |
---|---|---|---|
增!!!(出现bug的大头) | 1、插入数据做边界限制校验 2、插入数据的正确性 |
1、当插入超长字符、超边界数字、超大list时,程序异常 2、当插入的参数值是不存在、已删除、不正确、空的对象取值时,仍可以新增成功
|
1、新增的数据需要保证插入内容与数据表字段限制设计相符或与业务要求一致 2、新增数据的正确性需要保证,或者事先明确是否由业务端调用方做强限制 |
删 | 1、删除后未对相关联的记录做处理 | 1、考虑好删除的影响范围 | |
改 | 1、数据更新但updatetime未更新 2、数据对象更新但相关的相关记录未更新 3、更改影响到了不需要更改的内容 4、对已删除的记录仍进行更新处理 |
1、检查更新时间 2、考虑影响范围,如果数据更改会影响其他有关系的数据、数据表记录也需要同步更新 3、推荐使用文本对比工具等(例如Beyond Compare )检查调用接口前后数据表的变化 4、判断到记录已删除时,更新应不生效 |
|
查 | 1、未清晰相关限制,导致查询失败 (比如,搜索引擎ES设置了最大只能返回10000条; 在mybaits里针对Integer类型的0值会被默认当做空) 2、当一个表中有多个时间相关的字段时,判断时间取错字段 3、当查询参数有多个时,通过一些排列组合出的参数组合,sql拼接错误或查询逻辑混乱,查询结果错误 4、查询子关系时,未按要求过滤父对象、参数自身 |
1、检查相关内容的限制条件 2、检查所取时间字段符合需求,区分好不同时间的含义 3、假设查询参数是abc,那么a、b、c、ab、ac、bc、abc的查询组合都需要是正常的,要理清逻辑,注意sql的拼接是否合理 4、对包含、非包含关系做处理,明确需求与实现 |
数据库、表相关 |
取值考虑 |
常见问题 |
注意项 |
---|---|---|---|
超长 | Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name' at row 1 | 设置合理的参数值长度,对超长的做限制处理,抛出对应异常提示 | |
超出范围 (min-1,max+1) |
Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'count' at row 1 |
设置合理的参数值范围,对超出范围的做限制处理,抛出对应异常提示 | |
异步 | |||
sql语句的字段名写错(写成别的字段、大小写错误) | 1、不粗心大意,注意检查sql语句字段正确性 2、设计数据库数据表时,做好注释、备注信息,让字段含义清晰 3、字段命名保持一定规律、慎用大小写 |
||
sql查询结果在程序中映射成不对应的类型,导致接口查询对象为空 | 注意类型映射处理,保证类型一致 |
缓存 |
取值考虑 |
常见问题 |
注意项 |
---|---|---|---|
1、第一次多条件查询,生成对应的缓存。当第二次使用变更其中一个条件来查询时,所取缓存内容仍为上一次查询内容,不正确 | 1、注意缓存设计需要合理。 |
mq |
取值考虑 |
常见问题 |
注意项 |
---|---|---|---|
触发条件 | 1、在不该发的时候发了
|
1、检查触发mq的条件是否符合需求 |
|
作用对象 | 1、在不对应的对象类型上发了 | 1、检查mq的tag与对象类型是否对应 |
|
关联mq | 1、场景未触发关联mq的实际条件时也发了mq | 1、检查mq的直接触发条件是否必然决定了关联mq的发送,不是的话要加判断限制 (比如取消老师某班某科目并不必然决定老师退出该班级,需要加判断该老师是否在某班还任课其他科目) |
|
mq内容 | 1、消息体中的信息缺失 | 1、检查消息的各项信息,完整且正确 | |
并发、性能 | mq消息繁忙导致消息发送失败 | 做好mq中间件的维护和监控 |
结果校验 |
测试点 |
常见问题 |
注意项 |
---|---|---|---|
检查抛出的异常的提示文案 | 1、错别字 2、与实际操作不符 |
1、不粗心大意,注意检查文案正确性 2、复制粘贴后记得修改正确,符合需求,或者直接按需求文档做复制源,而不是上一个接口文案
|
|
检查正常返回结果 | 1、可以调用接口,但是接口返回的内容校验不通过,不符合需求 2、返回内容缺失,需求要求的参数值返回null 3、返回内容的展示顺序不合理,数据多且无排序过滤,业务拿到数据后使用不便 4、返回内容中未过滤已删除的deleted=1的记录 |
1、需要检查返回内容的正确性 2、需要保证返回内容的完整性,需求要求的参数值不返回空值 3、返回内容如果是批量数据,需要检查返回内容的顺序合理性,按需求来,需求没有细化时需要确认 4、返回内容中需要明确是否有过滤相关无用数据 |
接口性能 |
测试点 |
常见问题 |
注意项 |
---|---|---|---|
接口耗时 | 接口耗时过长 | 1、使用运维平台提供的功能,配置好项目的监控 2、配置好接口的耗时的告警阈值,并设置好相关项目的异常通知联系人 3、关注链路监控中耗时比较大的接口,考虑是否需要优化 4、检查使用的sql语句的效率 5、若接口内部依赖其他接口,当内部接口返回异常或者请求超时时需要做相关处理 6、接口延迟重试等配置需要合理,请检查下告警配置 |
|
并发 | 1、接口存在高并发使用场景但未做相关对应的压力测试,上线后发现性能不佳 2、并发写操作,插入数据唯一性被破坏 3、锁 |
1、事先根据用户量、用户使用场景,送测前评估好做压力测试的必要性,明确压力测试的目标状态 2、注意并发写场景下,内容唯一性限制 (对于唯一性有严格要求的内容,需要监控线上重复数据是否存在,避免旧版本已引起该类问题而未被发现处理) 3、注意异步锁、同步锁、线程等设计的合理性 |
接口代码备注、接口文档问题 |
注意项 |
---|---|
接口文档中的版本号错误,导致引用不到对应的类 | 1、注意检查接口文档信息的正确性(版本号) 2、接口文档能放在云平台、线上,就别放在本地 |
已废弃的接口未备注 |
已废弃的需要有相关标识 |
未废弃的接口备注要废弃或已废弃 | 1、注意接口代码中的备注,不能添加多余干扰信息,保持整洁清晰统一的备注风格 2、不允许备注使用中的接口为废弃,要废弃前需要确保接口真的已经不被任何相关方使用后才可进行操作 |
以上
愿那些年Ta犯过的错,我们不会再重蹈覆辙