webbench源码剖析

2023-11-03

Webbench是有名网站压力测试工具,它是由Lionbridge公司开发
http://www.lionbridge.com
Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。
Webbench最多可以模拟3万个并发连接去测试网站的负载能力。
webbench的源码很简单,只有socket.c和webbench.c两个文件,加起来也就500行左右的代码。
实例:
这里写图片描述
流程图如下:
这里写图片描述
整个代码主要有以下几个函数:
int Socket(const char *host, int clientPort):建立socket连接
void usage(void):使用说明
void build_request(const char *url):构造http请求
static int bench(void):,创建管道,对http请求进行测试
void benchcore(const char *host,const int port,const char *req):测试http请求

//socket.c 文件
#include <sys/types.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/time.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
/*
    函数功能:建立socket连接,返回-1连接失败,成功返回socket描述符
    host:网络地址
    clientPort:端口

*/
int Socket(const char *host, int clientPort)
{
    int sock;
    unsigned long inaddr;
    struct sockaddr_in ad;//声明一个ipv4地质类型的结构体
    struct hostent *hp;

    memset(&ad, 0, sizeof(ad));
    ad.sin_family = AF_INET;//设置为流式(TCP协议数据传输方式)

    inaddr = inet_addr(host);
    /*
        点分十进制的IP地址转换成网络中传输的长整型数。如果传入的字符串不是一个合法的IP地址,
        将返回INADDR_NONE,INADDR_NONE是255.255.255.255 是一个无效地址
    */
    if (inaddr != INADDR_NONE)//判断是否为合法IP地址
        memcpy(&ad.sin_addr, &inaddr, sizeof(inaddr));//转换后的IP拷贝到ad结构体
    else
    {
        //如果不是IP地址而是域名
        hp = gethostbyname(host);//通过域名获取IP地址
       //gethostbyname(),返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。        
        if (hp == NULL)
            return -1;
        memcpy(&ad.sin_addr, hp->h_addr, hp->h_length);
    }
    ad.sin_port = htons(clientPort);//设置端口号
        //htons(),将一个无符号短整型的主机数值转换为网络字节
    sock = socket(AF_INET, SOCK_STREAM, 0);//申请一个套接字
    //socket(),获取文件描述符,成功返回一个套接字描述符,失败返回-1
    if (sock < 0)
        return sock;
    if (connect(sock, (struct sockaddr *)&ad, sizeof(ad)) < 0)//和刚才的ad结构体建立连接,也就是和host建立连接
        return -1;
    /*
    connet(),用于建立与指定socket的连接
    参数1:标识一个未连接的socket
    参数2:指向要连接套接字的sockaddr结构体的指针
    参数3:sockadd人结构体的字节长度
    */
    return sock;
}

//webbench.c文件
#include "socket.c"
#include <unistd.h>
#include <sys/param.h>
#include <rpc/types.h>
#include <getopt.h>
#include <strings.h>
#include <time.h>
#include <signal.h>

/* values */
volatile int timerexpired=0;//用来检测时长是否到达指定时长
int speed=0;//记录服务器响应的数量
int failed=0;//记录请求失败的数量
int bytes=0;//记录读取成功的字节数
/* globals */
int http10=1; /* 0 - http/0.9, 1 - http/1.0, 2 - http/1.1 */
/* Allow: GET, HEAD, OPTIONS, TRACE */
#define METHOD_GET 0
#define METHOD_HEAD 1
#define METHOD_OPTIONS 2
#define METHOD_TRACE 3
#define PROGRAM_VERSION "1.5"
//请求方法设为GET,此外还支持OPTIONS,HEAD,TRACE等方法
int method=METHOD_GET;
int clients=1;//并发数,由命令行参数-c指定,默认为1
int force=0;//是否等待服务器应答
int force_reload=0;//是否使用cache,默认为0,使用
int proxyport=80;//代理服务器端口号,默认80
char *proxyhost=NULL;//代理服务器地址
int benchtime=30;//测试时间,由命令行参数-t指定,默认为30秒
/* internal */
int mypipe[2];//创建管道,用于父子进程间通信
char host[MAXHOSTNAMELEN];//主机名
#define REQUEST_SIZE 2048
char request[REQUEST_SIZE];//HTTP请求信息
/*
struct option类型数组.该数据结构中的每个元素对应了一个长选项,并且每个元素是由四个域组成。通常情况下,可以按以下规则使用:
第一个元素,描述长选项的名称;第二个选项,代表该选项是否需要跟着参数,需要参数则为1,反之为0;第三个选项,可以赋为NULL
;第四个选项,是该长选项对应的短选项名称。另外,数据结构的最后一个元素,要求所有域的内容均为0,即{NULL,0,NULL,0}。
结构中的元素解释如下: 
1)const char *name:选项名,前面没有短横线。譬如"help"、"verbose"之类。 
2)int has_arg:描述长选项是否有选项参数,如果有,是哪种类型的参数,其值见下表:  
符号常量             数值        含义  
no_argument            0    选项没有参数 
required_argument      1    选项需要参数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webbench源码剖析 的相关文章

  • UI自动化概念 + Web自动化测试框架介绍

    1 UI自动化测试概念 我们先明确什么是UI UI 即 User Interface简称UI用户界面 是系统和用户之间进行交互和信息交换的媒介 UI自动化测试 Web自动化测试和移动自动化测试都属于UI自动化测试 UI自动化测试就是借助自动
  • 下面几款接口测试工具,工作中都有用的那些?

    下面几款接口测试工具 工作中都有用的那些 1 Fiddler Fiddler是一款功能强大的接口测试软件 它可以帮助用户抓取 修改和重放HTTP HTTPS请求 是一款可视化的网络调试利器 它可以支持HTTP协议和HTTPS协议 支持GET
  • 全链路压测的“谜”

    前言 对于性能测试来说 全链路压测肯定跑不了的 在昨天上午的 GIAC全球互联网架构大会 上 网易云就进行了全链路压测的议题 对于有性能测试的公司来说 面试往往会被问到什么是全链路压测 如何有效的开展全链路压测等等 我今天也只是高屋建瓴 站
  • Jmeter —— 常用的几种断言方法(基本用法)

    在使用JMeter进行性能测试或者接口自动化测试工作中 经常会用到的一个功能 就是断言 断言相当于检查点 它是用来判断系统返回的响应结果是否正确 以此帮我们判断测试是否通过 本文 主要介绍几种常用的断言 响应断言 JSON断言 BeanSh
  • 面试题:如何测试登录功能

    最近在做一个创新项目 这个项目有二个平台 每个平台都有前后端 故有四个系统 每个系统都有登录功能 而且不同系统代码设计方式都有所差异 所以就这个登录功能而言就要测试四次 看似一个简单的登录功能其中设计的测试点也是相当复杂 今天就讲讲如何测试
  • Mysql压力测试(sysbench)

    目录 配置项目环境 参考 采用sysbench压测mysql详解 dream21st的博客 CSDN博客 实验步骤 1 安装sysbench工具 2 在master上创建用户和库 配置用户的权限可以使他可以访问库 Mysql的主从复制 3
  • jmeter接口测试,CSV数据文件引用,参数化

    1 新增一个Excel文件 填写会用到的变量数据 2 将文件保存为CSV格式文件 3 在jmeter里添加 CSV数据文件配置 导入登录的用户和密码数据等信息 在jmeter里引用Excel转化的CSV格式数据文件 说明 带入的数据依次是
  • jmeter分布式压测

    1 什么是分布式压测 由一台控制机 Master 发出命令 控制多个压力机 Slaves 执行操作 2 为什么要做分布式压测 一台压力机的 Jmeter 默认最大支持 1000 左右的并发用户数 线程数 再大的话 容易造成卡顿 无响应等情况
  • 超全汇总,性能测试常用指标大全(重要)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 安全测试工具,自动发现网站所有URL!

    作为一个安全测试人员来说 首先要拿到网站所有url 然后根据拿到的url进行渗透测试进行漏洞挖掘 本文给大家介绍的是如何拿到一个网站所有的url 深度爬取层级控制 现在我也找了很多测试的朋友 做了一个分享技术的交流群 共享了很多我们收集的技
  • 软件测试:测试用例&八大要素&模板

    一 通用测试用例八要素 1 用例编号 2 测试项目 3 测试标题 4 重要级别 5 预置条件 6 测试输入 7 操作步骤 8 预期输出 二 具体分析通用测试用例八要素 1 用例编号 一般是数字和字符组合成的字符串 可以包括 下划线 单词缩写
  • 自动化测试:PO模式详解!

    PO Page Object 模式是一种在自动化测试中常用的设计模式 将页面的每个元素封装成一个对象 通过操作对象来进行页面的交互 概括来说就是 每个页面都有对应的PO类 PO类中包含了页面的元素定位和操作方法 测试脚本只需要调用PO类中的
  • 自动化测试、压力测试、持续集成

    因为项目的原因 前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api 下面将研究的成果展示给大家 希望对需要的人有所帮助 SoapUI 是什么 SoapUI 是一个开源测试工具 通过 soap http 来检查 调用 实现 W
  • 第三方软件验收测评在项目验收中的重要性

    CMA CNAS第三方检测报告 软件从最简单的家用电冰箱到工业生产 涉及方方面面 以前软件中的问题只是个人重启一下机器的小事情 但如今软件已在大型工业中发挥越来越大的作用 软件安全与质量的隐患已可能对人身安全和环境造成威胁 软件工程 的总目
  • 广州软件第三方测试报告需要盖CNAS\CMA吗?怎么取费?

    CNAS CMA资质 1 CMA资质标识 根据报告接收方要求 第三方测试报告上是否加盖CMA标识 第三方测试机构执行标准为GB T25000 51和GB T25000 10标准 2 CNAS标识 ILAC MRA国际互认标识 通常第三方测试
  • 软件测试测试环境搭建很难?一天学会这份测试环境搭建教程

    如何搭建测试环境 这既是一道高频面试题 又是困扰很多小伙伴的难题 因为你在网上找到的大多数教程 乃至在一些培训机构的课程 都不会有详细的说明 你能找到的大多数项目 是在本机电脑环境搭建环境 或是别人已经搭建好的环境 你很难上手体验在服务器上
  • 性能测试:Jmeter压测过程中的短信验证码读取

    问题背景 现如今国内的大部分软件或者网站应用 普遍流行使用短信业务 比如登录 注册以及特定的业务通知等 对于这些业务 在使用Jmeter进行性能测试的过程中 就会需要自动获取和填入短信验证码 否则性能流程无法进行下去 由于绝大多数的系统其短
  • JMeter 性能测试基本过程及示例

    jmeter 为性能测试提供了一下特色 jmeter 可以对测试静态资源 例如 js html 等 以及动态资源 例如 php jsp ajax 等等 进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一
  • wireshark抓包工具的使用

    专注于分享软件测试干货内容 欢迎点赞 收藏 留言 如有错误敬请指正 交流讨论 欢迎加入我们一起学习 资源分享 耗时200 小时精选的 软件测试 资料包 软件测试学习教程推荐 火遍全网的 软件测试 教程 前言 wireshark是非常流行的网
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是

随机推荐

  • vue和java的前后端请求

    GetMapping value url produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Forever Winter

    Forever Winter 题意 给一个像下面这样的图 要求第一圈分支和第二圈分支 下图的第一圈分支为5 第二圈分支为3 思路 求每个点的度 最内圈的分支的度是唯一的 找到即可 设为x 然后第二圈的分支为 n 1 x x n为总共节点上
  • 量化演示代码

    import numpy as np import copy def KL P Q out np sum P np log P Q return out def maxq value dynamic range np abs value m
  • C++一行输入多个数字(利用cin和空格)

    使用的方法颇为简单 利用了cin遇到空格就中断的特点 仅含有输入以及输出 欢迎大家一起交流 include
  • unity3d运行后自动暂停_在Unity中使用暂停的小技巧

    很多人在游戏中写暂停脚本的时候 经常会想到 Time timeScale 0 这种方法 但是 Time timeScale 只是能暂停部分东西 如果在 update 函数中持续改变一个物体的位置 这种位置改变貌似是不会受到暂停影响的 比如
  • 科学与AI之间的联系,许多AI的先驱科学家也是脑科学家

    从人工智能 artificial intelligence AI 发展的历史来看 我们可以清楚地看到脑科学与AI之间的联系 许多AI的先驱科学家也是脑科学家 使用显微镜发现的生物大脑的神经连接启发了人们对人工神经网络的研究 使用电子探测器发
  • 杭电OJ-ACM2036(改革春风吹满地)

    题目分析 原题给出的条件是通过多组数据的各个坐标 用逆时针表达 求出对应的 任意 多边形的面积大小 法一 Time Limit Exceeded Java版 主要思路 对一个多边形进行拆解 若含有n条边 记其坐标分别为 X0 Y0 X1 Y
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.

    更新镜像前是可以挂载的 使用SD卡更新成最新的debian系统镜像后就出现下面错误 mount home debian nfs rootfs bad option for several filesystems e g nfs cifs y
  • 下载bilibli网站视频

    https www videofk com bilibili video download bilibili https www videofk com bilibili video download search url https 3A
  • 第十届蓝桥杯 b组

    试题 A 组队 本题总分 5 分 作为篮球队教练 你需要从以下名单中选出 1 号位至 5 号位各一名球员 组成球队的首发阵容 每位球员担任 1 号位至 5 号位时的评分如下表所示 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多
  • 【Python】Python 3.11 无法安装 Pytorch ,提示找不到包

    问题 Python 3 11 无法安装 Pytorch 在 pytorch 界面找到语句 cmd 中输入 pip3 install torch torchvision torchaudio extra index url https dow
  • Django显示html网页中静态图片

    Django中显示html网页中静态图片 新建static文件夹 images文件夹 静态图片 检查setting py INSTALLED APPS列表中是否有django contrib staticfiles DEBUG 值是否为Tr
  • Spring事务注解实现的原理

    Spring事务注解是个典型的Spring AOP的注解 方法上面加上 Transactional 方法就有了事务的能力 面试中 基于动态代理讲更多的东西 为什么呢 gt 其实里面核心也是动态代理 在一个使用了ProfitDetailSer
  • c语言printf,scanf的各种用法及易错点

    scanf详解 声明 int scanf const char format argument 返回值 Return Value Both scanf and wscanf return the number of fields succe
  • 机器学习(五)

    一 数据降维 一 特征选择 特征选择是去除一些与预测结果没有关系或者两个特征有高度关联的特征作为机器学习接下来训练集 这里举个例子 预测狗的品种 这里有毛的颜色 有没有牙齿 眼睛颜色 显然有没有牙齿这一特征与预测结果没有关系 这里则需要将这
  • Nerf(Representing Scenes as Neural Radiance Fields for View Synthesis)代码复现笔记

    前言 本文旨在帮助小白快速了解or学习复现出Nerf的代码 整体结构保持不变 不过会针对部分细节为了更好理解进行了修改 本文会相应更新讲解视频于B站 id 出门吃三碗饭 有问题到b站评论区留言 同步更新于 公众号 AI知识物语 B站讲解视频
  • numpy笔记

    文章目录 1 创建numpy变量 2 numpy和list进行转换 3 创建全0全1的numpy对象 4 统计学应用 1 求和 2 均值 3 标准差 4 均方差 5 数据处理 1 数据查找 2 数据排序 3 获取不重复的元素 4 取最大最小
  • 七:以理论结合实践方式梳理前端 React 框架 ——— React 状态管理

    react 状态机制 虽然 react 前面使用通过创建一个 context 上下链接 对象 基于 Provider 供应者 Consumer 消费者 来进行数据的获取 但这种方式局限于只能读取数据 对数据的其他操作还是需要通过 props
  • webbench源码剖析

    Webbench是有名网站压力测试工具 它是由Lionbridge公司开发 http www lionbridge com Webbench能测试处在相同硬件上 不同服务的性能以及不同硬件上同一个服务的运行状况 webbench的标准测试可