s-HR Cloud性能测试登录脚本制作
【适用版本】
s-HR Cloud 9.0版本以上
【问题场景】
使用Jmeter制作s-HR登录脚本
【解决方案】
s-HR使用的EAS SSO,登录步骤与EAS portal一致,需要注意的是现在EAS SSO采用了RSA非对称加密来加密请求中的部分登录信息。
在做性能测试之前需要将登陆时的验证码屏蔽,不然将无法登录成功。
登录页验证码屏蔽方法参考:https://vip.kingdee.com/article/622443139872872704
使用Jmeter录制好登录请求后,可以看到所有的请求参数都是固定的,过一段时间请求就无法使用了。
所以这里需要对请求参数进行参数化,和RSA加密。
需要参数化的参数有:数据库名,用户名,密码,easSessionId(提取自登录页),lt(提取自登录页)
需要加密的主要参数有:数据库名(Base64),用户名(RSA),密码(RSA),easSessionId(RSA),lt(Base64)
需要特别注意的参数:dbType,数据库类型,这个需要根据实际情况填入对应的数字
这里给出一些常用数据库对应的数字:Sqlserver — 3 , Oracle — 2 , Postgresql — 5 , Kingbase — 12
参考最后完成修改的请求参数的样子:
加密方法:
如上图所示,除去用户名和密码外,大多数参数直接使用Jmeter自带函数__base64Encode进行加密即可
用户名和密码需要使用JSR223处理器来模拟RSA加密
JSR223处理器中脚本语言选择groovy,随后加入Java代码
引入必要的库
import javax.crypto.*;
import java.security.*;
import java.security.spec.*;
import java.util.Base64;
获取需要加密的参数的值,赋值给Java变量,publickey为从登录页提取的公钥
String sUser = vars.get("username");
String sPass = vars.get("password");
String sKey = vars.get("publickey");
sKey = sKey.replace("\n", "").replace("\r", "");
初始化加密类
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
PublicKey pubkey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(sKey.getBytes())));
cipher.init(Cipher.ENCRYPT_MODE, pubkey);
对用户名、密码进行加密,并将密文存入enU、enP参数
vars.put("enU", new String(Base64.getEncoder().encode(cipher.doFinal(Base64.getEncoder().encode(sUser.getBytes())))));
vars.put("enP", new String(Base64.getEncoder().encode(cipher.doFinal(Base64.getEncoder().encode(sPass.getBytes())))));
s-HR Cloud性能测试登录脚本制作
本文2024-09-22 22:11:35发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-124999.html