关于性能测试代码的一些记录(可以将测试记录输出到文件里,记录日志)

21 篇文章 1 订阅
12 篇文章 0 订阅
小技巧(打开文件之后就是16进制的数据)

//将字节数据输出到文件,记录日志
static void fileWriteLog(char *p, long count) 
{
	const char *filename = "/var/log/huituo/jt808_log/other.log";
	FILE *fp1;
	//以追加读写的方式打开文件
	fp1 = fopen(filename, "a+");//失败返回NULL
	if (fp1 == NULL) 
	{
		printf("open file %s failed!", filename);
	}

	fwrite(p, count, 1, fp1);
	
	//关闭文件
	fclose(fp1);
}

void main()
{
     //msg->buffer是一个字节数组 ,msg->size是字节数组的长度
     
      char buf[128] = { 0 };	   
	  for (int i = 0; i < msg->size; ++i) 
	  {
		sprintf(buf, "%02x", msg->buffer[i]);//一个字节一个字节的往里写
		//写日志到文件
        fileWriteLog(buf, strlen(buf));		
	  }
       char ch[]="\n";//添加换行符
	   fileWriteLog(ch, 1);
}
性能测试分为Mbps 和Tps。

Mbps=Mbit/s即兆比特每秒(1,000,000bit/s),Million bits per second的缩写,是一种传输速率单位,指每秒传输的位(比特)数量。
其中:bit代表位或比特,存放一位二进制数,即 0 或 1,最小的存储单位Byte代表字节,8个二进制位为一个字节,即1Byte=8bit,Byte为数据量常用单位。

bps是每秒比特率,8bps=1B/s(字节)
而M是2的20次方,或略作10的6次方。
所以1Mbps=1024Kbps或128KB/s(就是我们常见的网速转换)
1024Kbps / 8 = 128KB/s

TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。

如何计算Mbps:

首先计算处理任务所需时间:

//Linux环境下:
#define MAX_TEST_DATA_LENGTH  1024*1024    //1M数据
struct timeval tv_begin, tv_end;
double diff_time;
double dSpeedMbps;
gettimeofday(&tv_begin, NULL);//开始时间

进行处理数据。。。。。

gettimeofday(&tv_end, NULL);//结束时间

diff_time = (double)((tv_end.tv_sec - tv_begin.tv_sec)*1000000 + (tv_end.tv_usec - tv_begin.tv_usec) )/1000000;   //单位s

dSpeedMbps = MAX_TEST_DATA_LENGTH * 8.0 / (1024 * 1024 * diff_time);
printf("\nTime used: %.2f seconds, Average speed: %.2f Mbps\n\n", diff_time, dSpeedMbps);
	

注意"/" 除号,如果除号两边有一边数据为double型,则输出的数据可以用double变量保存,会保留小数位,具体保留几位,用 %.2f 就是保留小数点后两位,用 %.8f 就是保留小数点后八位。

1、%lf 双精度浮点型,也就是double型的格式,默认保留6位小数。

如:double a = 1.2; printf(“%lf”,a); //1.200000。

2、%.2lf 同上,不过限制了,值保留2位小数。

如:double a = 1.2345; printf(“%.2lf”,a); //1.23。

3、%.2f 表示单精度浮点型,也就是float型的格式。

如:float a = 1.2731; printf(“%.2f”,a); //1.27。

如何计算Tps:

//Linux环境下:
#define TIMES  10000    //执行10000次
struct timeval tv_begin, tv_end;
double diff_time;
double nSpeedTps;
gettimeofday(&tv_begin, NULL);//开始时间

执行次数。。。。

gettimeofday(&tv_end, NULL);//结束时间

diff_time = (double)((tv_end.tv_sec - tv_begin.tv_sec)*1000000 + (tv_end.tv_usec - tv_begin.tv_usec) )/1000000;   //单位s

nSpeedTps = TIMES / diff_time;
printf("\nTime used: %.2f seconds, Average speed: %d Tps\n\n", diff_time,  nSpeedTps);







//将测试记录输出到文件,记录日志
void fileWriteLog(char *p, long count) 
{
	const char *filename = "c:\\loadrunnerLog.txt";
	FILE *fp1;
	//以追加读写的方式打开文件

#ifdef WIN32	
	fopen_s(&fp1, filename, "a+");//如果成功返回0,失败则返回相应的错误代码
	if (!fp1) 
	{
		printf("open file %s failed!", filename);
	}
#else		
	fp1 = fopen(filename, "a+");//失败返回NULL
	if (fp1 == NULL) 
	{
		printf("open file %s failed!", filename);
	}
#endif	
	fwrite(p, count, 1, fp1);
	
	//关闭文件
	fclose(fp1);
}

char logChar[120] = { 0 };
sprintf(logChar, "\nECCGenkeyPair  %d times diff_time = %.2f ms, average speed = %d Tps\n",TIMES, diff_time, nSpeedTps);
fileWriteLog(logChar, strlen(logChar));
	

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是网络服务能力测试工具对应模块的实现方法和技术手段的C/C++代码示例: 1. 测试数据生成模块 测试数据生成模块可以使用随机数生成算法、数据模板生成算法等,以下是使用随机数生成算法的示例代码: ```c++ #include <cstdlib> #include <ctime> // 生成随机数 int rand_int(int min, int max) { static bool initialized = false; if (!initialized) { srand(time(NULL)); initialized = true; } return rand() % (max - min + 1) + min; } ``` 2. 测试执行控制模块 测试执行控制模块可以使用多线程技术、事件驱动技术等,以下是使用多线程技术的示例代码: ```c++ #include <thread> #include <vector> void test_worker(int thread_id) { // 执行测试任务 } // 启动并发测试 void start_concurrent_test(int thread_count) { std::vector<std::thread> threads; for (int i = 0; i < thread_count; i++) { threads.push_back(std::thread(test_worker, i)); } for (auto& t : threads) { t.join(); } } ``` 3. 测试结果收集模块 测试结果收集模块可以使用性能指标计算算法、性能指标统计算法等,以下是使用性能指标计算算法的示例代码: ```c++ #include <chrono> // 计算响应时间 long long calc_response_time(std::chrono::system_clock::time_point start_time, std::chrono::system_clock::time_point end_time) { std::chrono::duration<long long, std::micro> diff = end_time - start_time; return diff.count(); } ``` 4. 测试结果分析模块 测试结果分析模块可以使用数据分析算法、统计分析算法等,以下是使用统计分析算法的示例代码: ```c++ #include <algorithm> #include <vector> // 计算最大值 template<typename T> T calc_max(const std::vector<T>& data) { return *std::max_element(data.begin(), data.end()); } // 计算平均值 template<typename T> T calc_mean(const std::vector<T>& data) { T sum = std::accumulate(data.begin(), data.end(), 0); return sum / data.size(); } ``` 5. 网络通信模块 网络通信模块可以使用Socket编程接口、第三方网络库等,以下是使用Socket编程接口的示例代码: ```c++ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> // 建立TCP连接 int tcp_connect(const char* ip, int port) { int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { return -1; } struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(ip); serv_addr.sin_port = htons(port); if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { return -1; } return sockfd; } ``` 6. 界面交互模块 界面交互模块可以使用命令行界面、图形界面等,以下是使用命令行界面的示例代码: ```c++ #include <iostream> // 输出测试结果 void output_test_result(const std::string& result) { std::cout << result << std::endl; } // 获取测试参数 void get_test_params(int& thread_count, int& test_duration) { std::cout << "请输入线程数:"; std::cin >> thread_count; std::cout << "请输入测试时间(秒):"; std::cin >> test_duration; } ``` 7. 其他组成部分 其他组成部分包括日志记录模块、配置文件管理模块、异常处理模块等,以下是日志记录模块的示例代码: ```c++ #include <fstream> #include <chrono> // 记录日志 void write_log(const std::string& message) { std::ofstream log_file("log.txt", std::ios::app); if (log_file.is_open()) { auto now = std::chrono::system_clock::now(); std::time_t now_time = std::chrono::system_clock::to_time_t(now); log_file << std::ctime(&now_time) << message << std::endl; log_file.close(); } } ``` 总之,在C/C++中实现网络服务能力测试工具的对应模块可以使用多种技术手段和算法,包括随机数生成算法、多线程技术、事件驱动技术、性能指标计算算法、数据分析算法、Socket编程接口等。通过合理选择和应用这些技术和算法,可以实现高效、准确的网络服务能力测试工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值