闰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("[email protected]"); //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);
        }
    }
}

原文地址:https://www.cnblogs.com/buguge/p/12386435.html

时间: 2024-08-30 16:34:05

闰2月,再见!的相关文章

11月再见,12月你好!

11月,课程繁多.作业繁琐.项目紧张.情感危机,身不由己,时间不够用.精力不够用.心情不够用,学习工作效率很低.万幸,艰难的岁月过去一半了,项目到今日完成第一版,小伙伴们带着我们的寄望飞去海口了:情感危机也幸得珑姐姐和俊文哥哥的开导,心情豁然开朗.剩下的是,课程考试和课程设计.回望过去的11月,有什么新收获?哈哈. 度过艰难的11月份,也许就能在简历上加上新的标签:累积一年多项目开发经验,参与大型项目开发,能够独立开发完整网站,团队意识良好,热爱技术,重视总结等等. 总结几点感悟: 1,同一问题

2月再见,3月你好!

不知不觉间,2019年已过去1/6,春回大地,万物复苏,新的一个月和明媚的阳光一起到来,这又是一个崭新的开始,一个个未来的日子即将暖意融融. 春天,为一年之计,挥洒满腔激情,播种善因.让梦想起航.向幸福出发!在万物复苏的春天立下的誓言,如果付诸努力好好践行,那么等到灿烂的秋天,一定能给无怨辛劳的人一个最好的报答. 愿时光不负努力,岁月不负自己,让我们告别冬天的臃肿,告别冬天的懒散,以新的自己迎接新的春天…… 3月,我们更要加油! 原文地址:https://www.cnblogs.com/davi

SQL农历转换函数(显示中文格式,加入润月的显示)

if object_id('fn_getlunar') is not null drop function fn_getlunar go create function dbo.fn_getlunar(@solarday datetime) returns nvarchar(30) as begin declare @soldata int declare @offset int declare @ilunar int declare @i int declare @j int declare

【Sprint3冲刺之前】日历表的事件处理和管理(刘铸辉)

我的Sprint2冲刺--日历表的事件处理和管理(刘铸辉,刘静) 我的Sprint2冲刺计划领到的任务是和静姐结对编程,完成日历表的事件处理和管理,下面详细讲解下技术细节. 1.设计结构图 首先要画出整个UI设计图,方便理解这个日历布局和日历样式的绘制. 这里总共分解为两个 View 文件: 1:calender_main.xml(Calender.java用来绘制日历表和日历表中的事件) 作为启动的主画面,新建项目时,首先生成. schedule_toptext:用来显示年月日,闰几月,年份和

农历工具类

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 农历(阴历)工具类 * */ public class LunarCalendar { private int year;// 农历年 private int month;// 农历月 private int day;// 农历日 private bo

PHP日期操作类代码-农历-阳历转换、闰年、计算天数等

这是一个实用的PHP日期时间操作类,里面包括了公历-农历转换.转换成中文日期格式.计算农历相隔天数.根据阴历年获取生肖.获取阴历月份的天数.获取农历每年的天数.获取闰月.计算阴历日期与正月初一相隔的天数.计算2个公历(阳历)日期之间的天数.根据距离正月初一的天数计算阴历日期.获取天干地支纪年等,PHP日期操作类:Lunar.class.php代码如下: 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

Android使用GridView实现日历功能(详细代码)

代码有点多,发个图先: 如果懒得往下看的,可以直接下载源码吧(0分的),最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下 http://download.csdn.net/detail/onlyonecoder/6574379 布局文件: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi

【转】时标与历法

1.时标 时标(Time Scale)就是标度时间的方法.在时间的标度上,存在着两个相互独立的需求:一方面,我们希望时间标度能与地球的自转相吻合,可以称作天文学需求:另一 方面,我们要求时间标度的单位是精确的,便于大家获得准确的时间.由于地球自转的不均匀性,从这两个需求出发制定的时标会有细微的差异. 世界时(UT1)是基于地球自转的时标,下文会详细介绍.国际原子时(TAI)是基于单位时间的时标,它以"铯-133原子基态两个超精细能级间跃迁辐射 9,192,631,770周所持续的时间"

第四届蓝桥杯 c/c++真题

第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日. 高斯获得博士学位的那天日记上标着: