使用场景:
一些场景必须登录后才可以使用,这就需要在后续的接口中使用登录后产生的session,本章主要介绍如何获取session,及把参数传递到其他的接口中;我的接口是查询接口,无参数
一、登录需要的参数
package com.qa.parameters;
public class Manager {
private String account;
private String loginPwd;
private String partnerCode;
public Manager(){
}
public Manager(String account,String loginPwd,String partnerCode){
super();
this.loginPwd=loginPwd;
this.account=account;
this.partnerCode=partnerCode;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getPartnerCode() {
return partnerCode;
}
public void setPartnerCode(String partnerCode) {
this.partnerCode = partnerCode;
}
}
二、在base类中定义session,我把他放在此处的想法是因为后续的test类都需要继承此类,若在此定义了即为全局变量,后续只要使用到session的地方可以直接使用;把登录也放到此类也是这种想法
package com.qa.base;
import java.io.IOException;
import java.util.Map;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.alibaba.fastjson.JSONObject;
import com.qa.parameters.Manager;
import com.qa.restclient.RestClient;
import com.qa.utils.PropertiesUtils;
import com.qa.utils.fatjson.FastjsonUtils;
/**
* 该类可以当成所有测试类的模板基类,其他需要测试的类继承该类
* session,token等需要全局使用的均需要在此类中进行定义;若测试需要登录可在本类进行登录
* @author jff
* @date 2018年9月25日
* @version V1.0.1
*/
public abstract class BaseApi {
protected String hostManager;
protected static String sessionKey;
@BeforeClass
public void setUp() {
hostManager=PropertiesUtils.getConfigValue("HOSTMANAGER");
}
//由于登陆后后面的接口需要使用它的返回值,所以提取到此类,以后的测试类只需继承,添加依赖即可
@Test
public void loginManagerAppTestd() throws ClientProtocolException, IOException{
String url=hostManager+"/parkingManager/applogin/loginIn";
Manager manager = new Manager("yanczapp","8ddcff3a80f4189ca1c9d4d902c3c909","0571001");
Map<String, String> map=FastjsonUtils.toMap(FastjsonUtils.toJson(manager));
System.out.println("my out**********"+map);
CloseableHttpResponse closeableHttpResponse = RestClient.postForm(url, map, null);
//断言状态码是不是200
int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
Assert.assertEquals(statusCode,Constants.RESPNSE_STATUS_CODE_200,"status code is not 200");
//断言响应json内容中name和job是不是期待结果
String responseString = EntityUtils.toString(closeableHttpResponse.getEntity());
System.out.println("my out**********"+responseString);
JSONObject res = FastjsonUtils.toJsonObject(responseString);
//提取session,并把它赋值给sessionkey,sessionKey 作为全局变量其他接口可以直接使用
sessionKey = FastjsonUtils.toMap(res.getString("data")).get("session_key");
System.out.println("data**********: " + res.getString("message"));
System.out.println("data**********: " + sessionKey);
String account=FastjsonUtils.toMap(res.getString("data")).get("account");
Assert.assertEquals(account,"yanczapp" ,"account code is not error");
}
}
三、config.properties
HOSTMANAGER=http://111.aaa.cn
四、编写测试类,这个需要添加一个依赖,依赖登录接口,意思就是说登录接口成功后此用例才能执行
添加dependsOnMethods即可
package manager;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.alibaba.fastjson.JSONObject;
import com.qa.base.BaseApi;
import com.qa.base.Constants;
import com.qa.restclient.RestClient;
import com.qa.utils.fatjson.FastjsonUtils;
public class LoginManagerAppTest2 extends BaseApi{
private final static Logger Log=Logger.getLogger(LoginManagerAppTest2.class);
//依赖那个方法,如果依赖多个方法可使用逗号分隔loginManagerAppTestd,loginManagerApp
@Test(dependsOnMethods = {"loginManagerAppTestd"})
public void query() throws ClientProtocolException, IOException {
String url=hostManager+"/parkingManager/apprecovered/querySumOrderAmountByCondition";
Map<String, String> headers = new HashMap<String, String>();
headers.put("token", "aaaa");
Map<String, String> params = new HashMap<String, String>();
params.put("session_key", sessionKey);
CloseableHttpResponse closeableHttpResponse = RestClient.postForm(url, params, headers);
//断言响应是不是期待结果
String responseString = EntityUtils.toString(closeableHttpResponse.getEntity());
Log.info("my out**********"+responseString);
JSONObject res1 = FastjsonUtils.toJsonObject(responseString);
Log.info("code**********: " + res1.getString("code"));
//断言状态码是不是200
int statusCode = RestClient.getStatusCode(closeableHttpResponse);
Assert.assertEquals(statusCode,Constants.RESPNSE_STATUS_CODE_200,"status code is not 200");
}
}