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算法是我们坛子里的某个兄台的,忘了叫啥了。
分享到:
相关推荐
Junit4.10、DbUnit2.4.7、HttpUnit和JunitPerf是Java测试领域中常用的四个库,它们各自为不同的测试场景提供了强大的支持。下面将详细介绍这些库的功能和使用方法。 1. Junit4.10: Junit是Java编程语言中最著名的...
`JUnit` 是 Java 编程语言中最常用的单元测试框架,它提供了一套简单的 API 来编写测试用例。通过断言(assert)方法,我们可以验证方法的输出是否符合预期。`JUnit` 提供了注解(annotation)来简化测试的组织,...
在HttpUnit中,我们可以使用JUnit来组织和执行针对网站接口和自动化测试的测试用例。 7. **servlet.jar**:虽然HttpUnit主要关注客户端的测试,但这个库可能包含对Servlet API的支持,使得HttpUnit可以更好地模拟...
JUnit是Java领域广泛使用的单元测试框架,它允许开发者编写可重复执行的测试用例,以验证代码的功能。JUnitPerf则增强了JUnit的功能,使开发人员能够测量和评估测试用例的性能。它可以跟踪执行时间,进行负载测试,...
1. **创建测试用例**:在Java类中,创建HttpUnit测试用例,定义测试方法,如`@Test`注解的方法。 2. **构建HTTP请求**:使用`WebConversation`或`WebClient`对象,创建`WebRequest`,设置URL、请求方法和参数。 3. *...
在实际应用中,你可以结合其他测试框架,如JUnit或TestNG,来组织和执行HttpUnit测试用例。此外,了解DOM解析和XPath表达式,可以帮助你更有效地在响应内容中查找和验证元素。 总之,HttpUnit是一个强大的工具,...
本文总结了JUnit单元测试框架的基本概念和使用方法,涵盖了JUnit的介绍、单元测试的概念、JUnit的四种测试工具简介、如何利用JUnit进行单元测试的步骤等。 JUnit简介 -------- JUnit是一个开发源代码的Java测试...
使用HTTPUnit进行Web应用测试时,开发者可以编写JUnit或TestNG测试用例,调用HTTPUnit提供的API来发起HTTP请求,然后检查返回的HTTP响应,包括状态码、头部信息、内容等。这有助于验证Web应用的功能,确保其在没有...
总之,HTTPUnit是一个强大的工具,它为Java开发者提供了简洁的API,使得测试Web应用变得简单。虽然它可能不适合所有场景,但对于大多数基于HTTP的交互,HTTPUnit都能提供有效的解决方案。在实际开发中,根据项目需求...
HttpUnit通常与JUnit或其他测试框架一起使用,以提供结构化的测试用例和报告。测试者可以编写JUnit测试类,调用HttpUnit的方法来执行Web应用的测试,然后检查并断言结果,确保Web应用的正确性和稳定性。 总的来说,...
对于自动化测试,可以编写JUnit测试用例,集成HttpUnit来模拟用户交互。这样,每次运行测试时,都可以检查网页行为是否符合预期,从而确保代码质量。 总之,HttpUnit提供了一种高效且灵活的方式来模拟JavaScript...
HttpUnit 是一个基于Java的开源测试框架,专为测试Web应用程序而设计,它扩展了JUnit,弥补了在JUnit中直接测试远程Web内容的不足。HttpUnit允许开发者通过编写Java代码来模拟浏览器行为,如提交表单、处理...
在本主题"Servlettest"中,我们将深入探讨如何利用测试工具Junit和httpunit来测试Servlet应用程序。这两个工具在软件开发过程中扮演着关键角色,确保代码的质量和功能正确性。 首先,Junit是一个流行的单元测试框架...
它提供了一套简洁的API,使得开发者可以方便地编写和执行测试用例,验证代码的各个模块是否按照预期工作。JUnit支持注解、异常测试、测试套件等功能,使得测试过程更加结构化和高效。 HttpUnit则是一款轻量级的HTTP...
在使用DbUnit改进测试用例时,开发者需要定义一个数据集文件(通常是XML格式),这个文件包含了测试所需的数据。然后在测试的setUp阶段,将数据导入到数据库,而在tearDown阶段,清除这些数据。这样,即使测试用例...
- **JUnit**:用于Java语言的单元测试框架,可以帮助开发者编写可靠的单元测试用例。 - **Cactus**:一个用于测试Java EE容器服务的框架。 - **HttpUnit**:允许开发者编写针对Web应用程序的功能测试脚本。 **2.4 ...
JUnit是Java领域广泛使用的单元测试框架,它的Testcase类用于定义测试用例,每个用例包含一系列测试方法,比较实际结果与预期输出,确保代码逻辑正确。TestSuite类则可以组合多个Testcase或TestSuite,实现对多个类...
以及一些自动化测试框架,如JUnit、HttpUnit、JWebUnit等。JUnit是一个Java语言编写的单元测试框架,用于编写和运行可重复的测试。HttpUnit是一个用于模拟HTTP请求和响应的Java类库,允许测试程序在无需真实HTTP...