接口压力测试控制台程序

C#接口性能测试--计算执行时间 在做程序的时候,肯定会遇到给他人提供接口,或者使用他人接口的地方。对于一个开发者来说,不管是提供给他人的接口还是,自己提供给他人的接口。都要进行测试。     对于很多的测试,需要详细的记录 该接口的时间范围,比如 该接口的性能为   10ms 100ms的地方。     既然要了解每个接口的性能,该测试不是为了 测试接口的正确性,只是在测试正确性的时候 同时,记录一下该接口的执行时间。 阅读详情
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace TestApi
{
    class Program
    {
        public static List<Result> results = new List<Result>();

        static void Main(string[] args)
        {
            //运行次数
            var runCount = 10;
            //线程数
            var threadCount = 50;
            //输出文本
            FileStream fileStream = new FileStream("./TestDetail.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter streamWriter = new StreamWriter(fileStream);
            TextWriter writer = Console.Out;
            Console.SetOut(streamWriter);

            Console.WriteLine("================开启线程处理================");
            List<ManualResetEvent> list = new List<ManualResetEvent>();
            for (int i = 0; i < threadCount; i++)
            {
                ////测试登录
                //ManualResetEvent mreCheck = new ManualResetEvent(false);
                //System.Threading.Thread threadCheckUser = new Thread((o) =>
                //{
                //    string sUrl = "http://127.0.0.1:2923/ICBuring/VerifyUserIsCanLogin";
                //    string sJson = (new JavaScriptSerializer()).Serialize(new { userName = "opts", passWord = "123456" });
                //    StartRequest(runCount, System.Threading.Thread.CurrentThread.ManagedThreadId, sUrl, sJson);
                //    ((ManualResetEvent)o).Set();
                //});
                //list.Add(mreCheck);
                //threadCheckUser.Start(mreCheck);

                //测试查表
                ManualResetEvent mreEvent = new ManualResetEvent(false);
                System.Threading.Thread threadTableInfo = new Thread((o) =>
                {
                    string sUrl = "http://127.0.0.1:2923/ICBuring/GetTableInfo";
                    string sJson = (new JavaScriptSerializer()).Serialize(new
                    {
                        userName = "opts",
                        passWord = "123456",
                        querySql = "SELECT FULLNAME FROM EMPLOYEE WHERE EMPLOYEENAME='opts'"
                    });
                    StartRequest(runCount, System.Threading.Thread.CurrentThread.ManagedThreadId, sUrl, sJson);
                    ((ManualResetEvent)o).Set();
                });
                list.Add(mreEvent);
                threadTableInfo.Start(mreEvent);

                ////测试调用服务修改数据
                //ManualResetEvent mreOrder = new ManualResetEvent(false);
                //System.Threading.Thread threadOrder = new Thread((o) =>
                //{
                //    string sUrl = "http://127.0.0.1:2923/ICBuring/UpdateTaskQty";
                //    string sJson = (new JavaScriptSerializer()).Serialize(new
                //    {
                //        userName = "opts",
                //        passWord = "123456",
                //        taskCode = "6248290",
                //        qty = "200"
                //    });
                //    StartRequest(runCount, System.Threading.Thread.CurrentThread.ManagedThreadId, sUrl, sJson);
                //    ((ManualResetEvent)o).Set();
                //});
                //list.Add(mreOrder);
                //threadOrder.Start(mreOrder);
            }
            WaitHandle.WaitAll(list.ToArray());
            OutPutResult();
            Console.WriteLine("===========所有线程完成任务!===============");
            //输出文本
            Console.SetOut(writer);
            streamWriter.Close();
            fileStream.Close();
            //读取文本到控制台
            System.IO.StreamReader sr = new System.IO.StreamReader("D:\\TestDetail.txt");
            string content = sr.ReadToEnd();
            foreach (string s in content.Split('\n'))
            Console.WriteLine(s);
            sr.Close();

            Console.WriteLine("执行完成,执行信息保存路径:D://TestDetail.txt,请按任意键关闭!" );

            Console.ReadLine();


        }

        /// <summary>
        /// 操作请求
        /// </summary>
        /// <param name="connectionCount"></param>
        /// <param name="threadId"></param>
        /// <param name="sUrl"></param>
        /// <param name="sJson"></param>
        public static void StartRequest(int connectionCount, int threadId,string sUrl,string sJson)
        {
            int iSuccess = 0;
            int iFailed = 0;
            DateTime beforDT = System.DateTime.Now;
            for (var i = 0; i < connectionCount; i++)
            {
                try
                {
                    Post(sUrl, sJson);
                    iSuccess++;
                }
                catch (Exception ex)
                {
                    iFailed++;
                }
            }
            DateTime afterDT = System.DateTime.Now;
            TimeSpan ts = afterDT.Subtract(beforDT);
            results.Add(new Result() { ThreadID=threadId,Url=sUrl,SuccessCount=iSuccess,FailedCount=iFailed,TotalTime= ts.TotalMilliseconds / 1000 });
        }

        /// <summary>
        /// 打印信息
        /// </summary>
        public static void OutPutResult()
        {
            foreach (Result result in results.OrderBy(o=>o.Url))
            {
                Console.WriteLine( result.Url + ",线程:" + result.ThreadID + "," + "成功数:" + result.SuccessCount.ToString() 
                                + ",失败数:" + result.FailedCount.ToString() + ",总共花费" + result.TotalTime + "秒");
            }
        }

        /// <summary>
        /// Post方式调用接口
        /// </summary>
        /// <param name="url"></param>
        /// <param name="json"></param>
        /// <returns></returns>
        public static string Post(string url, string json)
        {
            using (HttpClient client = new HttpClient())
            {
                HttpContent content = new StringContent(json);
                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                HttpResponseMessage response = client.PostAsync(url, content).Result;
                HttpStatusCode status = response.EnsureSuccessStatusCode().StatusCode;
                string rt = response.Content.ReadAsStringAsync().Result;
                if (!(status == HttpStatusCode.OK))
                {
                    throw new Exception("HttpError:Stauts:" + Convert.ToInt16(status).ToString() + " Msg:" + rt);
                }
                return rt.ToString();
            }
        }

        /// <summary>
        /// 输出信息
        /// </summary>
        public class Result
        {
            /// <summary>
            /// 线程ID
            /// </summary>
            public int ThreadID { get; set; }
            /// <summary>
            /// 请求地址
            /// </summary>
            public string Url { get; set; }
            /// <summary>
            /// 成功次数
            /// </summary>
            public int SuccessCount { get; set; }
            /// <summary>
            /// 失败次数
            /// </summary>
            public int FailedCount { get; set; }
            /// <summary>
            /// 用时
            /// </summary>
            public double TotalTime { get; set; }
        }
    }
}

2024年最新最全面的JMeter接口压力测试 核心可执行文件以及核心配置文件jmeter.bat: windows启动文件:jmeter: mac或者linux启动文件:jmeter-server.bat:window分布式压测使用的启动文件jmeter.properties: 核心配置文件插件拓展的包核心的依赖包ext核心包junit单元测试包1)线程组Thread Group(一个线程组里可以添加多个取样器)Name:线程组名称Comments:对线程组的描述。 阅读详情

相关推荐

SMSBoom压力测试实战:合法合规评估短信接口性能

压力测试是评估系统在高并发负载下稳定性和性能瓶颈的关键技术手段,其核心原理是通过模拟大量用户请求,探测系统的吞吐量极限、资源消耗及响应时间变化。在工程实践中,合法合规的压力测试能为容量规划和性能优化提供数据支撑,尤其适用于短信接口这类关键业务路径。短信接口作为验证码、通知等场景的核心组件,其性能直接影响用户体验和业务连续性。通过使用SMSBoom等工具在隔离的测试环境中,针对自有服务进行可控的压力测试,开发者能够科学评估接口的稳定性、验证风控策略有效性,并精准定位数据库连接池或外部API调用等常见瓶颈,从而

weixin_30340819的博客 528

C#接口测试程序

public interface Iprogramer { void WriteCode(); } class clsVBProgramer : Iprogramer { public void WriteCode(){ MessageBox.Show("VB程序员"); ...

weixin_34319640的博客 506

WebApi 压力测试工具 ApaChe-Jmeter

最近在做Asp.net Core Api,做微服务架构,后面会有相关文档介绍现用的架构,今天先记录一下压测工具。ApaChe-Jmeter! 架构大概是linux CentOS + Doker + Kong + Apollo .今天不细讲~~~ Jmeter是一个接口压测工具,自认为还没对其彻底了解,只是简单会用了,欢迎大象来喷~~ Jmeter 选择的是5.0版本。 需要JDK环境,要求...

Andy Lee 3661

使用jmeter进行api接口压力测试

前言 压力测试的工具由挺多的,但看了其他人的文章介绍,还是选了jmeter,开源、免费啊, 下载 下载地址: https://jmeter.apache.org/download_jmeter.cgi 环境配置 下载后解压zip到任意目录,然后配置环境变量 变量名JMETER_HOME,变量值F:\apache-jmeter-4.0 在变量名CLASSPATH新增 %J...

战争迷雾的专栏 3万+

使用SMSBoom进行短信接口压力测试:从原理到实战的完整指南

压力测试是软件工程中确保系统稳定性的关键技术,通过模拟高并发场景来评估服务的性能极限与可靠性。其核心原理在于利用多线程或多进程并发发送请求,监控响应时间、成功率等关键指标,从而识别系统瓶颈。在短信服务这类高并发业务中,压力测试尤为重要,能有效避免因流量突增导致的验证码延迟、服务不可用等问题。本文以Python开源工具SMSBoom为例,深入解析其作为通用HTTP压测工具的工作机制,并提供从环境搭建、脚本定制到阶梯式压测策略的完整实战方案。通过模拟真实业务场景,开发者可以精准定位性能瓶颈,优化服务器配置与代码

weixin_42526166的博客 426

Altium Designer许可证冲突?手把手教你用Windows防火墙彻底禁止AD联网(附详细截图)

本文详细介绍了如何通过Windows防火墙精准管控Altium Designer的网络权限,解决许可证冲突问题。通过配置入站和出站规则,彻底阻断AD的联网行为,提升软件运行效率。适用于需要稳定使用Altium Designer的工程师,附有详细截图和高级验证方法。

weixin_38170137的博客 423

强大的接口测试与压力测试工具——postman&jmeter

对于系分的项目,我使用了postman做接口测试,用jmeter做压力测试。下面来谈谈这两个工具的使用方法。 Postman postman是一款很方便的接口测试工具,有app也有chrome插件,它可以模拟用户发起的各类HTTP请求,然后获得相应的回应。打开后是如下界面: 在上面的地址栏里,可以填写接口的url以及相应的方法,如下就是get方法: 下面这一栏可以填写报文中的字...

diceroller的博客 2万+

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1104

接口压力测试:Jmeter【专门做接口压力测试】

Postman是一个很方便的测试工具,但是比起Jmeter来,它在性能测试和压力测试方面的功能要少很多。Jmeter功能非常强大,虽然我感觉不太简约,但是它可以作为专业的性能测试工具使用。 QPS/Throughput极限测试: 安装Jmeter:http://jmeter.apache.org/download_jmeter.cgi 参考资料: 接口压力测试工具(推荐) 如何用Jmeter做接口测试 [JM_03]JMeter性能测试基础实战之QPS检测过程解析 【jmeter】jmeter测试网

u013250861的博客 4797

Arduino-CRSF库详解:嵌入式端CRSF协议解析与ELRS接收机集成

CRSF(Crossfire Serial Protocol)是一种面向FPV无人机的轻量级、高实时性串行通信协议,采用单总线异步传输与8位CRC-8校验机制,广泛应用于遥控链路与遥测交互。其核心在于帧同步(0xC8起始字节)、反相逻辑电平及无重传的广播式设计,对嵌入式平台的UART精度、电平匹配和状态机健壮性提出严苛要求。Arduino-CRSF库正是为资源受限MCU(如ESP32、STM32、ATmega328P)提供零配置、中断安全的协议解析能力,封装了CRC查表计算、超时恢复、多级同步验证等关键机制

weixin_35756690的博客 415

[LaTeX] 使用natbib宏包实现参考文献的“作者-年份”引用格式及常见编译错误排查

本文详细介绍了在LaTeX中使用natbib宏包实现参考文献“作者-年份”引用格式的完整流程。从宏包配置、.bib文件准备到标准编译步骤,重点解析了常见的“Bibliography not compatible with author-year”错误成因,并提供了彻底清理辅助文件等解决方案,帮助用户高效排版符合学术规范的参考文献。

moon9的博客 481

Ollama(5)服务接口压力测试

本文探讨了企业级Ollama模型服务的性能评估方法。文章首先介绍了企业级应用需要考虑的响应速度、稳定性等关键指标,并对比了Ollama的两种启动方式:手动启动(ollamaserve)适合调试,而systemd服务管理更适合生产环境。重点阐述了压力测试方案,包括测试指标设定、环境配置和代码参数说明,通过REST API接口模拟真实场景,评估系统吞吐量和并发能力。测试结果显示,在4张NVIDIA A10显卡配置下,并发10次请求时平均响应时间17秒,吞吐量达158.06 tokens/s。值得注意的是,测试发

1804

命名管道和匿名管道

我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种: 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。 流管道:去除了第一种限制,为半双工,可以双向传递, 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。 1、普通管道 int pipe(int f...

ffsiwei的博客 1万+

【算法工程】使用python脚本实现对异步接口的压力测试

异步接口、算法异步接口、压力测试、压测、异步接口压测、算法异步任务压测、asyncio、python脚本、jmeter

源泉的小广场 1479

01-认识脑电信号及相关信号的预处理过程

脑电信号处理过程脑电实验为什么要预处理预处理方法降采样如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 脑电实验 本博客主要是记录基于脑电信号的情绪识别方法的研究...

脑机交流者的博客 7658

Windows服务器环境下 OpenCode Skill 下载与运行全流程实战指南(小白版)

Windows服务器环境下 OpenCode Skill 下载与运行全流程实战指南(小白版),OpenCode技能安装与使用指南,分为四个步骤:1)准备Windows服务器环境并确认OpenCode可用;2)通过Git或直接下载方式获取Skill;3)配置技能路径至.opencode/config.json;4)运行测试技能。关键点包括路径配置必须使用双反斜杠、确保Python环境正确安装、管理员权限运行等。文中提供了文本总结技能的完整案例,从创建skill.yaml和main.py到注册运行的全流程,并针

专注于编程、AI、人工智能等多个领域内容研究和分析 1079

JMeter压力测试

压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤 因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境 1.下载windows版本的jmeter,下载好解压,下面为解压目录 2.双击运行bin目录下的jmeter.bat ,打开程序界面如下 不带请求参数http接口测试 我们在这里模拟1000个并发访问我们的商品列

weixin_45819693的博客 365

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

君逍遥o 5992

locust登录及依赖接口压力测试

一、locust登录及依赖接口压力测试 需求: 1.登录 2.change 接口下发 change_acl_mode.py # coding=utf-8 """ @Project :pachong-master @File :change_acl_mode.py @Author :gaojs @Date :20...

懿曲折扇情 825

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Jmeter接口压力测试--先登录后再测

一,添加线程组 填入以下参数,我填入的10,1代表平均1秒执行10个线程 二,创建http request(login) 右键线程组--添加取样器--添加HTTP请求 最下面的参数为登录时需要的参数,该参数可通过登录时抓包取得,或者在登录时,通过浏览器控制台的network查看对应的请求下的formdata查看 三,设置token 要先判断当前的登录的token是在header中的Author...

xiaoritai7803的博客 7237

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用COSBench工具对ceph s3接口进行压力测试

http://www.bubuko.com/infodetail-1742376.html 使用COSBench工具对ceph s3接口进行压力测试 时间:2016-09-05 20:52:53      阅读:4467 ...

wuxiaobingandbob的专栏 3343

DO280管理和监控OpenShift平台--Web控制台使用

第九章 管理和监控OpenShift平台--Web控制台使用

IT民工金鱼哥,专注运维技术。 731

压力测试系统的建设

容量压测的技术方案,比较复杂,而且需要对相应场景进行针对性的建设。

key_3_feng的博客 592

Jmeter+Jenkins接口压力测试持续集成详解

接口功能测试应用: http://www.weather.com.cn/data/cityinfo/<city_code>.html测试功能:获取对应城市的天气预报请求方法:Get压测脚本开发工具:jmeter源码脚本位置: https://github.com/shifengboy/iInterface_python/blob/master/jmx/iInterface.jmx将Jmeter压测任务集成到Jenkins通过Jenkins运行Jmeter任务在Jenkins上展示Jmeter压测报告可自

chengxuyuznguoke的博客 585

Jmeter做接口的压力测试

章节一压力测试课程介绍 1、2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分,然后在后续操作中慢慢补充,更容易消化和理解 2、常用压力测试工具对比 简介:目前用的常用测试工具对比 1、loadrunner 性能稳定,压测结果及细粒度大,可以自定...

weixin_30642561的博客 1043

汽车OTA通道和压力测试方案

摘要:OTA技术通过无线网络实现汽车软件的远程更新与管理,提升用户体验和安全性。北汇信息提供完整的OTA测试解决方案,包括部件级、系统级和实车级测试,涵盖功能验证、压力测试和环境适应性测试。测试系统采用模块化架构,支持多种通信协议和故障注入,确保OTA升级的稳定性和兼容性。服务范围包括测试规范开发、脚本编写和测试实施,帮助客户快速部署新功能并修复漏洞。

Polelink北汇信息的博客 1266
上一篇: 进行SQL性能优化的常用方法
下一篇: 超全面常用的数据库优化方案
oopts
博客等级 码龄9年 0粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值