`

附带文件的压力测试方法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

    本篇将深入探讨使用Apache JMeter进行压力测试的实践方法,结合“压力测试Demo jmeter”这一主题,我们将详细解析如何通过JMeter工具进行有效的压力测试,并结合“userlist.csv”用户列表数据文件和“压力测试.jmx”...

    springboot+minio文件服务器的demo

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

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

    《基于FastDFS分布式文件系统的测试Demo详解》 在现代互联网应用中,文件存储的需求日益增长,传统的单机文件系统已无法满足大规模、高并发的访问需求。因此,分布式文件系统应运而生,其中FastDFS作为一款轻量级的...

    Android FileObserver检测文件变化demo

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

    高德地图测试demo,高德地图测试demo

    【标题】"高德地图测试demo"涉及到的是一个基于高德地图API的示例项目,目的是展示如何在实际应用中集成和使用高德地图服务。这个项目可能包含了地图的加载、定位、标记、路线规划等功能的实现,为开发者提供了一个...

    jmeter接口测试demo文件

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

    Android USB检测,文件读写demo

    本教程将详细讲解如何实现"Android USB检测,文件读写demo",帮助你掌握相关技能。 首先,让我们了解USB设备在Android中的接入处理。Android系统提供了` UsbManager `类来管理和控制USB设备。通过` ...

    ASP.NET MVC 文件管理功能Demo

    ASP.NET MVC 文件管理功能Demo是基于ASP.NET MVC框架和Easy-UI前端库开发的一个实践项目,旨在实现对本地文件系统的全面操作。这个Demo涵盖了多种文件操作功能,包括上传、下载、复制、粘贴、压缩以及重命名等,使得...

    上传文件demo

    每个文件可以被添加到FormData中,通过调用`append`方法,键为字段名,值为文件对象。 4. **Ajax异步请求**:通常,我们会使用Ajax(XMLHttpRequest或fetch API)来实现异步文件上传,避免页面刷新。`FormData`对象...

    上传的demo资源下载文件

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

    jsp上传文件Demo

    2. **文件大小限制**:可以设置每个文件以及整体上传的大小限制,防止大文件上传导致服务器压力过大。 3. **文件类型检查**:通过设置,可以限制上传文件的类型,比如只允许上传图片或文档等。 4. **错误处理**:...

    Android 文件拷贝Demo

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

    上传文件demo.html

    上传文件demo.html

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

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

    C# 蓝牙 文件传输 DEMO

    C#的`FileStream`类可以用来操作本地文件,而`BluetoothClient`类的`GetStream()`方法则可以获取到与蓝牙设备的通信流。通过读写流,可以将本地文件的数据分块发送到蓝牙设备,或者接收设备传来的文件数据。 5. **...

    MTP 文件浏览Demo

    1. **设备探测与连接**:在MTP文件浏览Demo中,首要任务是检测并连接到可用的MTP设备。这通常通过`UsbManager`类和` UsbDevice`接口实现,以及监听USB接入事件。一旦检测到MTP设备,就需要获取设备的MTP端点并建立...

    文件上传EXcel Demo

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

    CentOS配置测试demo文件

    这个"CentOS配置测试demo文件"包含了三个关键文件:`demo.cpp`,`demo.php`,和`demo.sql`,它们分别对应于C++编程、PHP脚本和SQL数据库操作。下面我们将详细探讨这些文件以及与之相关的知识点。 首先,`CentOS7.5`...

    http文件上传demo(http模拟POST表单上传文件)

    由于iOS无法通过html表单来上传文件,因此想要上传文件,必须实现http请求,而不能像其他语言那样通过html表单的post就能上传。此demo经过xcode5测试通过。此文件上传demo是按照 rfc1867协议实现的。

    TreeDemo官网文件

    在本案例中,我们关注的是一个名为"TreeDemo"的相关文件集合,虽然描述中提到的测试文件无法找到,但这并不妨碍我们深入探讨TreeDemo的核心概念和其在实际应用中的重要性。 树形数据结构是一种非线性的数据结构,它...

Global site tag (gtag.js) - Google Analytics