精华内容
下载资源
问答
  • 抽取BaseCase类继承特性应用二级目录三级目录 继承特性应用 目前已有3个案例类,有较多重复代码,针对重复代码抽取共性方法,形成basecase父类,...比如:设置请求头、往环境变量里存值 二级目录 三级目录 ...

    继承特性应用

    目前已有的3个案例类,有较多重复代码,针对重复代码抽取共性方法,形成basecase父类,所有案例类在继承父类,即可使用父类里封装好的共性方法
    比如:设置请求头、往环境变量里存值方法

    public class BaseCase {
    
    	//
    	public void setDefaultHeaders(Map<String, String> headers) {
    	//根据需求自定义默认请求头格式,示例如下:
    		headers.put("Content-Type", "application/json");
    		
    	}
    	
    	//抽取设置环境变量方法
    	public void setEnv(String body,String jsonPath,String envKey) {
    	Object o = JSONPath.read(body, jsonPath);
    	if (o != null) {
    		EnvUtils.env.put(envKey, o.toString());
    		}
    	}
    }
    
    

    case类继承BaseCase类调用父类封装好的方法

    如下示例LoginCase继承BaseCase,直接调用setDefaultHeaders和setEnv方法

    public class LoginCase extends BaseCase{
    
    	@Test(dataProvider = "Datas")
    	public void test(ApiInfo api, CaseInfo c) {
    		Map<String, String> headers = new HashedMap<String, String>();
    		//继承使用父类方法
    		setDefaultHeaders(headers);
    		String body = HttpUtils.call(api.getApiUrl(), api.getApiMethod(), c.getParams(), headers);		
    		//继承使用父类方法
    		setEnv(body, "jsonpath表达式", "${环境变量名}");
    	}
    
    	@DataProvider
    	public Object[][] Datas() {
    		// 登录接口的在接口信息excel里的ApiId=2
    		Object[][] datas = ExcelUtils.getApiAndCaseByApiId("2");
    		return datas;
    	}
    
    }
    
    展开全文
  • 设置头部部分代码提取由于发起post请求的时候,它可能为json格式,也可能为form表单格式。所以对他进行提取publicstaticvoidpost(Stringurl,S...

    设置头部部分代码提取

    由于发起post请求的时候,它可能为json格式,也可能为form表单格式。所以对他进行提取

    public static void post(String url, String params, Map<String, String> headers) throws Exception {
        HttpPost post = new HttpPost(url);
        setHeaders(headers, post);
        StringEntity body = new StringEntity(params, "utf-8");
        post.setEntity(body);
        HttpClient client = HttpClients.createDefault();
        HttpResponse response = client.execute(post);
        printResponse(response);
    }
    

    接收一个Map<String, String> headers

    遍历这个Map对象,将它一个个通过setHeader写入到headers中

    /**
     * 设置请求头
     *
     * @param headers 包含了请求头的Map集合
     * @param request 请求类型
     */
    private static void setHeaders(Map<String, String> headers, HttpRequest request) {
        Set<String> keySet = headers.keySet();
        for (String key : keySet) {
            request.setHeader(key, headers.get(key));
        }
    }
    

    测试代码修改

    @Test(dataProvider = "datas")
    public void test(CaseInfo caseInfo) {
        try {
            HashMap<String, String> headers = new HashMap<>();
            headers.put("X-Lemonban-Media-Type", "lemonban.v1");
            String contentType = caseInfo.getContentType();
            if ("json".equals(contentType)) {
                headers.put("Content-Type", "application/json");
            } else if ("form".equals(contentType)) {
                headers.put("Content-Type", "application/x-www-form-urlencoded");
            }
            if ("post".equals(caseInfo.getMethod())) {
                HttpUtils.post(caseInfo.getUrl(), caseInfo.getParams(), headers);
            } else if ("get".equals(caseInfo.getMethod())) {
                HttpUtils.get(caseInfo.getUrl(), headers);
            } else if ("patch".equals(caseInfo.getMethod())) {
                HttpUtils.patch(caseInfo.getUrl(), caseInfo.getParams(), headers);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    修改headers代码:

    HashMap<String, String> headers = new HashMap<>();
    headers.put("X-Lemonban-Media-Type", "lemonban.v1");
    String contentType = caseInfo.getContentType();
    if ("json".equals(contentType)) {
        headers.put("Content-Type", "application/json");
    } else if ("form".equals(contentType)) {
        headers.put("Content-Type", "application/x-www-form-urlencoded");
    }
    

    先定义了一个空的HashMap

    然后根据测试数据,往它里面插入头部信息。

    修改form

    当传入的内容是json格式,但是传入方式为form的时候,会出现异常。需要将json转换为form格式

    if ("json".equals(contentType)) {
        headers.put("Content-Type", "application/json");
    } else if ("form".equals(contentType)) {
        Map<String, String> map = JSONObject.parseObject(params, Map.class);
        String formParams = "";
        for (String key : map.keySet()) {
            formParams += key + "=" + map.get(key) + "&";
        }
        params = formParams.substring(0, formParams.length() - 1);
        headers.put("Content-Type", "application/x-www-form-urlencoded");
    }
    

    代码提取

    将整个操作提取为一个call函数

    public static void call(CaseInfo caseInfo) {
        try {
            HashMap<String, String> headers = new HashMap<>();
            headers.put("X-Lemonban-Media-Type", "lemonban.v1");
    
            String params = caseInfo.getParams();
            String url = caseInfo.getUrl();
            String method = caseInfo.getMethod();
            String contentType = caseInfo.getContentType();
    
            if ("json".equals(contentType)) {
                headers.put("Content-Type", "application/json");
            } else if ("form".equals(contentType)) {
                params = jsonStr2KeyValueStr(params);
                headers.put("Content-Type", "application/x-www-form-urlencoded");
            }
    
            if ("post".equals(method)) {
                HttpUtils.post(url, params, headers);
            } else if ("get".equals(method)) {
                HttpUtils.get(url, headers);
            } else if ("patch".equals(method)) {
                HttpUtils.patch(url, params, headers);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * json字符串转换成key=value
     * 例如:{"mobilephone":"13877788811","pwd":"12345678"} => mobilephone=13877788811&pwd=12345678
     *
     * @param json Json字符串
     * @return
     */
    private static String jsonStr2KeyValueStr(String json) {
        Map<String, String> map = JSONObject.parseObject(json, Map.class);
        String formParams = "";
        for (String key : map.keySet()) {
            formParams += key + "=" + map.get(key) + "&";
        }
        return formParams.substring(0, formParams.length() - 1);
    }
    

    后续测试部分代码为:

    @Test(dataProvider = "datas")
    public void test(CaseInfo caseInfo) {
        HttpUtils.call(caseInfo);
    }
    

    登陆接口测试

    测试数据:

    https://github.com/zx490336534/auto_api/blob/master/src/test/resources/cases_v3.xlsx

    同理登陆接口测试 只需修改测试数据即可

    DataProvider中修改

    List list = ExcelUtils.read(1, 1, CaseInfo.class);
    
    package com.zhongxin.cases;
    
    import com.zhongxin.pojo.CaseInfo;
    import com.zhongxin.utils.ExcelUtils;
    import com.zhongxin.utils.HttpUtils;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    import java.util.List;
    
    public class LoginCase {
        @Test(dataProvider = "datas")
        public void test(CaseInfo caseInfo) {
            HttpUtils.call(caseInfo);
        }
    
        @DataProvider
        public Object[] datas() {
            List list = ExcelUtils.read(1, 1, CaseInfo.class);
            return list.toArray();
        }
    }
    
    展开全文
  • // 设置请求头 packageHeader(headers, httpGet); // 创建httpResponse对象 CloseableHttpResponse httpResponse = null; try { // 执行请求并获得响应结果 return getHttpClientResult...
  •  Servlet被服务器实例后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应doXXX方法(doGet,doPost)等,当服务器决定将实例销毁时候调用其destroy方法。 与cgi区别...
  • java 面试题 总结

    2009-09-16 08:45:34
    Servlet被服务器实例后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应doXXX方法(doGet,doPost)等,当服务器决定将实例销毁时候调用其destroy方法。 与cgi区别...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    5个目标文件,演示Address EJB实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用clientgetHome()函数调用Home接口...
  • 5个目标文件,演示Address EJB实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用clientgetHome()函数调用Home接口...
  • java web技术开发大全(最全最新)

    千次下载 热门讨论 2012-10-10 07:21:38
    4.3.3 实例:验证响应头设置情况 4.4 使用:HttpServletRequest获得请求消息 4.4.1 获取请求行消息 4.4.2 获取网络连接消息 4.4.3 获取请求头消息 4.5 处理Cookie 4.5.1 什么是Cookie 4.5.2 Cookie类...
  • Java Web开发技术大全

    2014-11-05 14:35:40
    4.3.3 实例:验证响应头设置情况 4.4 使用:HttpServletRequest获得请求消息 4.4.1 获取请求行消息 4.4.2 获取网络连接消息 4.4.3 获取请求头消息 4.5 处理Cookie 4.5.1 什么是Cookie 4.5.2 ...
  • java web开发技术大全

    热门讨论 2014-01-08 15:11:52
    4.3.3 实例:验证响应头设置情况 4.4 使用:HttpServletRequest获得请求消息 4.4.1 获取请求行消息 4.4.2 获取网络连接消息 4.4.3 获取请求头消息 4.5 处理Cookie 4.5.1 什么是Cookie 4.5.2 ...
  • Java经典编程300例(code)

    千次下载 热门讨论 2013-01-09 10:26:53
    实例034 用数组设置JTable表格 列名与列宽 49 实例035 使用按钮控件数组实现 计算器界面 51 实例036 通过复选框控件数组实现 添加多个复选框控件 52 实例037 使用选择排序法对数组排序 53 实例038 使用冒泡排序法...
  • 本书适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 1.1 Java环境 实例001 下载JDK开发工具包 ...
  • 本书适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 1.1 Java环境 实例001 下载JDK开发工具包 ...
  •  本书非常适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目 录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 2 1.1 Java环境 3 实例001 下载JDK开发...
  •  本书非常适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目 录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 2 1.1 Java环境 3 实例001 下载JDK开发...
  • 5.4.1、设置页面MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现...
  • 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 ...
  • 5.4.1、设置页面MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现...
  • 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 ...
  • AsyncHttpHelp是一个android平台下基于httpclient开发HTTP网络请求工具。 优点 功能齐全,提供常用...5、json格式内容传输(json字符串自动java对象,java对象自动转json字符串) 6、普通文件上传/下载 7、断

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

java的接口自动化请求头设置

java 订阅