当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

使用HttpClient4实现API测试实战(2)——多附件上传

发表于: 2012-07-27   作者:cgs1999   来源:转载   浏览次数:
摘要: 0、特别说明 1、声明:如需转载,请注明来自 http://cgs1999.iteye.com/; 2、 阅读本文前建议先阅读下面博客: 使用HttpClient4实现API测试实战(1) 1、引言 API测试过程中,有些API接口可能需要上传附件,而且是多个附件,本文主要是解决API测试过程中的多附件上传问题。 当然,你也可以将本文当作 使用HttpClient模
0、特别说明
1、声明:如需转载,请注明来自 http://cgs1999.iteye.com/;
2、 阅读本文前建议先阅读下面博客:
使用HttpClient4实现API测试实战(1)

1、引言
API测试过程中,有些API接口可能需要上传附件,而且是多个附件,本文主要是解决API测试过程中的多附件上传问题。

当然,你也可以将本文当作 使用HttpClient模拟HTTP实现多附件上传的文章来阅读。

2、更新测试项目
2.1 添加项目依赖
httpmime-4.2.1.jar


2.2 修改HttpClient帮助类HttpClientUtil
添加下面方法
    public static String doPostUpload(String url, List<BasicNameValuePair> datas, List<String> files) {
        try {
        	// 组装提交信息
            MultipartEntity reqEntity = new MultipartEntity();
            for(BasicNameValuePair data : datas) {
            	reqEntity.addPart(data.getName(), new StringBody(data.getValue(), "text/plain", Charset.forName("UTF-8")));
            }
            for(String file : files) {
            	reqEntity.addPart("file", new FileBody(new File(file)));
            }
            // 设置提交信息
            HttpPost httppost = new HttpPost(url);
            httppost.setEntity(reqEntity);
            HttpResponse httpResponse = httpClient.execute(httppost);
            
            // 若状态码为200 ok
			if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				// 取出回应字串
				String strResult = EntityUtils.toString(httpResponse.getEntity());
				System.out.println("doPostJson response[" + url + "]: \n" + strResult);
				return strResult;
			} else {
				System.out.println("doPost Error Response[" + url + "]: \n" + httpResponse.getStatusLine().toString());
			}
        } catch (Exception e) {
			e.printStackTrace();
		}
        return null;
    }


2.3 修改API帮助类ApiUtil
增加多附件测试方法
	// 发布带附件信息
	public static boolean uploadMessage(String status, List<String> files) {
		return uploadMessage(status, null, files);
	}
	public static boolean uploadMessage(String status, String groupId, List<String> files) {
		List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(0);
		params.add(new BasicNameValuePair("account_token", getToken()));
		params.add(new BasicNameValuePair("status", status));
		if(groupId!=null) {
			params.add(new BasicNameValuePair("group_id", groupId));
		}

		String xml = HttpClientUtil.doPostUpload(API_URL + "/messages/upload", params, files);
		if (!hasText(xml)) {
			return false;
		}

		if (xml.indexOf("errorCode") == -1) {
			return true;
		} else {
			return false;
		}
	}


2.4 修改ApiUtil中的测试方法
修改后的测试代码如下
public static void main(String[] argus) {
	login("chengesheng@gmail.com", "password");
	
	List<String> files = new ArrayList<String> (0);
	files.add("c:\\myimage.jpg");
	files.add("c:\\dulala.txt");
	uploadMessage("测试附件和图片上传1", "151", files);
}


2.5 运行测试
运行测试代码,带附件信息发布成功;

3、参考资料
[1] HttpClient中官方范例
    examples\org\apache\http\examples\entity\mime\ClientMultipartFormPost.java
[2] http://evgeny-goldin.com/blog/uploading-files-multipart-post-apache/
[3] http://blog.csdn.net/fengjia10/article/details/7315279


使用HttpClient4实现API测试实战(2)——多附件上传

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
多附件上传的功能,在我们开发系统的时候经常会需要,客户的需求也很复杂,如果每次的附件上传都从
多附件上传的功能,在我们开发系统的时候经常会需要,客户的需求也很复杂,如果每次的附件上传都从
上篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多
原文: 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(P
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传。MVC文件上传相关兄
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在Web Api中,我们对资源的CRUD操
前几天,由于项目的需求,需要在infopath中上传多附件,当我用重复表设计好表单后。以为,客户的需
以前有介绍过ajaxFileUpload实现文件上传,但那是单文件的,这次介绍多文件上传。 单文件上传参考:htt
CSS 3允许设置多个背景图片,每个背景图片占一层,层的上下按照在CSS中书写的顺序来定,最先写的背
1.struts2本身不支持异步上传文件,需要相应的插件支持,这里用jquery.js和jquery.form.js来实现。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号