Jmeter 运行 Python 代码进行 AK/SK 认证 (使用 OS Process Sampler)

如题所述

项目背景:最近面临一个接口测试需求,接口采用AK/SK认证进行加密签名。以下提供JMeter解决方案。

AK/SK认证机制:在通过API网关向底层服务发送请求时,必须使用AK(Access Key ID)和SK(Secret Access Key)对请求进行签名。

解释:AK:访问密钥ID,与私有访问密钥关联的唯一标识符;与SK结合使用对请求进行加密签名,标识发送方并防止请求被修改。

说明:AK/SK认证与Token认证相比,安全性更高。实现AKSK加密的Python代码如下。

实例分析:假设接口信息如下:POST /getToken,请求体为{"flag":"test","appId":"001"},请求时需要在Headers中添加Authorization,其值根据ak,sk与四行信息生成,请求URL和Body与Authorization关联,修改Body时也需相应修改Authorization,但通常sk不会暴露,拿不到sk则无法发送匹配请求body的Authorization,导致接口请求因授权失败而被服务器拒绝。

OS Process Sampler使用:JMeter调用Python代码,可通过OS Process Sampler实现。

功能介绍:OS Process Sampler可启动可执行程序,通过命令行方式运行,支持使用任何语言编写测试用可执行程序(如Linux的sh脚本)。在该程序中调用接口并输出原始数据供JMeter解析。

详细步骤:编写getAksk.sh脚本,调用Python的getAksk.py文件。

执行结果展示:jmeter中打印sh脚本运行日志,Pycharm中运行getAksk.py文件输出相同。

解析整合:jmeter运行Python代码,实现在sh脚本中获取输出,使用正则表达式提取器解析输出,配置如下:正则表达式:"aksk":"(.+?)"。使用${aksk}配置Authorization值,HTTP Header Manager中调用此值。

参数化调用:将接口URL和Body参数化。通过jmeter将参数传给sh脚本,sh脚本再传给py文件执行。通过Python接收传入参数,如python /Users/grizz/getAksk.py /getToken {"flag":"test","appId":"001"}。在getAksk.py和getAksk.sh文件中添加参数接收逻辑。

问题解决:调整OS Process Sampler的Command参数,确保正确传递接口URL和Body。通过CSV文件存储请求参数,并在JMeter中使用csvRead函数读取,将参数注入请求。
温馨提示:答案为网友推荐,仅供参考
相似回答