数据库和缓存的读写操作
我们的接口自动化是使用的 Rest-Assured,跟服务端接口的交互方法是根据接口定义好的,这个层面的东西是很少去改动的,如下为登录接口的封装:
/**
* @Description: 登录
*/
public Response login(String mobile, String password, String mac){
TestStep ts = new TestStep();
Map<String, Object> params = new HashMap<>();
Map<String, Object> sign = new HashMap<>();
params.put("mobile", mobile);
params.put("password", password);
params.put("mac", mac);
sign.put("sign", OldJHJUtils.getJWTSigner(params));
ts.setType(GlobalVar.HttpType.POST);
ts.setPath(Path.LOGIN.getValue());
ts.setParams(sign);
logger.info(Path.LOGIN.toString());
return hu.sendHttpRequest(ts);
}
而具体到某个接口的测试用例上,我们没有使用大家普遍讨论的数据驱动什么的,平时怎么测试就怎么在测试用例中写测试点罢了。所以,为了增加自动化的数据稳定性,我们加了数据库和缓存的读写操作,这样对于测试数据的维护就不需要太多,如下为两个登录接口的测试用例(测试用例中包含多个测试点):
/**
* @Description: 登录接口测试
*/
@Test
public void testLogin() throws Exception {
MemberPo memberPo = memberPoMapper.selectMemberByMobile(mobile);
// 登录成功
res = oldJHJUser.login(mobile, memberPo.getLoginPasswd(), mac);
// 验证登录密码是否设置,密码为空则未设置密码
// 验证用户是否禁用,getIsDisable()==1则用户被禁用
res.then().body(
"data.mobile", equalTo(mobile),
"data.existPassord", equalTo(!memberPo.getLoginPasswd().isEmpty()),
"data.isDisable", equalTo(memberPo.getIsDisable()==1));
// 登录失败-密码错误
res = oldJHJUser.login(mobile, memberPo.getLoginPasswd()+"123", mac);
res.then().body("msg", equalTo("密码错误"));
// 登录失败-未注册用户登录
res = oldJHJUser.login(noRegisterMobile, "password", mac);
res.then().body("msg", equalTo("用户不存在"));
}
/**
* @Description: 验证码登录接口测试
*/
@Test
public void testLoginByCode() throws Exception {
MemberPo memberPo = memberPoMapper.selectMemberByMobile(mobile);
// 向Redis中插入验证码
jhjRedisService.setSecurityCode(SmsModeEnum.LOGIN_VERIFY_CODE.getValue(), mobile);
String code = jhjRedisService.getSecurityCode(SmsModeEnum.LOGIN_VERIFY_CODE.getValue(), mobile);
// 用户未注册
res = oldJHJUser.loginByCode(noRegisterMobile, code, mac);
res.then().body("msg", equalTo("用户不存在"));
// 验证码错误
res = oldJHJUser.loginByCode(mobile, "000000", mac);
res.then().body("msg", equalTo("短信验证码不正确"));
// 验证码正确
res = oldJHJUser.loginByCode(mobile, code, mac);
// 验证登录密码是否设置,密码为空则未设置密码
// 验证用户是否禁用,getIsDisable()==1则用户被禁用
res.then().body(
"data.mobile", equalTo(mobile),
"data.existPassord", equalTo(!memberPo.getLoginPasswd().isEmpty()),
"data.isDisable", equalTo(memberPo.getIsDisable()==1));
// 验证码过期
jhjRedisService.deleteSecurityCode(SmsModeEnum.LOGIN_VERIFY_CODE.getValue(), mobile);
res = oldJHJUser.loginByCode(mobile, code, mac);
res.then().body("msg", equalTo("短信验证码已过期"));
}