原始需求:sip5.3中将请求的服务分为两种类型,一种是路由类,由sip路由到isp的服务。另一类是验证请求token类,用户向sip发起请求得到允许访问api的token和api的isp服务地址,用户自己去访问地址。但是用户向isp访问后,isp会向sip请求验证用户的token。以下是串通整个过程的测试代码,api的control_leave=2,即需要绑定用户的请求。
简要分析:由于第一种服务类型属于老的功能点,所以本次测试只需要做简单回归。重点在于测试第二种需求,而第二种需求的业务模型整理如下
如果按照传统的测试方式,需要按照上图模拟每一步的过程,那么事实是否是这样的呢?其实我们做测试还需要从核心需求出发,由于这个测试用例是对服务集成平台的测试,所以需求点有两个。
1. 需要验证当服务调用者向服务集成平台发送颁发认证的请求的时候,认证是否正确被颁发。
2. 服务供应商向服务集成平台验证认证,是否能按照需求进行正确的验证。
结合上面的分析,我们编写了如下测试代码,在代码中我们值模拟了1,2,4,5步骤的过程。而3,6我们就忽略了。同时我们的客户机即模拟服务调用者的角色又模拟服务供应商的角色。通过一段代码就完成了上图流程复杂的测试。
代码实例:
public class TestGetTokenReq {
//向sip请求的基本服务
private String api_server = "http://10.2.226.19:8180/sip/rest";
//跟路径
private String api_server1 = "http://10.2.226.19:8180";
//Mysql数据库路径
static String mysql_url = "jdbc:mysql://10.2.226.19:3306/sip";
//向isp验证请求token的路径
private String sipService_url = "http://10.2.226.19:8180/sip/sipService";
//验证user登陆token的路径
private String notifytoken_url = "http://10.2.226.19:8180/sip/token";
/**Control Leave = 2
* 经典测试用例
* @param apiName
* @throws Exceptionion
*/
@Test
public void TestCase3() throws Exception
{
String sip_appkey = "test_app003";// app_id
String sip_apiname = "alitest.ali-002-apitypetest1";
String sip_appsecret = "secret_app003";
String sip_secret = "aabb";
String sip_sessionid = "sddddeee" + util.SIPHelp.getTimestamp();
//初始化测试环境
DeleteHisRec(sip_apiname);
util.SIPHelp.Crush_Sip();
//省略isv想isp发起登陆请求
/*
* 直接模拟isp想login发起请求请求
*/
String sip_username = "中国人";
sip_username = URLEncoder.encode(sip_username,"utf-8");
String url = prepareUrl3(sip_appkey, sip_apiname, sip_secret, notifytoken_url, sip_sessionid, sip_username);
System.out.println(url);
WebConversation conversation = new WebConversation();
PostMethodWebRequest request = new PostMethodWebRequest(url.toString());
WebResponse response = conversation.getResponse(request);
String ActStatus = response.getHeaderField("sip_status");
assertEquals("9999", ActStatus);
//模拟isv,发起请求,生成token
url = util.SIPHelp.prepareUrl(sip_appkey, sip_apiname, sip_appsecret, api_server, sip_sessionid, null);
conversation = new WebConversation();
request = new PostMethodWebRequest(url);
response = conversation.getResponse(request);
ActStatus = response.getHeaderField("sip_status");
String ActError = response.getHeaderField("sip_error_message");
String sip_authToken = response.getHeaderField("sip_authToken");
String sip_serviceurl = response.getHeaderField("sip_serviceurl");
System.out.println(sip_authToken);
System.out.println(sip_serviceurl);
assertEquals("9999", ActStatus);
assertEquals(null, ActError);
assertEquals("http://apitest.alisoft.com:8080/isp-test/login", sip_serviceurl);
System.out.println(response.getText());
//省略isv向isp发起请求
//模拟isp直接发起验证请求的TOKEN
Map<String, String> map = new HashMap<String, String>();
map.put("sip_authToken", sip_authToken);
map.put("sip_service_command", "validateAuthToken");
map.put("sip_ispid", "elbert_isp002");
url = util.SIPHelp.prepareUrl(sip_appkey, sip_apiname, sip_secret, sipService_url, sip_sessionid, map);
System.out.println(url);
PostMethodWebRequest request1 = new PostMethodWebRequest(url.toString());
WebResponse response1 = conversation.getResponse(request1);
ActStatus = response1.getHeaderField("sip_status");
String res = URLDecoder.decode(response1.getHeaderField("sip_username"), "utf-8");
System.out.println(res);
assertEquals("9999", ActStatus);
assertEquals("中国人", res);
}
}