buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

闰2月,再见!

 

 

有2个http协议的api接口,一个是sendSmsCode,提供发送手机验证码的;一个是login,提供手机号验证码登陆的。

sendSmsCode这个api,内部逻辑是生成一个4位长度的随机码,以这个手机号为key,放入redis,然后触发短信服务。

login这个api呢,首先要根据入参的手机号和验证码,来验证是否匹配,匹配后判断数据状态,并且返回一个token。后续业务交互涉及到的api都会带着这个token来请求。

 

接下来,我写一个testcase来测试这2个接口。当然,很简单,用POSTMAN也很easy。模拟http请求即可。测通很容易。

可是呢,测试login时,因为本地环境不会真正下发短信,所以不知道那个验证码,这时,随便上送一个验证码,得到的响应报文都是验证码不正确之类的提示。因为只有验证码正确才能测后续流程。所以,写一段利用jedis获取验证码的代码即可。

复制代码
package com.emaxcard.boss.modules.login.controller;

import com.alibaba.fastjson.JSONObject;
import com.emaxcard.boss.common.constant.CommonConstant;
import com.emaxcard.boss.common.util.http.HttpUtil;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;

public class UserLoginControllerTest {
    static String requestUrl = "http://localhost:8902/api/user/";
    
    @Test
    public void loginReturnToken(){

        //step1. 调用sendSmsCode接口
        Map<String, String> params = new HashMap<>();
        params.put("phone", "18310636588");
        HttpUtil.post(JSONObject.toJSONString(params), requestUrl.concat("sendSmsCode"));

        //step2. 从redis获取验证码
        Jedis jedis = new Jedis("192.168.1.107", 6379);
        jedis.auth("Redisadmin@2019"); //password
        jedis.select(8); //database
        String smsCode = jedis.get(CommonConstant.VALIDATE_H5_USER_PREFIX.concat("18310636588"));
        System.out.println("redis里的smsCode=" + smsCode);
        
        //step3. 登陆
        params.put("smsCode", smsCode);
        params.put("source", "h5");
        String response = HttpUtil.post(JSONObject.toJSONString(params), requestUrl.concat("login"));
        /*响应报文示例:
        {"success":true,"message":"操作成功!","code":200,"result":{"url":"/register.html","token":"eyJ0eXAiOiJNiJ9"},"timestamp":1582981585614}
        * */
        JSONObject jsonResponse = JSONObject.parseObject(response);
        if (200 == jsonResponse.getIntValue("code")) {
            JSONObject result = JSONObject.parseObject(jsonResponse.getString("result"));
            String token = result.getString("token");
            String url = result.getString("url");
            System.out.println("token=" + token + "\r\nurl=" + url);
        }
    }
}
复制代码

 

posted on   buguge  阅读(185)  评论(0编辑  收藏  举报

编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示