JAVA接口自动化框架3:session及token提取及传递

使用场景:

一些场景必须登录后才可以使用,这就需要在后续的接口中使用登录后产生的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");
    }  
}

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值