海南省澄迈住房和城乡建设厅网站,网站建设维护更新,学编程从哪儿入手,如何做网站优化的内容近期#xff0c;由于某项目验收需要#xff0c;需要登录接口同时满足至少400个账号同时并发登录#xff0c;于是开始编写测试代码#xff0c;以满足项目业务需要。首先#xff0c;安装jdk#xff0c;由于本机已安装jdk8#xff1a; 如果你机器上没有安装jdk#xff0c;…近期由于某项目验收需要需要登录接口同时满足至少400个账号同时并发登录于是开始编写测试代码以满足项目业务需要。首先安装jdk由于本机已安装jdk8 如果你机器上没有安装jdk请百度自行安装一下因为JMeter由java编写JMeter安装
Windows 安装 jmeter-CSDN博客
安装redis可以百度也可以参考之前发布的文章部署.net6 到 Windows server 2008 r2 IIS_csdn_aspnet的博客-CSDN博客
编写测试webapi登录接口代码
1.写入redis测试账号 /// summary/// 添加或移除测试账号/// /summary/// param nameisDel0添加账号 1移除账号/param/// returns/returns[HttpPost]public async TaskActionResult AddYhzhRedis(int isDel 0){string sKey YH;if (isDel 1){for (int i 0; i 500; i){int nId i 1;string sYhm admin_ nId;await _cache.RemoveAsync(sKey : sYhm);}return Ok(new{code 200,success true,msg 移除测试账号成功});}Yhzh yhzh null;for (int i 0; i 500; i){int nId i 1;yhzh new Yhzh();yhzh.id nId;yhzh.yhm admin_ nId;yhzh.mm MD5Helper.MD5Encrypt32(nId 123456);await _cache.SetAsync(sKey : yhzh.yhm, yhzh, TimeSpan.FromHours(24));var vId await SqlSugarHelper.Db.Insertable(yhzh).ExecuteReturnBigIdentityAsync();}return Ok(new{code 200,success true,msg 添加测试账号成功});} 代码中_cache 为注入的redis缓存接口可自行编写或使用第三方包MD5Helper.MD5Encrypt32 你可以在网络上找一个md5加密帮助类即可。
2.登录接口实现
/// summary
/// 登录
/// /summary
/// param namemodel/param
/// returns/returns
[HttpPost]
public async TaskActionResult Login([FromBody] LoginVM model)
{string sKey YH:;if (await _cache.GetAsync(sKey model.yhm)){var vCacheModel await _cache.GetAsyncYhzh(sKey model.yhm);if (null vCacheModel){return Ok(new{code 400,success false,msg 登录失败用户不存在});}string sAfferentPwd MD5Helper.MD5Encrypt32(vCacheModel.id model.mm);if (sAfferentPwd ! vCacheModel.mm){return Ok(new{code 400,success false,msg 登录失败用户或密码不正确});}//TODO:生成新的token 存储缓存信息return Ok(new{code 200,success true,msg 登录成功});}var vUserModel await SqlSugarHelper.Db.QueryableYhzh, Yhxx, Dwxx((zh, yh, dw) new JoinQueryInfos(JoinType.Left, zh.yhid yh.id yh.sczt 0, JoinType.Left, zh.dwbh dw.dwbh dw.sczt 0)).Where((zh, yh, dw) zh.yhm model.yhm || yh.lxdh model.yhm || yh.jh model.yhm).Where((zh, yh, dw) zh.sczt 0).Select((zh, yh, dw) new YhzhxxVM{id zh.id,yhid zh.yhid,xm yh.xm,yhm zh.yhm,mm zh.mm,lxdh yh.lxdh,//yhtx zh.yhtx,yhtx yh.yhtx,dwbh zh.dwbh,dwmc dw.dwmc,qhbm dw.qhbm,sfxtzh zh.sfxtzh,zhzt zh.zhzt,sfkdldp zh.sfkdldp}).FirstAsync();if (null vUserModel){return Ok(new{code 400,success false,msg 登录失败用户名不存在});}string sUserPwd MD5Helper.MD5Encrypt32(vUserModel.id model.mm);if (sUserPwd ! vUserModel.mm){return Ok(new{code 400,success false,msg 登录失败用户名或密码错误});}Dictionarystring, string dicUserInfo new Dictionarystring, string{{ zhid,vUserModel.id.ToString()},{ userid,vUserModel.yhid.ToString()},{ dwbh,vUserModel.dwbh??},{ dwmc,vUserModel.dwmc??},{ qhbm,vUserModel.qhbm??},{ username,model.yhm??},{ xm,vUserModel.xm??},{ nickname,vUserModel.nc??},{ lxdh,vUserModel.lxdh??},{ yhtx,vUserModel.yhtx??},{ jsmc,},{ jsid,},{ sfxtzh,vUserModel.sfxtzhnull?0:vUserModel.sfxtzh.ToString()},{ logintime,DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss)},{ tokenExpire,DateTime.Now.AddSeconds(AppSettings.CustomToken.KeyTimeEffectiveTime).ToString(yyyy-MM-dd HH:mm:ss)},};var vUserInfo JsonHelper.ToJson(dicUserInfo);string sToken Guid.NewGuid().ToString(N);await _cache.SetAsync(sToken, vUserInfo, TimeSpan.FromMinutes(10));return Ok(new{code 200,success true,msg 登录成功});}
代码中 SqlSugarHelper使用的第三方 SqlSugar包实现此类代码如下
/// summary
/// 不能是泛型类
/// /summary
public class SqlSugarHelper
{//多库情况下使用说明//如果是固定多库可以传 new SqlSugarScope(ListConnectionConfig,db{}) 文档多租户//如果是不固定多库 可以看文档Saas分库//用单例模式public static SqlSugarScope Db new SqlSugarScope(new ConnectionConfig(){ConnectionString server127.0.0.1;Databasedb;Port3306;Uidmysqladmin;Pwd20231024;Persist Security InfoTrue;SslModeNone;charsetutf8mb4;,//连接符字串DbType DbType.MySql,//数据库类型IsAutoCloseConnection true //不设成true要手动close},db {//(A)全局生效配置点一般AOP和程序启动的配置扔这里面 所有上下文生效//调试SQL事件可以删掉db.Aop.OnLogExecuting (sql, pars) {Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响//5.0.8.2 获取无参数化 SQL 对性能有影响特别大的SQL参数多的调试使用//UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)};//多个配置就写下面//db.Ado.IsDisableMasterSlaveSeparationtrue;//注意多租户 有几个设置几个//db.GetConnection(i).Aopvar vIsConnection db.Ado.IsValidConnection(); //如果时间长可以在连接字符串配置 连接超时时间Console.WriteLine(vIsConnection vIsConnection);});
}
打开swagger开始写入账号数据 redis写入成功 数据库写入成功 启动JMeter进入JMeter的bin目录右键使用管理员身份运行jmeter.bat文件即可 启动成功如下图 修改名称你可以使用默认名称本测试修改为登录并发测试在左侧登录并发测试节点右键添加线程组如下图 在左侧登录并发测试节点右键分别添加HTTP信息头管理器HTTP请求默认值CSV Data Set Config如下图 HTTP信息头管理没有你可以不添加点击添加后双击名称列单元格即可输入 HTTP请求默认值本次测试只填写红框内参数IP和端口换成你自己的即可其余默认 CSV Data Set Config如下图 以上截图中 变量名称 后续会用到csv文件内容其实就是上面代码中创建的账号信息使用sql在数据库执行拼接登录名
SELECT yhm FROM jc_yhzh1;
在查询结果中全选、右键- 复制为- 制表符分隔值(数据)粘贴到txt中将txt扩展名修改为csv即可。 修改完成后打开csv文件如下 在左侧线程组节点右键添加HTTP请求如下图 配置信息如下 请求报文中${name}为变量上面选择csv设置的要一致。
在登录并发测试节点右键添加查看结果树和聚合报告添加即可不需要配置 添加完成后在线程组右键-启动 启动后开始执行绿色的三角变为灰色 点击查看结果树 两个截图请求明显登录账号不一样说明一次600请求是正常的返回结果如下 点击聚合报告异常0.00%符合预期结果 至此测试任务完成将业务过程搬到正式环境代码改写相关业务接口。