`
CharlesCui
  • 浏览: 427422 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我的Httpunit+Junit文件上传API测试用例

阅读更多
package com.alisoft.aep.sip.core;

import static org.junit.Assert.*;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import com.alisoft.sip.sdk.isv.SignatureUtil;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.UploadFileSpec;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebResponse;

public class TestSIPUploadAPI {
	public static String src_url="http://10.0.68.183:3000/images";
	public static String file144kb="C:\\Sample 144KB.JPG";
	public static String file200kb="C:\\Sample 200KB.JPG";
	public static String file255kb="C:\\Sample 255KB.JPG";
	
	public static String receive_path="C:\\Received.bmp";
	private String api_server = "http://10.2.226.19:8180/sip/rest";
	
	public static char[] hexChar = {'0', '1', '2', '3',  
	                               '4', '5', '6', '7',  
	                               '8', '9', 'a', 'b',  
	                               'c', 'd', 'e', 'f'}; 
	
	//hashType = "SHA1","SHA-256","SHA-384","SHA-512";
	public static String getHash(String fileName, String hashType) throws  
	        Exception {  
	    InputStream fis;  
	    fis = new FileInputStream(fileName);  
	    byte[] buffer = new byte[1024];  
	    MessageDigest md5 = MessageDigest.getInstance(hashType);  
	    int numRead = 0;  
	    while ((numRead = fis.read(buffer)) > 0) {  
	        md5.update(buffer, 0, numRead);  
	    }  
	    fis.close();  
	    return toHexString(md5.digest());  
	}  
	
	public static String toHexString(byte[] b) {  
	    StringBuilder sb = new StringBuilder(b.length * 2);  
	    for (int i = 0; i < b.length; i++) {  
	        sb.append(hexChar[(b[i] & 0xf0) >>> 4]);  
	        sb.append(hexChar[b[i] & 0x0f]);  
	    }  
	    return sb.toString();  
	}
	
	private String prepareUrl(String sip_appKey, String sip_apiname,
		String sip_appsecret, String api_server, String sessionid) {
		String timestamp = getTimestamp();
		StringBuffer urlStr = new StringBuffer(api_server);
		urlStr.append(urlStr.indexOf("?") != -1 ? "&" : "?");
		urlStr.append("sip_timestamp=").append(timestamp).append("&");
		urlStr.append("sip_appkey=").append(sip_appKey).append("&");
		urlStr.append("sip_apiname=").append(sip_apiname).append("&");
		urlStr.append("sip_sessionid=").append(sessionid).append("&");

		Map<String, String> map = new HashMap<String, String>();
		map.put("sip_timestamp", timestamp);
		map.put("sip_appkey", sip_appKey);
		map.put("sip_apiname", sip_apiname);
		map.put("sip_sessionid", sessionid);
		
		String sign = SignatureUtil.Signature(map, sip_appsecret);
		urlStr.append("sip_sign=").append(sign).append("&");
		return urlStr.toString().replace(" ", "%20");
	}
	
	private String getTimestamp() {
		java.text.SimpleDateFormat formater = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		return formater.format(new Date());
	}
	
	public void caseMaker(String filein_path,String fileout_path,int assertequal) throws Exception
	{  
	   System.out.println("使用Post方式向服务器发送数据,然后获取网页内容:");
	   
		String sip_appkey = "test_app003";
		String sip_apiname = "alitest.ali-001-upload";
		String sip_appsecret = "secret_app003";
		String sip_sessionid = "sddddeeefg" + getTimestamp();
		String url = prepareUrl(sip_appkey, sip_apiname, sip_appsecret,
				api_server, sip_sessionid);
	   
	   //建立一个WebConversation实例
	   WebConversation wc = new WebConversation();
	   //向指定的URL发出请求
	   File fi=new File(filein_path);
	   //UploadFileSpec[] ufs = {new UploadFileSpec(fi)}; 
	   PostMethodWebRequest req = new PostMethodWebRequest(url);
	   req.setMimeEncoded(true);
	   //req.setParameter("image[file]",ufs);
	   req.selectFile("image[file]",fi);
	   WebResponse resp = wc.getResponse( req );
	   
	   try{
		   byte[] buf = new byte[1024];
		   OutputStream bufferOut = new BufferedOutputStream(new FileOutputStream(fileout_path));
		   InputStream respis = resp.getInputStream();
	       int numRead = 0;
	       do {
	         numRead = respis.read(buf, 0, buf.length);
	         if (numRead > 0) {
	        	 bufferOut.write(buf, 0, numRead);
	         }
	       } while (numRead >= 0);
		   bufferOut.flush();
		   bufferOut.close();
	   }
	   catch(IOException e){}
	   
	   //uoload will fail when SIP limit 0KB
	   switch(assertequal){
	   case 0:assertNotSame(getHash(filein_path,"MD5"),getHash(fileout_path,"MD5"));break;
	   case 1:assertEquals(getHash(filein_path,"MD5"),getHash(fileout_path,"MD5"));break;
	   default :break;
	   }
	   System.out.printf("Src file's MD5 is %s\nRecevied file's MD5 is %s.",getHash(filein_path,"MD5"),getHash(fileout_path,"MD5"));
	}	
	
	//@Test
	public void testCase1() throws Exception
	{
		//Need to preset SIP uoload limit of file size equal 0KB 
		caseMaker(file144kb,receive_path,0);
	}
	@Test
	public void testCase2() throws Exception
	{
		//Need to preset SIP uoload limit of file size equal 200KB 
		caseMaker(file144kb,receive_path,1);
	}
	@Test
	public void testCase3() throws Exception
	{
		//Need to preset SIP uoload limit of file size equal 200KB 
		caseMaker(file200kb,receive_path,1);
	}	
	@Test
	public void testCase4() throws Exception
	{
		//Need to preset SIP uoload limit of file size equal 200KB 
		caseMaker(file255kb,receive_path,0);
	}	
}

 

断言是通过比较上传前的文件和上传后服务器返回的文件的MD5值来判断的,MD5算法是我们坛子里的某个兄台的,忘了叫啥了。

2
1
分享到:
评论

相关推荐

    junit4.10+dbunit2.4.7+httpunit+junitperf的jar包

    Junit4.10、DbUnit2.4.7、HttpUnit和JunitPerf是Java测试领域中常用的四个库,它们各自为不同的测试场景提供了强大的支持。下面将详细介绍这些库的功能和使用方法。 1. Junit4.10: Junit是Java编程语言中最著名的...

    基于Junit的HttpUnit测试

    `JUnit` 是 Java 编程语言中最常用的单元测试框架,它提供了一套简单的 API 来编写测试用例。通过断言(assert)方法,我们可以验证方法的输出是否符合预期。`JUnit` 提供了注解(annotation)来简化测试的组织,...

    httpunit测试包

    在HttpUnit中,我们可以使用JUnit来组织和执行针对网站接口和自动化测试的测试用例。 7. **servlet.jar**:虽然HttpUnit主要关注客户端的测试,但这个库可能包含对Servlet API的支持,使得HttpUnit可以更好地模拟...

    httpunit-1.7.zip + junitperf-1.9.1.zip

    JUnit是Java领域广泛使用的单元测试框架,它允许开发者编写可重复执行的测试用例,以验证代码的功能。JUnitPerf则增强了JUnit的功能,使开发人员能够测量和评估测试用例的性能。它可以跟踪执行时间,进行负载测试,...

    httpunit-1.7

    1. **创建测试用例**:在Java类中,创建HttpUnit测试用例,定义测试方法,如`@Test`注解的方法。 2. **构建HTTP请求**:使用`WebConversation`或`WebClient`对象,创建`WebRequest`,设置URL、请求方法和参数。 3. *...

    使用HttpUnit进行集成测试源码.zip_Httpunit

    在实际应用中,你可以结合其他测试框架,如JUnit或TestNG,来组织和执行HttpUnit测试用例。此外,了解DOM解析和XPath表达式,可以帮助你更有效地在响应内容中查找和验证元素。 总之,HttpUnit是一个强大的工具,...

    如何利用JUnit进行单元测试.ppt

    本文总结了JUnit单元测试框架的基本概念和使用方法,涵盖了JUnit的介绍、单元测试的概念、JUnit的四种测试工具简介、如何利用JUnit进行单元测试的步骤等。 JUnit简介 -------- JUnit是一个开发源代码的Java测试...

    httpunit2.21jar及关联jar包

    使用HTTPUnit进行Web应用测试时,开发者可以编写JUnit或TestNG测试用例,调用HTTPUnit提供的API来发起HTTP请求,然后检查返回的HTTP响应,包括状态码、头部信息、内容等。这有助于验证Web应用的功能,确保其在没有...

    httpunit jar包以及关于它文档

    总之,HTTPUnit是一个强大的工具,它为Java开发者提供了简洁的API,使得测试Web应用变得简单。虽然它可能不适合所有场景,但对于大多数基于HTTP的交互,HTTPUnit都能提供有效的解决方案。在实际开发中,根据项目需求...

    HttpUnit基础教程

    HttpUnit通常与JUnit或其他测试框架一起使用,以提供结构化的测试用例和报告。测试者可以编写JUnit测试类,调用HttpUnit的方法来执行Web应用的测试,然后检查并断言结果,确保Web应用的正确性和稳定性。 总的来说,...

    httpunit Java模拟JS点击事件

    对于自动化测试,可以编写JUnit测试用例,集成HttpUnit来模拟用户交互。这样,每次运行测试时,都可以检查网页行为是否符合预期,从而确保代码质量。 总之,HttpUnit提供了一种高效且灵活的方式来模拟JavaScript...

    HttpUnit基础教程.docx

    HttpUnit 是一个基于Java的开源测试框架,专为测试Web应用程序而设计,它扩展了JUnit,弥补了在JUnit中直接测试远程Web内容的不足。HttpUnit允许开发者通过编写Java代码来模拟浏览器行为,如提交表单、处理...

    servlettest

    在本主题"Servlettest"中,我们将深入探讨如何利用测试工具Junit和httpunit来测试Servlet应用程序。这两个工具在软件开发过程中扮演着关键角色,确保代码的质量和功能正确性。 首先,Junit是一个流行的单元测试框架...

    自动化测试示例TestDemo完善最新版本

    它提供了一套简洁的API,使得开发者可以方便地编写和执行测试用例,验证代码的各个模块是否按照预期工作。JUnit支持注解、异常测试、测试套件等功能,使得测试过程更加结构化和高效。 HttpUnit则是一款轻量级的HTTP...

    追求代码质量: 可重复的系统测试

    在使用DbUnit改进测试用例时,开发者需要定义一个数据集文件(通常是XML格式),这个文件包含了测试所需的数据。然后在测试的setUp阶段,将数据导入到数据库,而在tearDown阶段,清除这些数据。这样,即使测试用例...

    Java极限编程下载

    - **JUnit**:用于Java语言的单元测试框架,可以帮助开发者编写可靠的单元测试用例。 - **Cactus**:一个用于测试Java EE容器服务的框架。 - **HttpUnit**:允许开发者编写针对Web应用程序的功能测试脚本。 **2.4 ...

    软件测试技术在J2EE项目中的应用

    JUnit是Java领域广泛使用的单元测试框架,它的Testcase类用于定义测试用例,每个用例包含一系列测试方法,比较实际结果与预期输出,确保代码逻辑正确。TestSuite类则可以组合多个Testcase或TestSuite,实现对多个类...

    Web自动化测试中的接口测试.pdf

    以及一些自动化测试框架,如JUnit、HttpUnit、JWebUnit等。JUnit是一个Java语言编写的单元测试框架,用于编写和运行可重复的测试。HttpUnit是一个用于模拟HTTP请求和响应的Java类库,允许测试程序在无需真实HTTP...

Global site tag (gtag.js) - Google Analytics