批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评)

这篇具有很好参考价值的文章主要介绍了批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com🔥🔥

需求

现在有一个秒杀优惠券的接口,需要模拟1000个不同登录用户下的秒杀场景,测试这个接口的性能。(黑马点评项目秒杀接口多用户压力测试)

分析

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

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

2.如何批量获取token?

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

实现

在编写脚本之前,我先声明本项目的登录流程、接口格式、响应格式,方便大家进行参照和修改。

1.登录接口:

本项目使用的是手机号和验证码登录方式,这两个参数携带在请求体(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);
    }

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.utils;
​
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 {
​
    @Autowired
    private IUserService userService;
    
    @Test
    public void function(){
        String loginUrl = "http://localhost:8080/api/user/login"; // 替换为实际的登录URL
        String 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);
​
                // 处理登录响应,获取token
                if (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字符串转换为JSONObject
            JSONObject jsonObject = new JSONObject(json);
            // 从JSONObject中获取名为"token"的字段的值
            String token = jsonObject.getString("data");
            return token;
        } catch (Exception e) {
            e.printStackTrace();
            return null; // 解析失败,返回null或者抛出异常,具体根据实际需求处理
        }
    }
}
​

运行之后可得到存储了1000个用户token的txt文件

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

Jmeter工具进行压力测试

这里使用到了Jmeter工具,如果不懂如何下载使用的后面会出一篇教程。

定义1000个线程即1000个用户秒杀库存100的优惠券。

1.定义线程组

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

2.设置导入的tokens数据文件

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

3.设置HTTP信息头管理器

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

4.设置HTTP请求

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

5.运行并得到结果

批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

100条订单数据批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评),jmeter,压力测试,java

完成测试!!!可以根据结果进行分析啦!

今天的内容就介绍到这啦,若对你有帮助的话就点个赞👍吧~

关注博主,宝藏多多~文章来源地址https://www.toymoban.com/news/detail-616539.html

到了这里,关于批量获取用户token,并使用jmeter对秒杀接口进行压力测试(黑马点评)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用post方式调用接口获取Token及调用网页地址

     IP、Port表示地址及端口,可配置或写死 public string PostDate(string IP,string Port)         {             //设置参数             string content= \\\"{\\\"userName\\\":\\\"\\\" 0000 \\\"\\\"\\\" +                  \\\",\\\"password\\\":\\\"123456\\\"}\\\";             //填充路径             string strUrl = string.Format(\\\"http://{0}:

    2023年04月08日
    浏览(29)
  • JMeter 批量接口测试

      一、背景 最近在进行某中台的接口测试准备,发现接口数量非常多,有6、70个,而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后,决定尝试使用JMeter的csv读取来实现批量的接口测试。 接口测试实战教程全套:

    2024年02月10日
    浏览(26)
  • Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑

    现在想对一个接口做性能测试,需要测试它多个线程并发下的调用 略 一个完整的http接口包含请求头和请求,这里就需要两个组件:HTTP request、HTTP Header Manager。 2-1 HTTP request 需要填写以下内容。 2-2 HTTP Header Manager 这里需要关注的是X-XSRF-TOKEN,它是动态的。 如果是第一次发请

    2024年02月13日
    浏览(24)
  • Jmeter(三十一):制造大批量的用户数据数据

    需求:因测试需要,要造100w用户数据,通过用户名、手机号、密码可新增用户,其中用户名和电话号码要求100w用户不能重复 要点: 1、通过Bean shell Sampler实现用户名和手机号的足够随机。 符合我们常用规则的手机号:第一位为1,第二位为3-9,后面的9位为0-9即可。 phone=${_

    2024年02月10日
    浏览(33)
  • 神马搜索引擎批量推送网址token获取+神马站长平台地址申请

    目录 第一步:神马token获取 第一步:神马账户格式导入 第三步:导入神马推送链接 第四步:开始神马推送 神马token获取 如下图登录神马站长管理平台获取神马token(注:每个域名对应的token不同) 导入神马账户格式 如下图点击“导入神马token”按钮,导入账户格式为TXT文件:

    2024年02月05日
    浏览(37)
  • JMeter循环读取CSV文件实现接口批量测试

    目录 前言: 1、添加线程组 2、添加HTTP信息头管理器 3、添加HTTP请求 4、添加察看结果树 5、添加循环控制器 6、在循环控制器下添加CSV配置文件

    2024年02月09日
    浏览(29)
  • 若依前后端分离版:增加新的登录接口,用于小程序或者APP获取token,并使用若依的验证方法

    登录校验 ——AppLoginService类  具体代码  具体代码  具体代码 此时运行时,会有冲突!!! 需要在 xxx-framework/src/main/java/....../SecurityConfig中条件 如图:  此时启动项目不会报冲突的错 千万千万要添加!!! 下图中的LongUser类要添加东西  要在public String getPassword(){}中添加

    2024年02月07日
    浏览(35)
  • 小程序接口测试——获取token

      code是微信小程序授权登录的重要参数,获取code的作用主要有以下三个: 1、作为前端向后端发送请求的参数,用于向微信服务器验证用户身份和获取用户信息; 2、作为后端向微信服务器请求access_token的参数,用于后续数据交互的Token; 3、作为前端向后端请求用户信息的标

    2024年02月05日
    浏览(29)
  • postman登录获取token,接口header中添加token发送请求

    该文章只是用于记录,防止自己忘记。 1、准备登录接口 2、添加全局变量 3、添加一个登录接口,登录获取token,将获取到的token设置到全局变量中 4、密码加密 var password = pm.environment.get(“password”);//获取环境变量password的值 var md5Password= CryptoJS.MD5(password).toString();//使用MD5()方

    2024年02月10日
    浏览(35)
  • 自动化测试平台(三):用户token验证及用户增删改查接口开发

    上一篇我们实现了用户登录的验证并返回token。那如何去校验请求的token是否有效呢?这篇内容为你讲解token的验证及用户管理(增删改查)的功能。 完整教程地址:《从0搭建自动化测试平台》 项目在线演示地址:http://121.43.43.59/ (帐号:admin 密码:123456)

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包