回答思路:
1. 理解加密机制:首先,找开发人员确定加密的方式,并了解整个加密流程和细节。
2.设计测试策略:根据加密方式,设计测试方案,包括工具选择和脚本编写。
3. 执行测试:利用工具或代码实现加密,然后发送请求并验证结果。
4. 验证与断言:不仅测试正常情况,还要测试异常情况。
第一步:与开发沟通理解加密规则和细节
⭐ 使用了那种加密算法(如MD5、AES、RSA等)
⭐ 加密的流程,比如哪些参数需要加密,加密的密钥是什么,是否有时间戳、随机字符串等防重放机制。
⭐ 如果是签名机制,了解签名的生成规则(比如参数排序、拼接方式等)。
第二步:选择工具与脚本开发
⭐ 如果使用Postman,我会在Pre-request Script中编写JavaScript代码来实现加密和生成签名。例如,对于MD5签名,我可以使用Postman内置的CryptoJS库。
⭐ 如果使用JMeter,我可能会使用JSR223 PreProcessor来编写Groovy脚本实现加密。
⭐ 如果加密非常复杂,或者需要集成到自动化测试框架中,我可能会选择用Python的Requests库结合加密库(如hashlib, pycryptodome)来编写测试脚本。
第三步:设计并执行测试用例
⭐ 在工具中,我会按照加密规则对请求参数进行处理,然后发送请求。
⭐ 对于返回结果,如果响应也是加密的,我还会按照开发提供的解密方式对响应进行解密,然后再进行断言验证。
第四步:结果验证与调试
正向以及逆向场景:
⭐ 签名错误:故意修改签名值,验证服务端是否会返回正确的错误码(如签名无效)。
⭐ 重放攻击:重复发送一个相同的合法请求,验证服务端是否有时间戳和随机数机制来防止重放。
⭐ 篡改参数:在签名正确的基础上,篡改其中一个业务参数,验证服务端签名校验是否生效。
⭐ Token失效:使用一个过期的或伪造的Token,验证认证是否失败。
对于返回结果,如果响应体也是加密的,我同样会按照约定进行解密后再做断言。在调试过程中,如果发现服务端返回的加密错误,我会通过对比我生成的签名和服务端生成的签名日志(如果需要开发协助拉日志),来定位是哪个环节出了偏差。
总结回答(简短)
首先,和开发明确加密的规则和细节。根据加密的复杂程度,选择Postman或JMeter等工具来模拟加密过程,最后设计包括正向、逆向在内的测试用例来进行全面验证。核心思想是,不仅要让接口‘跑通’,更要验证其加密机制的安全性和健壮性。