51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

楼主: lsekfe
打印 上一主题 下一主题

【你来问我来答第53期】:Fin助你锁定性能测试切入点(已结束)

[复制链接]

该用户从未签到

41#
发表于 2014-12-4 18:50:12 | 只看该作者
jasonteststudy 发表于 2014-12-4 08:18
请教5个问题,期待您的回复:
1.WebService (WebAPI)的性能测试工具用什么比较好,我没有找到合适的,LR ...

@jasonteststudy 您好!
1. WebService(WebAPP)的性能测试工具用什么比较好, 我没有找到合适的,LR只支SOAP的
答: 我的想法是, 不要把LR看作一个工具, 它是一个平台, 就和ECLIPS一样的道理, LR提供基础的SOAP的应用协议编写方法, 很难满足现在各种各样的开发需求,但是不代表我们不能做, 换个思路, 比如说用 web/HTTP 应用协议自己写 web_custom_request 来达到我们的目的, 还可以用WinSocket 应用协议达到目的.如下:

这个例子是我以前写的多协议调用接口的方式, 从你提的问题来看,相信已经是一个中高级的性能测试人员了, 这个思路应该一看就明白的, 代码我就不解释了.

脚本开发练习用接口:
/* 天气查询
* <IP>61.147.124.120:80</IP>
* <URL>http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx</URL>
* <WSDL>http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl</WSDL>
* <ServiceName>getWeatherbyCityName</ServiceName>
*/

方法一:
/*
**说明: 接口报文以WebService 应用协议格式发送
**作者:Fin.
**时间:2014-11-14 22:15:18
*/
Action()
{
        web_service_call( "StepName=getWeatherbyCityName_101",
                "SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName",
                "ResponseParam=response",
                "Service=WeatherWebService",
                "ExpectedResponse=SoapResult",
                "Snapshot=t1404647143.inf",
                BEGIN_ARGUMENTS,
                "theCityName=北京",
                END_ARGUMENTS,
                BEGIN_RESULT,
                END_RESULT,
                LAST);
        return 0;
}

方法二:
/*
**说明:接口报文以Web/HTTP 应用协议格式发送
**作者:Fin.
**时间:2014-11-14 22:13:54
*/

Action()
{
        //设置LR变量长度
        web_set_max_html_param_len("8192");
       
        //参数 p_area 转换为UTF8格式
        lr_convert_string_encoding( lr_eval_string("{p_area}"),
                LR_ENC_SYSTEM_LOCALE,
                LR_ENC_UTF8,
                "s_areaInUTF8" );
        //去除 s_areaInUTF8 变量的结尾\0结束符
        lr_save_string(lr_eval_string("{s_areaInUTF8}"),
                                   "s_areaInUTF8");

        //增加报文头 Content-Type: text/xml;charset=UTF-8
        web_add_header("Content-Type",
                "text/xml; charset=UTF-8");
               
        //关联取所有值
        web_reg_save_param("s_allString",
                "LB=",
                "RB=</soap:Envelope>",
                LAST);

        web_custom_request("web_custom_request",
                "URL=http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx",
                "Method=POST",
                "TargetFrame=",
                "Resource=0",
                "Referer=",
                "Body=<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://WebXml.com.cn/\"><soapenv:Header/><soapenv:Body><web:getWeatherbyCityName><web:theCityName>{s_areaInUTF8}</web:theCityName></web:getWeatherbyCityName></soapenv:Body></soapenv:Envelope>",
                LAST);

        lr_convert_string_encoding( lr_eval_string("{s_allString}"),
                LR_ENC_UTF8,
                LR_ENC_SYSTEM_LOCALE,
                "stringInUTF8" );

        lr_message("返回报文:\n====\n%s\n====\n", lr_eval_string("{stringInUTF8}"));


return 0;
}

方法三:
/*
**说明:SOAP 接口报文以 WinSocket 应用协议格式发送
**作者:Fin.
**时间:2014-11-14 22:16:15
*/


#include "lrs.h"

Action()
{
        char * sedbuf;
        char * revbuf;
        int sedbufLength;

        sedbuf = (char*)malloc(1024, sizeof(char));
        revbuf = (char*)malloc(8192, sizeof(char));

//         lr_convert_string_encoding( lr_eval_string("{p_area}"),
//                 LR_ENC_SYSTEM_LOCALE,
//                 LR_ENC_UTF8,
//                 "s_areaInUTF8" );

        sprintf(sedbuf, "%s", "POST /WebServices/WeatherWebService.asmx HTTP/1.0\r\n"
                                                        "Content-Type: text/xml; charset=UTF-8\r\n"
                                                        "Cache-Control: no-cache\r\n"
                                                        "User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)\r\n"
                                                        "Accept: */*\r\n"
                                                        "Connection: Keep-Alive\r\n"
                                                        "Host: webservice.webxml.com.cn\r\n"
                                                        "Content-Length: 269\r\n"
                                                        "\r\n"
                                                        "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://WebXml.com.cn/\"><soapenv:Header/><soapenv:Body><web:getWeatherbyCityName><web:theCityName>姝︽眽</web:theCityName></web:getWeatherbyCityName></soapenv:Body></soapenv:Envelope>\r\n");
        sedbufLength = strlen(sedbuf);
        lr_message("sedbufLength -> %d", sedbufLength);
        lr_message("sedbuf -> %s", sedbuf);

        lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=61.147.124.120:80", LrsLastArg);

        lrs_set_send_buffer("socket0", sedbuf, sedbufLength);

        lrs_send("socket0", "buf0", LrsLastArg);

        lrs_receive("socket0", "buf1", LrsLastArg);

        lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"s_paramInUTF8","LB=<getWeatherbyCityNameResult>","RB=</getWeatherbyCityNameResult>",1,0,-1);

        lr_convert_string_encoding( lr_eval_string("<s_paramInUTF8>"),
                LR_ENC_UTF8,
                LR_ENC_SYSTEM_LOCALE,
                "s_paramInGBK" );

        lr_message("返回报文:\n====\n%s\n====\n", lr_eval_string("<s_paramInGBK>"));
        free(sedbuf);
        free(revbuf);
  return 0;
}
以上三种都可以实现对目标接口的测试. 希望能给你提供思路,而不是方法.

2. 怎么获得详细的性能测试需求.
答: 首先要确定我们的测试目标, 就是要清楚我们要测什么. 比如:
    a. 评估系统在当前服务器下承载的最大压力. 或者系统的最大处理能力..
    b. 确定系统最大并发数, 或者确定系统的同时在线用户数.
    c. 系统版本(补丁)更新前后性能对比测试.
    d. 根据明确性能指标达标测试: 比如 交易处理每秒200、规定响应时间不得超过2秒、日交易量50万、 CPU%使用率≤70% 、交易出错率小于千分之3...
    e. ...
    确立了测试目标,然后我们再根据测试目标制定测试策略(包括选取测试方法、交易选择、压力发起方式、监控部署方案、数据准备策略...)

3. 如何确定并发数.
答:这个我不太明确你说的具体是什么. 我大概猜测一下, 并发数是同一时间段内系统同时能接受多少用户进行业务操作. 站在开发的角度说就是"连接数"或处理进程数. 并发数永远不会超过处理进程数, 超过了就得排队, 排队中的也就不能算并发了...
一般做这类测试目标都是评估系统最佳并发数测试.一般采用阶梯压力测试, 比如 1-5-10-15-20...(每一梯度持续几分钟) 等同比递增, 同时观察响应时间 和 处理能力, 理想条件下,随着压力的递增处理能力不变,响应时间成正比例增长时,我们就要分析是否已经有排队现象了, 也就是我们最佳并发数的拐点了.
   
4. 在开发阶段如何有效做性能测试,尽早的避免一些性能问题,比如代码(从测试人员的角度)、数据等
答: 业界做模块级的性能测试几乎很少的几家公司,但不是没有。比如小米,说实话我确实很佩服小米公司的敏捷式驱动方式,性能测试不是性能测试组做全部,而是全员参与,性能测试组负责写工具,制定策略, 各级模块开发用性能组提供的工具进行测试,评估性能指标是否通过。(因为谁写的代码,谁最清楚里面的细节,也是优化效率最高的)这样的工作模式确实很有效率,也很有感觉。
    一般的公司能够做到依据业务链条分级确定性能就已经很规范了。
    比如一个付款交易可分为(目标为2秒内完成):
     
    1.查询卡号信息。
    2.卡内可使用金额查询。
    3.付款方信息查询。
    4.手续费试算。
    5.支付。
    6.查询支付后月余额变动。
   
    调用了6步不同的接口, 每个接口都要调用后台模块, 6步整合为一个付款业务. 那我们就需要对每一步的调用进行分解分析, 响应时间总合不得高于2s. 对应各个模块就有自己的性能指标确立了. 是有效的性能测试,有严格逻辑定位的测试规划.

5. 能推荐几本书吗, 比如常用中间服务的一般性能异常病能处理如 fdfs,membcache, mysql, tomcat等、tomcat的资源监控(jvm内存, 线程等)
答: 这样大而全的书籍几本少之又少, 推荐从网站上收集并且养成资源收藏的好习惯, 对于资源监控方面, 最新出版的 云层那本 LR11实战性能测试进阶指南(第二版) 应该在 12月中旬 面市(还10多天吧)... 监控章节内容非常丰盛. 再等几天,面市后看看是否符合你的口味, 先别买, 拿手机拍照下来...(云层哭了哈哈)
回复 支持 反对

使用道具 举报

该用户从未签到

42#
发表于 2014-12-4 18:51:38 | 只看该作者
lily2013 发表于 2014-12-4 14:13
您好,我是这个圈子外的人但也准备进入这个圈子了,想请教一下该怎么进入性能测试这个圈子,请您给些建设性 ...

@lily2013 您好!

首先非常欢迎加入性能测试团队! 这个行业其实不是很大, 但是每个人都是一个资源整合体, 因为性能行业的特点就是什么知识都得吸纳理解. 从测试到开发、架构、操作系统、数据库、中间件...还有一些世外高人甚至把电压伏安都纳入了性能测试圈子. 这里就是一个垃圾场(知识爆炸的地方.),我们每个人都是一个垃圾回收器, 量大,自己梳理->总结->运用 最终将量变转换为质变. 这一过程称之为"沉淀".  这就是这个行业的特点. 要有耐心, 不能知难而退. 要具备态度和责任心.. 既然选择了,就要一路走到底..

对于性能测试初中高阶段在前面的回复我有写出我的个人理解.可以参考一下.
课程方面, 我是这样认为, 学校/老师培养的是兴趣, 真正入门需要自己的恒心. 针对于现在性能测试公司用人情况,我觉得这样: 首先抓一两本书先看, 试着做, 基本书上的问题都理解并且解决了, 然后找一个外包公司, 边学边干. 慢慢积累成长, 只要态度 和责任心到位, 技术可以培养, 思路很重要.   
回复 支持 反对

使用道具 举报

该用户从未签到

43#
发表于 2014-12-4 19:08:41 | 只看该作者
neijiangwlz 发表于 2014-12-4 15:29
老师,您好。请教几个问题:
1  对于比价网站(比如挖东西)性能测试   重点关注哪几个方面(并发,TPS, ...

@neijiangwlz
1. 比价类网站大部分都是用javaScript实现的同一个页面不同块组合的方式,和正常的WEB网站测试没有什么区别的,可能查询量会大一些,看一下前面的帖子,里面有相关的信息。
2. LR11录制脚本,字符乱码一般有两类情况, 一.页面信息采用UTF-8的编码方式,而LR11是GB2312的解析模式,这个不用担心,如果想解析传递的字符中文字意义,你可以调用 lr_convert_string_encoding 转义输出即可。有一点要注意,就是本地值传递到服务器也需要转义成UTF-8字符编码进行传输,同样用上面的函数。 二. URL编码字符格式,这个也有相应的函数转义web_convert_param 也可以。帮助文档看一下相关参数。 还有可能是你的操作系统字符编码有问题。但是无论怎么样,不影响我们实际测试的。这个请放心。
回复 支持 反对

使用道具 举报

该用户从未签到

44#
发表于 2014-12-5 09:27:51 | 只看该作者
Fin 发表于 2014-12-2 21:04
@唯一的色彩 您好!

根据你的描述我归纳3条线索:

Fin,特别感谢。
1、脚本已经成功跑起来了,直接复制的脚本代码粘贴在LR 11 VU中。
2、现在有个新问题想请教:
    业务场景是:用户A给用户B发消息,是只需要压测用户A发消息这个流程吗?怎么在脚本中添加验证,验证用户B是否收到消息,现在的办法是登录APP直接看用户B有没有收到消息。请问对于这类对话场景是如何压测的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

45#
发表于 2014-12-5 16:04:42 | 只看该作者
关于性能测试环境评估生产环境性能
1.硬件差异如何处理
2.软件配置差异,web服务器配置 ,数据库配置
3.数据问题,生产历史数据量大,有较多的数据库策略,如分片 ,分表,而测试环境中无这种策略
4.缓存机制 ,生产中会使用一系列缓存机制来减少服务器压力,测试环境中并未加入缓存情况
5.非关系型数据库,生产数据比测试数据复杂,比如 redis的中key 的vaule值大小,生产中是缓存服务器集群,测试环境只是单台服务器
6.数据库io问题,数据库中io采用raid,测试环境中没有做raid
回复 支持 反对

使用道具 举报

该用户从未签到

46#
发表于 2014-12-5 19:03:06 | 只看该作者
唯一的色彩 发表于 2014-12-5 09:27
Fin,特别感谢。
1、脚本已经成功跑起来了,直接复制的脚本代码粘贴在LR 11 VU中。
2、现在有个新问 ...

@唯一的色彩 您好!

恭喜成功解决脚本问题~

第二个问题: 一般这样的测试场景我们是这样模拟的。

从用户行为分析:
场景1.  模拟用户A(集合)给用户B(集合)发送消息,用户 B(集合)在线状态。
场景2.  模拟用户A(集合)给用户B(集合)发送消息,用户 B(集合)离线状态。

从技术角度分析:
点对点信息传送一般分为两类:
    1. A->服务器, 服务器推送给->B;    (推送式)
        方法一, 打开B(集合)端, 并且由客户端去接收消息即可。(也就是你们现在用的方法)

    2. A->服务器, B页面->每隔一定时间去服务器检索是否有自己的最新信息。 (主动请求式)
        方法一, 参考上面方法。(若条件不允许,看下面方法)
        方法二, 用LR模拟B(集合)登录,并且隔一段时间发送心跳包,然后采用客户端循环取消息的时间间隔向服务器发送取值报文。


   
   
回复 支持 反对

使用道具 举报

该用户从未签到

47#
发表于 2014-12-8 17:19:02 | 只看该作者
Fin 发表于 2014-12-5 19:03
@唯一的色彩 您好!

恭喜成功解决脚本问题~

感谢感谢能有这么好的机会请教 真好。您上次说的用报文压测,以接口调用的形式测试后台服务器性能。
采用 webService、web/http、socket都可实现。 这三种调用方法在云层的视频空间里面我都有做过视频,可以参考一下。

请问能否提供一下您的视频地址撒,没有找到呢,有问题再来请教 哈哈
回复 支持 反对

使用道具 举报

该用户从未签到

48#
发表于 2014-12-8 19:02:43 | 只看该作者
唯一的色彩 发表于 2014-12-8 17:19
感谢感谢能有这么好的机会请教 真好。您上次说的用报文压测,以接口调用的形式测试后台服务器性能。
...

@唯一的色彩 您好!
参考一下 40楼 代码部分, 那里面有三种协议实现方式的代码, 都是针对同一个接口的。 我贴出了接口链接, 可以用它做练习。
回复 支持 反对

使用道具 举报

该用户从未签到

49#
发表于 2014-12-9 09:51:16 | 只看该作者
目前只做过一些手工测试,目标是学会使用loadrunner11,在看一些性能测试基础视频,还没有实际操作过。想问问要学会使用性能测试工具的话,具体需要怎么做呢?目前语言是一定要学的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

50#
发表于 2014-12-9 10:36:13 | 只看该作者

当初在黄寺大街的时候,跟你们合作的还挺多的呢,我那时候是合荣性能测试的leader
回复 支持 反对

使用道具 举报

该用户从未签到

51#
发表于 2014-12-9 20:14:12 | 只看该作者
rt51testing 发表于 2014-12-9 09:51
目前只做过一些手工测试,目标是学会使用loadrunner11,在看一些性能测试基础视频,还没有实际操作过。想问 ...

@rt51testing 您好!

想要学工具我的建议是, 你就找到工具,跟着教程一步一步做, 就算LR 也不仅仅兼容一种语言, 所以没必要先学语言, 学习工具的过程中,遇到哪些语言问题就网上找, 如果有精力的话, 把遇到的问题涉及到的周边知识多理解一些, 积累和沉淀是最可靠的。
回复 支持 反对

使用道具 举报

该用户从未签到

52#
发表于 2014-12-9 20:15:58 | 只看该作者
sushe2009 发表于 2014-12-9 10:36
当初在黄寺大街的时候,跟你们合作的还挺多的呢,我那时候是合荣性能测试的leader

现在搬到很远了哈哈,欢迎有空来坐坐~
回复 支持 反对

使用道具 举报

该用户从未签到

53#
发表于 2014-12-10 17:22:41 | 只看该作者
你好,我正在做一个管理虚拟化服务器的B/S的软件,我需要用http get去向B/S软件发送base64加密的用户名密码,验证通过后。B/S服务器向虚拟化服务器发送请求,获取虚拟机列表返回给我。通过大并发来看这个B/S的软件的处理能力,请问这个过程应该怎么实现,我现在一点头绪没有,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

54#
发表于 2014-12-10 19:18:45 | 只看该作者
zealo7 发表于 2014-12-10 17:22
你好,我正在做一个管理虚拟化服务器的B/S的软件,我需要用http get去向B/S软件发送base64加密的用户名密码 ...

@zealo7 您好!
看了你的需求,个人认为以下两点需要解决:
1. 发送方式。
2. base64 加解密。

先来看第一个, 发送方式可以用 web/http 的方式发送, loadrunner 可以用 web_custom_request 函数发送请求。  也可以用winsocket 方式模拟整个报文。(看一下40楼,相关函数的使用)
第二点, base64的加解密方式需要你自己与开发沟通解决, 很可能不是简单的base64加解密, 一般我们用base64之后都会在加解密后做一些自己系统的特殊处理比如“二次加密”或“大小写转换”等等。如果幸运的话尝试是否可以先把账户密码加密后,直接把加密后的字符串作为参数传递。做起来不是很难。

回复 支持 反对

使用道具 举报

该用户从未签到

55#
发表于 2014-12-13 15:23:55 | 只看该作者
你好!我也是做银行性能的,现在农行总行备援测试中心,几年前曾经去民生银行面试过,那时测试部门人还不多,有幸和陈绍英聊了聊,不过可惜各种原因没有过去~
我有同事也是从神码跳过来的,我给他看过你们的介绍(记得云层第二版试读放过你们的简介),他挺有感慨,好像想到了曾经战斗过的日子~ 你们肯定都是老同事,这里可能不方面说名字了。
希望有空能多交流,方面的话可以加我QQ:33038846
回复 支持 反对

使用道具 举报

该用户从未签到

56#
发表于 2014-12-15 10:27:10 | 只看该作者
LZ是银行正式员工吗?近期有换工作打算吗?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2021-7-16 15:51
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    57#
    发表于 2014-12-15 15:47:17 | 只看该作者
    如何快捷判断性能瓶颈?
    在测试中通常关注并发数,事务响应时间,吞吐量,点击率。已知随着时间递增,响应时间增大,吞吐量减小,点击率减小。那么怎么判断他们的瓶颈在哪里呢?

    而,应用和服务器的CPU消耗较小,内存采用GC回收配置未发现异常,连接数足够,网络延时正常,带宽充足。


    回复 支持 反对

    使用道具 举报

    该用户从未签到

    58#
    发表于 2014-12-15 18:40:21 | 只看该作者
    dionysus 发表于 2014-12-13 15:23
    你好!我也是做银行性能的,现在农行总行备援测试中心,几年前曾经去民生银行面试过,那时测试部门人还不多 ...

    @dionysus 您好!

    哈哈这个圈子很小,看你的资历就知道是老大哥级别的, 我加你QQ
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-9-14 18:25
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    59#
    发表于 2014-12-15 18:44:35 | 只看该作者
    有时候 会被 问题 骚扰:
    1.性能测试结果 能代表 实际产品 真的只有这个 性能了吗 ?
    2.项目中的性能测试是真的有意义吗? 如果只是一个参考,为什么 要耗费这么多财力去消耗?
    3. 性能测试中测试出来的数据,真的 可靠有效吗? 如何来证明 你的数据是可靠有效的?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    60#
    发表于 2014-12-15 18:55:43 | 只看该作者
    youya24k 发表于 2014-12-15 10:27
    LZ是银行正式员工吗?近期有换工作打算吗?

    @youya24k 您好!

    额,是啊,您是... 不会又是朋友来挑逗我得吧...
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-26 21:40 , Processed in 0.088323 second(s), 20 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表