DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jaytang
今日帖子: 1
在线用户: 2
导航: 论坛 -> 文档资料 斑竹:liumazi,ruralboy  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/25 20:34:41
标题:
移动应用开发中的压力测试方法 浏览:3118
加入我的收藏
楼主: 1、概述
    以手机为客户端、应用服务器为中间层、数据库服务器为底层的应用系统中,如何对应用服务器进行压力测试,以确定其负载能力,是一件棘手的事,因为通信协议的私有性使得不能使用一些通用的压力测试工具来进行压力测试。
    随着Delphi XE5支持安卓开发,近日咱就碰上了这个压力测试问题,在此将俺的“程序模拟手机”法简单作一个介绍,供大家参考。整个方案一句话概括:用桌面程序来模拟手机与服务端的交互过程、以运行这个模拟程序的大量进程实例来造成大量手机访问服务器的场景,最终得到测试结论。

2、手机模拟程序的编写
2.1. 先看程序代码
unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Layouts,
  FMX.Memo, MBConnection, FMX.Edit, MBAccessor, Data.DB, Datasnap.DBClient,
  FMX.StdCtrls, midaslib;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button3: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    MBConn: TMBConnection;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Timer1: TTimer;
    MBA: TMBAccessor;
    Cds: TClientDataSet;
    Label4: TLabel;
    Edit4: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure mbconnSessionHeartbeat(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    i: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

//
// 退出...
procedure TForm1.Button3Click(Sender: TObject);
begin
   close;
end;

//
// 启动时,先连上服务器,准备测试...
procedure TForm1.FormCreate(Sender: TObject);
begin
   i:=0;
   edit2.Text:='0';
   edit3.Text:='0';
   edit4.Text:='0';
   if mbconn.Connect then
      begin
         timer1.Interval:=5000+random(5000);
         timer1.Enabled:=true;
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('连接成功,测试将自动启动!');
      end
   else
      begin
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('连接失败,测试无法启动!');
      end;
end;

//
// 心跳包成功时...
procedure TForm1.mbconnSessionHeartbeat(Sender: TObject);
begin
   edit4.Text:=inttostr(strtoint(edit4.Text)+1);
   if memo1.Lines.Count>15 then
      memo1.Lines.Clear;
   memo1.Lines.Add('*** 心跳了一次!');
end;

//
// 每隔100ms-1100ms,执行一次数据库访问任务...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   timer1.Enabled:=false;
//
// 执行任务,成功时...
   if mba.ReadDataset('SELECT TOP 50 * FROM CUSTOMERS',Cds) then
      begin
         edit2.Text:=inttostr(strtoint(edit2.Text)+1);
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('执行一次任务成功!');
      end
//
// 执行任务失败时...
   else
      begin
         edit3.Text:=inttostr(strtoint(edit3.Text)+1);
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('执行一次任务失败!Error='+mba.LastError);
      end;
//
// 总次数完成时,断开服务器连接...
   inc(i);
   if i>=strtoint(edit1.Text) then
      begin
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('全部任务执行完成!');
         mbconn.Disconnect;
         if memo1.Lines.Count>15 then
          memo1.Lines.Clear;
         memo1.Lines.Add('与服务器断开!');
         exit;
      end;
//
// 未完成,准备下次...
   timer1.Interval:=100+random(1000);
   timer1.Enabled:=true;
end;

end.

2.2. 看程序的设计时界面
此帖子包含附件:
JPEG 图像
大小:50.7K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/25 20:35:50
1楼: 3、制造多手机实例的程序
3.1. 先看代码
unit allmain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI, qbcommon;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i: integer;
begin
   for i := 0 to strtoint(edit1.Text)- 1 do
      begin
         winexec(pansichar('testmobile.exe'),sw_show);
         safedelay(500);
      end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   close;
end;

end.

3.2. 看设计时界面
此帖子包含附件:
JPEG 图像
大小:45.9K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/25 20:38:00
2楼: 4、实际压力测试
    然后,先运行总控程序,点“开始”,就会启动指定的若干个模拟手机。为了效果更佳,可以使用多台电脑模拟大量的手机:
此帖子包含附件:
JPEG 图像
大小:145.4K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/25 20:41:14
3楼: 俺使用此方法对快驴中间件服务器进行了很多测试,按每个手机每10秒提交一个任务计算,上千个模拟手机在线时,能轻松应对
----------------------------------------------
樵夫的大马甲
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2013/9/25 22:34:39
4楼: 有没有实测的数据,真的手机,广域网,看看效果
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/26 6:23:14
5楼: 比如,测试了多次的60模拟手机:

0.6秒/次/手机提交任务,相当于0.6秒提交60次任务,即100次/秒,假如按10秒/次/手机的任务提交频度推算,就相当于应对600个手机。

无法用真机测试,因为没这个物理条件来进行,但是,可以确认模拟机可以准确模拟真机的通信方式,通信协议及控件都是咱自己实现的,很清楚。

以上60通道并发还是很保守测试,因为服务器只是一个笔记本电脑,客户端也只用了三台电脑模拟。
----------------------------------------------
樵夫的大马甲
作者:
男 qiuyan81 (苦恋树) ★☆☆☆☆ -
普通会员
2013/9/26 10:42:28
6楼: 压力测试还要考虑网络吞吐量\业务耗时\每秒处理业务素数
----------------------------------------------
作者:
男 qiuyan81 (苦恋树) ★☆☆☆☆ -
普通会员
2013/9/26 10:44:15
7楼: 单机或局域网测试的压力都是不准确的.
----------------------------------------------
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/26 10:56:49
8楼: 严格的测试,肯定不能这样

不过俺只要简单的测试就够了,看看服务端移动功能服务的稳定性和处理能力为主
----------------------------------------------
樵夫的大马甲
作者:
男 qiuyan81 (苦恋树) ★☆☆☆☆ -
普通会员
2013/9/26 13:34:57
9楼: 看了下,原来快驴是客户端写SQL的..这不就是一个SQL语句代理吗?
----------------------------------------------
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/9/26 13:43:10
10楼: 客户端写SQL,只是其中的一种功能支持
同时,完善的服务端插件框架体系、服务端软总线机制(业务逻辑部件的动态插拔),也是支持的

俺的观点始终是:适合假三层的就假三层形式,适合真三层的,就真三层形式,不要一刀切,这样,开发效率才是最高的。
----------------------------------------------
樵夫的大马甲
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行191.4063毫秒 RSS