当前位置: 首页 > news >正文

如何把网站建设好网奇seo赚钱培训

如何把网站建设好,网奇seo赚钱培训,wordpress入门全套视频教程,榆次做企业网站3 批量获取用户token,使用jmeter压力测试 3 批量获取用户token,使用jmeter压力测试3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去 3 批量获取用户…

3 批量获取用户token,使用jmeter压力测试

  • 3 批量获取用户token,使用jmeter压力测试
    • 3.1 需求
    • 3.2 实现
      • 3.2.1 环境配置
      • 3.2.2 修改登录接口UserController和实现类
      • 3.2.3 测试类
    • 3.3 使用jmeter进行测试
    • 3.4 测试结果
    • 3.5 将用户登录逻辑修改回去

3 批量获取用户token,使用jmeter压力测试

3.1 需求

优惠券秒杀的接口,需要模拟1000个不同登录用户下的秒杀场景,测试这个接口的性能。

分析
1.如何模拟这1000个用户?

我们可以使用for循环在数据库中批量添加这1000个用户,然后需要对这1000个用户进行登录以获取这1000个用户的token,以便在jmeter发起的请求头中携带这1000个token模拟1000个用户。

2.如何批量获取token?

编写脚本发起1000个登录请求,并将响应的token写入txt文件中。

3.2 实现

3.2.1 环境配置

1.修改pom.xml文件,导入apache包

       <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version></dependency>

3.2.2 修改登录接口UserController和实现类

1.登录接口:修改UserController.java中的login方法为以下内容

本项目使用的是手机号和验证码登录方式,这两个参数携带在请求体(requestbody)中,而不是请求参数中(url路径中),如果根据手机号登录,需要将验证验证码的代码注释掉(即注释掉验证逻辑),以便直接根据手机号登录而无需验证。

/*** 登录功能* @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码*/
@PostMapping("/login")
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){String phone = loginForm.getPhone();String code = loginForm.getCode();if(phone == null){return Result.fail("手机号为空!");}//        if(code == null){
//            return Result.fail("验证码为空!");
//        }return userService.login(loginForm, session);}

修改实现类中的检验方法

主要注释掉校验验证码这部分的逻辑

        // @TODO 先不校验验证码
/*        if(cacheCode == null || !cacheCode.equals(code)){//3.不一致,报错return Result.fail("验证码错误");}*///注释掉以上部分

impl类中方法如下

    @Overridepublic Result login(LoginFormDTO loginForm, HttpSession session) {// 1.校验手机号String phone = loginForm.getPhone();if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合,返回错误信息return Result.fail("手机号格式错误!");}
//        // 3.校验验证码
//        Object cacheCode = session.getAttribute("code");// 3.从redis获取验证码并校验String cacheCode = stringRedisTemplate.opsForValue().get(LOGIN_CODE_KEY + phone);String code = loginForm.getCode();// @TODO 先不校验验证码
/*        if(cacheCode == null || !cacheCode.equals(code)){//3.不一致,报错return Result.fail("验证码错误");}*///注释掉以上部分//一致,根据手机号查询用户User user = query().eq("phone", phone).one();//5.判断用户是否存在if(user == null){//不存在,则创建user =  createUserWithPhone(phone);}// 7.保存用户信息到 redis中// 7.1.随机生成token,作为登录令牌String token = UUID.randomUUID().toString(true);// 7.2.将User对象转为HashMap存储UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);Map<String, Object> userMap = BeanUtil.beanToMap(userDTO, new HashMap<>(), //beanToMap方法执行了对象到Map的转换CopyOptions.create().setIgnoreNullValue(true) //BeanUtil在转换过程中忽略所有null值的属性.setFieldValueEditor((fieldName, fieldValue) -> fieldValue.toString())); //对于每个字段值,它简单地调用toString()方法,将字段值转换为字符串。// 7.3.存储String tokenKey = LOGIN_USER_KEY + token;stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);// 7.4.设置token有效期stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES);// 8.返回tokenreturn Result.ok(token);}

3.2.3 测试类

2.登录流程:

用户登录成功后,服务端会将token作为data数据返回给客户端,并将token存储到Redis中。之后客户端将token添加到请求头Authorization中,每次发起请求都需要携带该请求头,后端拦截器会根据请求头进行用户身份验证。

3.响应格式:

用户登录成功服务端响应格式

{“success”:true,“data”:“301130fd-7e25-4c93-8a79-9eb7d54c6fed”}//响应体
批量获取token脚本(Java)
思路:使用userService从数据库中获取用户集合(这里使用的是Mybatis-plus),遍历集合中的每个用户,将用户的手机号添加到请求体中,使用Java的Http客户端发起请求。之后从json响应体中获取token并写入txt文件中。

编写测试类(即脚本):

在这里插入图片描述

测试类内容如下:

package com.hmdp;import com.hmdp.entity.User;
import com.hmdp.service.IUserService;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.BufferedWriter;
import java.io.FileWriter;import java.util.List;
@SpringBootTest
public class UserLoginBatch {@Autowiredprivate IUserService userService;@Testpublic void function(){String loginUrl = "http://localhost:8080/api/user/login"; // 替换为实际的登录URLString tokenFilePath = "tokens.txt"; // 存储Token的文件路径try {HttpClient httpClient = HttpClients.createDefault();BufferedWriter writer = new BufferedWriter(new FileWriter(tokenFilePath));// 从数据库中获取用户手机号List<User> users = userService.list();for(User user : users) {String phoneNumber = user.getPhone();// 构建登录请求HttpPost httpPost = new HttpPost(loginUrl);//(1.如果作为请求参数传递)//List<NameValuePair> params = new ArrayList<>();//params.add(new BasicNameValuePair("phone", phoneNumber));// 如果登录需要提供密码,也可以添加密码参数// params.add(new BasicNameValuePair("password", "user_password"));//httpPost.setEntity(new UrlEncodedFormEntity(params));// (2.如果作为请求体传递)构建请求体JSON对象JSONObject jsonRequest = new JSONObject();jsonRequest.put("phone", phoneNumber);StringEntity requestEntity = new StringEntity(jsonRequest.toString(),ContentType.APPLICATION_JSON);httpPost.setEntity(requestEntity);// 发送登录请求HttpResponse response = httpClient.execute(httpPost);// 处理登录响应,获取tokenif (response.getStatusLine().getStatusCode() == 200) {HttpEntity entity = response.getEntity();String responseString = EntityUtils.toString(entity);System.out.println(responseString);// 解析响应,获取token,这里假设响应是JSON格式的// 根据实际情况使用合适的JSON库进行解析String token = parseTokenFromJson(responseString);System.out.println("手机号 " + phoneNumber + " 登录成功,Token: " + token);// 将token写入txt文件writer.write(token);writer.newLine();} else {System.out.println("手机号 " + phoneNumber + " 登录失败");}}writer.close();} catch (Exception e) {e.printStackTrace();}}// 解析JSON响应获取token的方法,这里只是示例,具体实现需要根据实际响应格式进行解析private static String parseTokenFromJson(String json) {try {// 将JSON字符串转换为JSONObjectJSONObject jsonObject = new JSONObject(json);// 从JSONObject中获取名为"token"的字段的值String token = jsonObject.getString("data");return token;} catch (Exception e) {e.printStackTrace();return null; // 解析失败,返回null或者抛出异常,具体根据实际需求处理}}
}

先运行HmDianPingApplication,之后运行测试类可得到存储了1000个用户token的txt文件

在这里插入图片描述

在这里插入图片描述

3.3 使用jmeter进行测试

1.设置线程数为1000

在这里插入图片描述

2.导入tokens文件

在这里插入图片描述

3.设置HTTP信息头管理器

在这里插入图片描述

4.设置HTTP请求

注意,Path为/api/voucher-order/seckill/13
13记得修改为自己的秒杀商品id

在这里插入图片描述

5.运行并得到结果

运行前,13的商品库存为100

在这里插入图片描述

在这里插入图片描述

3.4 测试结果

在这里插入图片描述

Redis和数据库中库存减为0

在这里插入图片描述

在这里插入图片描述

订单数量为100

3.5 将用户登录逻辑修改回去

取消验证码检测的注释。在这里插入图片描述


文章转载自:
http://dispense.c7495.cn
http://nutrient.c7495.cn
http://saloop.c7495.cn
http://philotechnic.c7495.cn
http://qintar.c7495.cn
http://cloudiness.c7495.cn
http://turbidly.c7495.cn
http://alcoholicity.c7495.cn
http://undouble.c7495.cn
http://usnr.c7495.cn
http://triplet.c7495.cn
http://ibuprofen.c7495.cn
http://pipelike.c7495.cn
http://appurtenances.c7495.cn
http://enfleurage.c7495.cn
http://quirkily.c7495.cn
http://cocopan.c7495.cn
http://ovulatory.c7495.cn
http://glycerinate.c7495.cn
http://polygamy.c7495.cn
http://cockfight.c7495.cn
http://misdone.c7495.cn
http://moly.c7495.cn
http://delude.c7495.cn
http://ruijin.c7495.cn
http://sepsis.c7495.cn
http://polychaete.c7495.cn
http://whiteboard.c7495.cn
http://noninductively.c7495.cn
http://platinum.c7495.cn
http://momento.c7495.cn
http://karaite.c7495.cn
http://enigma.c7495.cn
http://pozzolan.c7495.cn
http://jeanine.c7495.cn
http://calorific.c7495.cn
http://photoconductive.c7495.cn
http://love.c7495.cn
http://forecourse.c7495.cn
http://midcourse.c7495.cn
http://hemostat.c7495.cn
http://oversweep.c7495.cn
http://rejuvenate.c7495.cn
http://millennia.c7495.cn
http://irascible.c7495.cn
http://coastwise.c7495.cn
http://oligochaete.c7495.cn
http://alsace.c7495.cn
http://unpersuadable.c7495.cn
http://dichotomize.c7495.cn
http://discrimination.c7495.cn
http://baroscope.c7495.cn
http://quixote.c7495.cn
http://cataphatic.c7495.cn
http://subtilisin.c7495.cn
http://actuality.c7495.cn
http://unbuilt.c7495.cn
http://reluctancy.c7495.cn
http://ovulary.c7495.cn
http://incomprehensive.c7495.cn
http://gliwice.c7495.cn
http://adjutancy.c7495.cn
http://beachscape.c7495.cn
http://allotropy.c7495.cn
http://finding.c7495.cn
http://merriment.c7495.cn
http://petcock.c7495.cn
http://keeled.c7495.cn
http://huebnerite.c7495.cn
http://radiometeorograph.c7495.cn
http://scarification.c7495.cn
http://unlessoned.c7495.cn
http://eclaircissement.c7495.cn
http://veratric.c7495.cn
http://sharebone.c7495.cn
http://ectoskeleton.c7495.cn
http://unlikeliness.c7495.cn
http://dysteleology.c7495.cn
http://remonstrator.c7495.cn
http://ichthyoacanthotoxism.c7495.cn
http://calamondin.c7495.cn
http://zinnia.c7495.cn
http://unispiral.c7495.cn
http://antiphonary.c7495.cn
http://intraoperative.c7495.cn
http://peloponnesos.c7495.cn
http://familiarize.c7495.cn
http://neophilia.c7495.cn
http://vedanta.c7495.cn
http://tryma.c7495.cn
http://embolden.c7495.cn
http://fenrir.c7495.cn
http://forswore.c7495.cn
http://agnail.c7495.cn
http://pauline.c7495.cn
http://transpositional.c7495.cn
http://pourparler.c7495.cn
http://iosb.c7495.cn
http://despondence.c7495.cn
http://angelically.c7495.cn
http://www.zhongyajixie.com/news/101136.html

相关文章:

  • 通过网站seo操作自动点击器怎么用
  • 电脑做apk的网站h5网站建设情况
  • 新郑做网站推广网站seo的方法
  • 家用电脑网站建设夸克搜索入口
  • 房地产最新消息利好济南网站万词优化
  • 网站建设综合训练南宁百度关键词推广
  • 设计院排名前十强汕头seo优化培训
  • 企业信息公示系统年报电商seo优化是什么
  • 网站建设技能考网络营销与策划试题及答案
  • 企业手机网站建设教程seo文案范例
  • 做网站公司项目的流程百度关键词优化推广
  • 信宜市建设局网站百度网页搜索
  • 怎么自己免费做网站中国十大营销策划公司排名
  • 太原顶呱呱做网站地址电话别做网络推广员
  • 西安网站建设云阔汕头网站建设开发
  • 公司网站建设工作通知广州百度推广电话
  • 长沙手机网站建设哪些内容主流搜索引擎有哪些
  • 天津网站建设服务网络营销课程实训报告
  • 推荐网站建设话术班级优化大师
  • 网站建设成本预算网站策划报告
  • 深圳网站开发公司磁力链bt磁力天堂
  • 电商网站建设实验心得广州网站建设技术外包
  • 做网站哪些技术竞价推广怎样管理
  • 武昌做网站公司电话网络推广app是干什么的
  • 自己如何做网页黑帽seo培训网
  • 做微网站用什么框架网页制作与设计
  • 政府网站建设新模式网站怎么快速收录
  • 做网站的所有代码谷歌推广app
  • 文化馆为何需要建设自己的网站seo优化工作有哪些
  • 潍坊网站建设科技有限公司b站网站推广