`

附带文件的压力测试方法Demo

 
阅读更多
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ClientMultipartFormPostTest {
    private static ExecutorService pool = Executors.newFixedThreadPool(300);
    public static void main(String[] args) throws Exception {
        final String path = args[0];//文件地址
        final String url = args[1]; //调用的URL
        final int i_len = Integer.parseInt(args[2]);//线程总数
        final int j_len = Integer.parseInt(args[3]);//每个线程的请求数(暂时没用到)
        
        final AtomicInteger c = new AtomicInteger(0);
        final long s = System.currentTimeMillis();
        
        for (int i = 0; i < i_len; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            upLoadLogMultiThread(url,path);
                            int cc = c.addAndGet(1);
                            if (cc % 1000 == 0) {
                                System.out.println(String.format("c: %d, t: %d", cc, (System.currentTimeMillis() - s)));
                            }
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }
    
    public static void upLoadLogMultiThread(String url,String path) throws IOException{
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpPost httppost = new HttpPost(url);

            FileBody bin = new FileBody(new File(path));
            
            StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);

            HttpEntity reqEntity = MultipartEntityBuilder.create()
                    .addPart("bin", bin)
                    .addPart("comment", comment)
                    .build();
            httppost.setEntity(reqEntity);
            CloseableHttpResponse response = httpclient.execute(httppost);
            try {
                HttpEntity resEntity = response.getEntity();
                EntityUtils.consume(resEntity);
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
    }
     
}

 

前段时间做了一个服务器端接口,是附带文件上传的;后来我们要对这个接口进行压力测试;

其实很多现成的方式可以做压力测试,但是附带文件的的压力测试缺不怎么符合我的需求,jmeter是可以做附带文件上传的压力测试的,只是它是图形界面,而我目前的需求是要在测试机器上面去跑测试,而测试服务器是不能带图形界面的,所以jmeter的方案否决掉;

apache ab test,也是一个压力测试的好工具,只是研究了好久老搞不掂怎么做附带文件上传的压力测试(备注:在本文的最后我附带一下我研究的结果,说多了都是泪)

好了,现在我说下我自己的这个测试工具:

它依赖于赖于httpclient相关的包,包括:commons-codec-1.6.jar、commons-logging-1.1.3.jar、fluent-hc-4.3.4.jar、httpclient-4.3.4.jar、httpclient-cache-4.3.4.jar、httpcore-4.3.2.jar、httpmime-4.3.4.jar、httpmime-4.3.4.jar;

大家可以到apache的官方网站:http://hc.apache.org/downloads.cgi  去下载相关的包;

 

测试方法就是:java -jar errlogClient.jar path url n c

各个参数的标识:path = 目标文件路径 ; url = 请求的地址 ; n = 线程总数 ; c = 每个线程调用请求的次数(备注目前上面的程序我是做循环跑的,所以暂时没用上,大家觉得如果需要用上的话可以改改上面的程序)

 

 

说明:本文转载自:http://www.cnblogs.com/super-d2/p/3831033.html

 

 

分享到:
评论

相关推荐

    压力测试Demo jmeter

    压力测试Demo jmeter压力测试Demo jmeter压力测试Demo jmeter压力测试Demo jmeter

    上传文件demo

    前端多文件图片上传demo,前端多文件图片上传demo,前端多文件图片上传demo,前端多文件图片上传demo

    jmeter接口测试demo文件

    jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件 jmeter接口测试demo文件

    thinkphp3.2 webuploader较大视频文件分段上传方法demo

    thinkphp3.2 webuploader较大视频文件分段上传方法demo,大视频分段上传,上传完成后又将分段视频合并成一个视频文件。

    xml文件读写demo

    xml文件读写demoxml文件读写demoxml文件读写demoxml文件读写demo

    上传的demo资源下载文件

    demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件下载demo文件...

    基于FastDFS分布式文件系统的测试Demo

    基于FastDFS分布式文件系统的测试Demo,可以进行FastDFS分布式文件系统部署后的测试

    Android FileObserver检测文件变化demo

    Android FileObserver 检测文件变化demo,Android FileObserver 检测文件其实也是基于linux的inotify实现的,是从linux内核2.6.13开始加进来的,不过FileObserver检测的文件还是有局限的,似乎只能检测到SD卡的文件...

    Android 文件拷贝Demo

    Android 文件拷贝Demo,可实现SD卡以及内部存储之间进行拷贝

    android 串口测试demo 代码简单 无bug 完美运行

    android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...

    上传文件demo.html

    上传文件demo.html

    文件上传下载demo

    本资料可以显示进度条,共包含多文件文件上传下载demo,同时可以满足多文件批量的上传,运行良好,

    SpringMVC一些配置文件的demo

    SpringMVC一些配置文件的demo

    文件上传EXcel Demo

    Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助

    C# 蓝牙 文件传输 DEMO

    C# 蓝牙 文件传输 完整 DEMO

    ASP.NET MVC 文件管理功能Demo

    采用ASP.NET MVC 技术借助Easy-UI 前端框架 制作文件管理demo,文件操作包括上传,下载,复制,黏贴,压缩,重命名等。文件操作均对于实际文件夹,不包含数据库部分

    Sftp文件上传demo

    Sftp文件上传demo

    java文件上传demo.rar

    java文件上传demo.rarjava文件上传demo.rarjava文件上传demo.rarjava文件上传demo.rarjava文件上传demo.rarjava文件上传demo.rarjava文件上传demo.rar

    springboot+minio文件服务器的demo

    springboot+minio文件服务器的demo,开箱即用 springboot+minio文件服务器的demo,开箱即用 springboot+minio文件服务器的demo,开箱即用 springboot+minio文件服务器的demo,开箱即用 springboot+minio文件服务器的demo...

    下载文件管理demo

    http://blog.csdn.net/son__of__sun/article/details/40398261博客有写,自己去看吧

Global site tag (gtag.js) - Google Analytics