这套框架的报告是自己封装的

一般token会在登录接口返回结果中呈现,从代码层面获取token的方式有很多种,我是使用jsonpath这个json路径语言去匹配token所在路径的key值

 package com.qa.tests;

 import com.alibaba.fastjson.JSON;
import com.qa.base.TestBase;
import com.qa.Parameters.postParameters;
import com.qa.restclient.RestClient;
import com.qa.util.TestUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.*;
import java.io.IOException;
import java.util.HashMap;
import static com.qa.util.TestUtil.dtt; public class EFPStagingCN extends TestBase { TestBase testBase;
RestClient restClient;
CloseableHttpResponse closeableHttpResponse;
//host
String host;
//Excel路径
String testCaseExcel;
//token路径
String tokenPath;
//header
HashMap<String ,String> postHeader = new HashMap<String, String>();
//登录token
HashMap<String,String> loginToken = new HashMap<String, String>();
@BeforeClass
public void setUp(){
testBase = new TestBase();
postHeader.put("Content-Type","application/json");
restClient = new RestClient();
//接口endpoint
host = prop.getProperty("Host");
//读取配置文件Excel路径
testCaseExcel=prop.getProperty("testCase1data");
//读取配置文件token路径
tokenPath = prop.getProperty("token");
} @DataProvider(name = "postData")
public Object[][] post() throws IOException {
return dtt(testCaseExcel,0); }
@DataProvider(name = "getData")
public Object[][] get() throws IOException{
return dtt(testCaseExcel,1); } @DataProvider(name = "deleteData")
public Object[][] delete() throws IOException{
return dtt(testCaseExcel,2);
} @Test(dataProvider = "postData")
public void login(String loginUrl,String username, String passWord) throws Exception {
postParameters loginParameters = new postParameters(username,passWord);
String userJsonString = JSON.toJSONString(loginParameters);
//发送登录请求
closeableHttpResponse = restClient.postApi(host+loginUrl,userJsonString,postHeader);
//获取登录后的token
loginToken = TestUtil.getToken(closeableHttpResponse,tokenPath);
int statusCode = TestUtil.getStatusCode(closeableHttpResponse);
Assert.assertEquals(statusCode,200); } @Test(dataProvider = "getData",dependsOnMethods = {"login"})
public void getMothed(String url) throws Exception{
//将token赋值后发送get请求
closeableHttpResponse = restClient.getApi(host+url,loginToken);
int statusCode = TestUtil.getStatusCode(closeableHttpResponse);
Assert.assertEquals(statusCode,200);
} @Test(dataProvider = "deleteData",dependsOnMethods = {"getMothed"})
public void deleteMothed(String url) throws IOException{
closeableHttpResponse = restClient.deleteApi(url);
int statusCode = TestUtil.getStatusCode(closeableHttpResponse);
Assert.assertEquals(statusCode,204);
} }

没有使用testng.xml的情况下调试testCase,需要设置一下dependsOnMethods,否则token将无法传递给其他test步骤

附上TestUtil.getToken()方法:

 //获取返回的token ,使用JsonPath获取json路径
public static HashMap<String,String> getToken(CloseableHttpResponse closeableHttpResponse,String jsonPath) throws Exception{
HashMap<String,String> responseToken = new HashMap<String, String>();
String responseString = EntityUtils.toString( closeableHttpResponse.getEntity(),"UTF-8");
ReadContext ctx = JsonPath.parse(responseString);
String Token = ctx.read(jsonPath); //"$.EFPV3AuthenticationResult.Token"
if(null == Token||"".equals(Token)){
new Exception("token不存在");
} responseToken.put("x-ba-token",Token);
return responseToken;
}

原文地址https://blog.csdn.net/qq_34693151/article/details/81906177

接口自动化框架(java)--4.接口Token传递的更多相关文章

  1. 接口自动化框架(java)--2.接口用例POST请求,参数配置

    这套框架的报告是自己封装的 Post类型的接口通常有请求参数,请求参数也是json类型,所以需要写一个类将请求参数序列化成json对象 以常见的登录接口为例 新建一个package,和postPara ...

  2. 接口自动化框架(java)--1.项目概述

    项目github地址: https://github.com/tianchiTester/API_AutoFramework 这套框架的报告是自己封装的 1.测试基类TestBase: 接口请求的te ...

  3. 接口自动化框架(java)--5.通过testng.xml生成extentreport测试报告

    这套框架的报告是自己封装的 由于之前已经通过Extentreport插件实现了Testng的IReport接口,所以在testng.xml中使用listener标签并指向实现IReport接口的那个类 ...

  4. 接口自动化框架(java)--3.get,delete请求,Excel管理多种请求类型

    这套框架的报告是自己封装的 每种请求类型放入不同的sheet中,就可以避免新建太多的excel去做数据驱动. XSSFSheet类提供了一个读取sheet的方法,getSheetAt(int),通过下 ...

  5. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  6. 转载:python + requests实现的接口自动化框架详细教程

    转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...

  7. python + requests实现的接口自动化框架详细教程

    前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...

  8. Jmeter+ant+Jenkins接口自动化框架搭建

    摘自:https://testerhome.com/topics/13389 一.背景  上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...

  9. Jmeter+Ant+Jenkins接口自动化框架

    最近应公司要求,搭建一套接口自动化环境.看到通知邮件,没有多想就确定了Jmeter路线.可能有些人会 说,为啥不用python,相对而言高大上一些.因为公司内部现在项目有用到Jmeter,正好可以结合 ...

随机推荐

  1. ReSharper反编译C#类库

    经常会在使用C#类中的某个函数时想了解其中具体的代码,可是F12转到定义后只能看到函数简单的声明, 看不到方法体中的代码,这挺让人沮丧的.. 如下: F12进入后显示的是元数据, Equals函数只能 ...

  2. Matlab将多项式的系数设为0

    符号运算时有些多项式的系数值接近于0,像这样 fun = 3.5753839759325595498222646101085e-49*x + 1.836709923159824231201150839 ...

  3. 03.Regression

    01.regression # -*- coding: utf-8 -*- """ scipy 패키지 선형 회귀분석 """ from s ...

  4. SQL反模式学习笔记14 关于Null值的使用

    目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...

  5. el内部支持运算表达式,外部不支持

    el内部支持运算表达式 如"${pageBean.currentPage==1}" "${pageBean.currentPage+1}"........ 外部 ...

  6. Java 实现视频下载功能

    public static boolean httpDownload(String httpUrl, String saveFile) { // 1.下载网络文件 int byteRead; URL ...

  7. vscode断点调试简单的服务端文件

    一.无配置文件时,如何调试? 1.安装code命令打开vscode,快捷键command + shift + p,输入shell command,选择install 'code' command in ...

  8. css变量使用

    CSS中的变量给了我们诸多优点:方便.代码重用.更可靠的代码库和提升防错能力.(此句转) 变量虽好用,但是兼容是在不怎么样:点这里查看. 一.变量的声明 :root { --base-font-siz ...

  9. NEL程序员专用轻钱包 进入0.01状态了

    这个轻钱包能干什么,现在就能在测试网看个余额,转个帐,调用个合约. 而且功能非常程序员化 你会说是不是没啥用   但是他有非常有用,因为他可以很容易的拼出NEOGUI拼不出来的交易 比如参与ICO交易 ...

  10. python is, ==区别

    “is” is the identity comparison. #比较引用是否相同 “==” is the equality comparison. #比较内容是否相同 >>> [ ...