你晓得大型网站的压力测试及优化办法怎么做吗?
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">摘要:</span> 性能测试在大型网站系统的设计和<span style="color: black;">研发</span>中非常重要,<span style="color: black;">一般</span>会和容量预估等工作结合在<span style="color: black;">一块</span>,穿插在系统<span style="color: black;">研发</span>的<span style="color: black;">区别</span><span style="color: black;">方法</span>。性能测试<span style="color: black;">能够</span><span style="color: black;">帮忙</span><span style="color: black;">咱们</span><span style="color: black;">即时</span><span style="color: black;">发掘</span>系统的性能短板,<span style="color: black;">评定</span>系统的能力,在这个<span style="color: black;">基本</span>在上再进行针对性的性能优化。</p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">木桶理论应用在系统优化中</span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">木桶理论又<span style="color: black;">叫作</span>短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">木桶原理应用在系统分析中,即系统的<span style="color: black;">最后</span>性能取决于系统中性能表现最差的组件,为了<span style="color: black;">提高</span>系统整体性能,对系统中表现最差的组件进行优化<span style="color: black;">能够</span>得到最好的效果。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKw32b6IWgAloko7fRtyPwxXPPpG13pribjGQL9caHwPFNcsxibR5rI9erQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在网站系统中,用户的<span style="color: black;">拜访</span>请求到达服务器,<span style="color: black;">而后</span>服务器返回数据并展示给用户,这个过程要经过<span style="color: black;">非常多</span>处理,每一个过程的低效都会影响系统整体表现出来的性能。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">根据</span>木桶理论,<span style="color: black;">倘若</span>一台服务器性能非常强大,<span style="color: black;">持有</span>充足的内存资源和CPU资源,<span style="color: black;">然则</span>磁盘I/O性能不足,<span style="color: black;">那样</span>系统的总体性能是取决于当前最慢的磁盘I/O速度,而不是当前最优越的CPU<span style="color: black;">或</span>内存,此时,磁盘I/O<span style="color: black;">便是</span>系统的性能瓶颈。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">典型的<span style="color: black;">例如</span><span style="color: black;">运用</span>Redis进行存储的系统,<span style="color: black;">因为</span>Redis本身性能非常优秀,<span style="color: black;">一般</span><span style="color: black;">状况</span>下存储并不会制约系统的性能,在海量请求的<span style="color: black;">状况</span>下,Redis的吞吐量会非常大,<span style="color: black;">此时</span>候制约系统的性能瓶颈就变成网络带宽。</span></p>
<h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">压力测试<span style="color: black;">怎样</span>实施</span></h2>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">性能测试在大型网站系统的设计和<span style="color: black;">研发</span>中非常重要,<span style="color: black;">一般</span>会和容量预估等工作结合在<span style="color: black;">一块</span>,穿插在系统<span style="color: black;">研发</span>的<span style="color: black;">区别</span><span style="color: black;">方法</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">性能测试<span style="color: black;">能够</span><span style="color: black;">帮忙</span><span style="color: black;">咱们</span><span style="color: black;">即时</span><span style="color: black;">发掘</span>系统的性能短板,<span style="color: black;">评定</span>系统的能力,在这个<span style="color: black;">基本</span>在上再进行针对性的性能优化。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">同期</span>,压力测试还<span style="color: black;">能够</span><span style="color: black;">帮忙</span><span style="color: black;">咱们</span>验证系统的稳定性和<span style="color: black;">靠谱</span>性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">一个完整的性能测试<span style="color: black;">方法</span><span style="color: black;">一般</span><span style="color: black;">包含</span>以下几个方面: </span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">1.压力测试及生成性能报告</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">压力测试一个重点是<span style="color: black;">怎样</span>产生压力,<span style="color: black;">一般</span><span style="color: black;">能够</span><span style="color: black;">经过</span>自己编写脚本模拟请求,<span style="color: black;">或</span><span style="color: black;">运用</span>成熟的压测工具进行。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">压力测试很重要的一点是如何使得模拟压测的数据<span style="color: black;">尽可能</span>真实,越接近真实用户越好。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">2.<span style="color: black;">按照</span>性能报告定位系统瓶颈,进行针对性优化,测试和优化的工作<span style="color: black;">能够</span>和<span style="color: black;">平常</span><span style="color: black;">研发</span>并行</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">压力测试完成以后,<span style="color: black;">咱们</span>会拿到一个压测报告,这个报告<span style="color: black;">一般</span>会告诉<span style="color: black;">咱们</span>系统的QPS、TPS、响应时延等数据,</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这些数据<span style="color: black;">能够</span>让<span style="color: black;">咱们</span>对服务器的性能有个整体的<span style="color: black;">认识</span>,<span style="color: black;">发掘</span>存在的问题,<span style="color: black;">然则</span><span style="color: black;">不可</span><span style="color: black;">帮忙</span><span style="color: black;">咱们</span>定位问题。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个时候<span style="color: black;">咱们</span><span style="color: black;">能够</span>从系统的各个组件入手,关注系统的CPU、内存、IO、网络,对比这些环节对整体性能的影响,确定性能问题是系统哪一部分<span style="color: black;">导致</span>的,<span style="color: black;">而后</span>针对性的在系统中逐个优化。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">3.估算容量承载能力,<span style="color: black;">恰当</span>规划系统资源</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">进行压力测试的一个重要目的是让现有的服务器资源发挥最大的价值,</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过前期的测试和分析,<span style="color: black;">此时</span>候<span style="color: black;">咱们</span>对系统整体的性能有了一个认识,对服务器的承载能力有了预估,</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个时候<span style="color: black;">咱们</span>就<span style="color: black;">能够</span>结合业务规模配置服务器数量,CDN资源等,让最少的资源产生最大的价值。</span></p>
<h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">常用压力测试工具选型</span></h2>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">压力测试很关键的一点是<span style="color: black;">怎样</span>产生压力,<span style="color: black;">选取</span>哪款测试工具很重要,大的互联网<span style="color: black;">机构</span>如百度/腾讯等,都有专门的测试<span style="color: black;">研发</span>团队,<span style="color: black;">研发</span><span style="color: black;">机构</span>内部应用的测试工具,以便更好的适应<span style="color: black;">机构</span>的业务,<span style="color: black;">做为</span>SAAS服务的重要部分,几个云服务<span style="color: black;">供给</span>商<span style="color: black;">亦</span>纷纷开放了压测及性能监控服务。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">大<span style="color: black;">都数</span><span style="color: black;">机构</span>还是会<span style="color: black;">选取</span>自己完成测试工作,<span style="color: black;">这儿</span>关注一下常用的压力测试工具。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">1.几款流行的压力测试工具</span> </h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)JMeter</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Apache JMeter是Apache组织<span style="color: black;">研发</span>的基于Java的压力测试工具,用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试<span style="color: black;">行业</span>。 它<span style="color: black;">能够</span>用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">JMeter <span style="color: black;">能够</span>用于对服务器、网络或对象模拟巨大的负载,来在<span style="color: black;">区别</span>压力类别下测试它们的强度和分析整体性能。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">另一</span>,JMeter能够对应用程序做功能回归测试,<span style="color: black;">经过</span>创建带有断言的脚本来验证你的程序<span style="color: black;">是不是</span>返回了期望的结果。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">为了最大限度的灵活性,JMeter<span style="color: black;">准许</span><span style="color: black;">运用</span>正则表达式创建断言。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)LoadRunner</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">LoadRunner是惠普旗下一款自动负载测试工具,它能预测系统<span style="color: black;">行径</span>,优化性能。LoadRunner强调的是<span style="color: black;">全部</span>企业的系统,它<span style="color: black;">经过</span>模拟<span style="color: black;">实质</span>用户的操作<span style="color: black;">行径</span>和实行实时性能监测,来<span style="color: black;">帮忙</span>更快的确认和<span style="color: black;">查询</span>问题。<span style="color: black;">另外</span>,LoadRunner 能支持最宽范的协议和技术,量身定做地<span style="color: black;">供给</span><span style="color: black;">处理</span><span style="color: black;">方法</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)其他测试工具</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Siege是一款开源的压力测试工具,<span style="color: black;">能够</span><span style="color: black;">按照</span>配置对一个WEB站点进行多用户的并发<span style="color: black;">拜访</span>,</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">记录<span style="color: black;">每一个</span>用户所有请求过程的相应时间,并在<span style="color: black;">必定</span>数量的并发<span style="color: black;">拜访</span>下重复进行。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">TCPCopy是一种请求复制(所有基于tcp的packets)工具,<span style="color: black;">能够</span>把在线请求导入到测试系统中去。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">TCPCopy的特点是<span style="color: black;">能够</span>拷贝线上真实流量,模拟用户数据。</p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">2.性能测试工具的横向对比</span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">这儿</span>对比主流的 JMeter和LoadRunner,<span style="color: black;">通常</span><span style="color: black;">来讲</span>,除了自研测试工具的<span style="color: black;">机构</span>,互联网<span style="color: black;">机构</span><span style="color: black;">运用</span>JMeter<span style="color: black;">做为</span>测试工具的较多。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwoziaibgJD7eHPMAibOv80RYDZSdTpsiaicArSbzbzQB002C4RYpjBYqib0bw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></p><span style="color: black;">JMeter</span><span style="color: black;">LoadRunner</span><span style="color: black;"><span style="color: black;">研发</span>语言</span><span style="color: black;">纯Java<span style="color: black;">研发</span></span><span style="color: black;"><span style="color: black;">运用</span>C语言<span style="color: black;">研发</span></span><span style="color: black;">支持应用</span><span style="color: black;">对Java为主的系统支持较好</span><span style="color: black;">支持比较全面</span><span style="color: black;"><span style="color: black;">是不是</span>收费</span><span style="color: black;">开源免费</span><span style="color: black;"><span style="color: black;">商场</span>软件</span><span style="color: black;">学习成本</span><span style="color: black;">应用简单,上手快,Java自定义测试计划</span><span style="color: black;">功能<span style="color: black;">繁杂</span>,学习成本高</span><span style="color: black;">协议支持</span><span style="color: black;">支持<span style="color: black;">平常</span>的HTTP/FTP/SMP等</span><span style="color: black;">支持较全面</span><span style="color: black;">自定义测试</span><span style="color: black;">支持<span style="color: black;">运用</span>Java编写Sample</span><span style="color: black;"><span style="color: black;">运用</span>完善的组件进行定制化测试</span><span style="color: black;">组件功能</span><span style="color: black;">Thread Group, Samplers, Listeners, Pre & Post processors</span><span style="color: black;">一套完整的测试组件,<span style="color: black;">例如</span>VU Generator, Controller, Analyzer, Load generator, Load calculator 和protocol advisor.</span>
<h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;"><span style="color: black;">怎样</span>监控系统资源,定位性能瓶颈</span></h2>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">压力测试<span style="color: black;">能够</span>暴露系统性能问题,如高并发下<span style="color: black;">拜访</span>缓慢,服务宕机等,<span style="color: black;">然则</span><span style="color: black;">经过</span>压测<span style="color: black;">不可</span><span style="color: black;">详细</span>到哪里存在瓶颈,必须要在压测<span style="color: black;">同期</span><span style="color: black;">协同</span>适当的资源监控,<span style="color: black;">帮忙</span><span style="color: black;">咱们</span>定位问题。</p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">1.配置<span style="color: black;">恰当</span>的资源监控<span style="color: black;">方法</span></span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">(1)<span style="color: black;"><span style="color: black;">运用</span>nmon监控系统性能</span></span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">nmon是Linux上广泛<span style="color: black;">运用</span>的监控与分析工具,相<span style="color: black;">针对</span>其它<span style="color: black;">有些</span>系统资源监控工具<span style="color: black;">来讲</span>,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地<span style="color: black;">捉捕</span>系统资源的<span style="color: black;">运用</span><span style="color: black;">状况</span>,并且能输出结果到文件中,<span style="color: black;">而后</span><span style="color: black;">经过</span>nmon_analyzer工具产生数据文件与图形化结果。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">nmon所记录的数据<span style="color: black;">包括</span>以下<span style="color: black;">有些</span>方面:</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● cpu占用率</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 内存<span style="color: black;">运用</span><span style="color: black;">状况</span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 磁盘I/O速度、传输和读写比率</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 文件系统的<span style="color: black;">运用</span>率</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 网络I/O速度、传输和读写比率、错误统计率与传输包的<span style="color: black;">体积</span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 消耗资源最多的进程</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 计算机<span style="color: black;">仔细</span>信息和资源</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 页面空间和页面I/O速度</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">● 用户自定义的磁盘组</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> ● 网络文件系统</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">(2)<span style="color: black;"><span style="color: black;">运用</span>rpc.rstatd监控系统性能</span></span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">rpc.rstatd<span style="color: black;">一般</span><span style="color: black;">协同</span>LoadRunner<span style="color: black;">一块</span><span style="color: black;">运用</span>,<span style="color: black;">重视</span>与系统服务rpc.statd进行区分。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">rstatd后台程序<span style="color: black;">能够</span>从系统核心中获取系统性能统计的<span style="color: black;">关联</span>信息,将结果返回给调用程序。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">进行压力测试时,LoadRunner客户端<span style="color: black;">经过</span>给服务器上的 rstatd 后台程序发送请求,来收集应用或数据库服务器的性能数据。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">(3)<span style="color: black;">针对<span style="color: black;">区别</span>的服务<span style="color: black;">恰当</span>配置资源监控<span style="color: black;">方法</span></span></span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">以Java服务为例,在压测<span style="color: black;">同期</span><span style="color: black;">能够</span>对JVM虚拟机进行性能监控,这方面常用的有Jvisualvm、jps、jstack等。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">下面是Jvisualvm的应用界面,<span style="color: black;">能够</span>监控本地和远程的JVM实例运行状态。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;"><img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwqD5mPu2pWib1LwHhEt1Z0DYZd2GGtkKXibbE61Zsoicnr0WfVSDQVkibTQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></span></p>
<h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">针对测试报告进行针对性优化</span></h2>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在压力测试<span style="color: black;">发掘</span>问题以后,就要进行有针对性的优化。<span style="color: black;">针对</span><span style="color: black;">区别</span>的系统,这个过程的策略并不是确定的,<span style="color: black;">然则</span>大概<span style="color: black;">能够</span>划分为以下几个<span style="color: black;">过程</span>: </span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">1.定位性能瓶颈,找出系统存在的问题 </h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">区别</span>系统的特点<span style="color: black;">区别</span>,在性能瓶颈上<span style="color: black;">亦</span>有<span style="color: black;">区别</span>的表现,<span style="color: black;">通常</span><span style="color: black;">来讲</span>,下面的几个方面<span style="color: black;">一般</span>存在比<span style="color: black;">很强</span>的优化空间:</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)磁盘I/O及文件操作</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">因为</span>磁盘I/O读写的速度要比内存慢<span style="color: black;">非常多</span>,程序在运行过程中,<span style="color: black;">倘若</span>需要等待磁盘I/O完成,<span style="color: black;">那样</span>低效的I/O操作会拖累<span style="color: black;">全部</span>系统。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)网络操作</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">对网络数据进行读写的<span style="color: black;">状况</span>与磁盘I/O类似。<span style="color: black;">因为</span>网络环境的不确定性,尤其是对互联网上数据的读写,网络操作的速度可能比本地磁盘I/O更慢。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)CPU</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">对计算资源<span style="color: black;">需求</span>较高的应用,<span style="color: black;">因为</span>其<span style="color: black;">长期</span>、不间断地<span style="color: black;">海量</span>占用CPU资源,<span style="color: black;">那样</span>对CPU的争夺将<span style="color: black;">引起</span>性能问题。如科学计算、3D渲染等对CPU<span style="color: black;">需要</span>旺盛的应用。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(4)高并发下的上下文切换及锁竞争等</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">高并发程序<span style="color: black;">倘若</span><span style="color: black;">无</span>做好优化,存在<span style="color: black;">海量</span>的锁竞争,激烈得锁竞争将会<span style="color: black;">显著</span><span style="color: black;">增多</span>线程上下文切换的开销,对性能<span style="color: black;">导致</span><span style="color: black;">极重</span>的影响</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(5)数据库</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">大部分应用程序都离不开数据库,而海量数据的读写操作可能是相当费时的。而应用程序可能需要等待数据库操作完成<span style="color: black;">或</span>返回请求的结果集,<span style="color: black;">那样</span>缓慢的同步操作将<span style="color: black;">作为</span>系统瓶颈。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">2.确定<span style="color: black;">调节</span><span style="color: black;">目的</span>,提出<span style="color: black;">处理</span><span style="color: black;">方法</span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">找到系统的性能问题以后,需要作出对应的<span style="color: black;">处理</span><span style="color: black;">方法</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">典型的影响性能的问题,<span style="color: black;">例如</span>:</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)系统对高并发的场景响应不足,如数据库连接池过低,服务器连接数超过上限,数据库锁<span style="color: black;">掌控</span><span style="color: black;">思虑</span>不足等</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)内存<span style="color: black;">泄密</span>,如在<span style="color: black;">长期</span>运行下,内存<span style="color: black;">无</span>正常释放,<span style="color: black;">出现</span>宕机等</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)数据库优化不足,业务日益增长,<span style="color: black;">相关</span>表众多,SQL<span style="color: black;">不足</span>优化等</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">定位到<span style="color: black;">以上</span>问题,接下来<span style="color: black;">便是</span>提出<span style="color: black;">恰当</span>的<span style="color: black;">调节</span><span style="color: black;">目的</span>,</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">例如</span>服务器资源有限,<span style="color: black;">能够</span><span style="color: black;">经过</span>配置<span style="color: black;">更加多</span>的<span style="color: black;">设备</span>,服务上云等进行优化;</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">倘若</span>对高并发支持<span style="color: black;">欠好</span>,就<span style="color: black;">能够</span>在代码层面优化,<span style="color: black;">加强</span>并发支持;</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">数据库性能问题,如慢<span style="color: black;">查找</span>等问题,就<span style="color: black;">能够</span>进行 SQL语句优化等。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">3.实施<span style="color: black;">处理</span><span style="color: black;">方法</span>,进行迭代<span style="color: black;">研发</span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">上一步的分析给出了一个初步的性能优化<span style="color: black;">方法</span>,接下来<span style="color: black;">便是</span>针对<span style="color: black;">方法</span>中<span style="color: black;">说到</span>的内容进行针对性的改进。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个过程<span style="color: black;">能够</span>应用敏捷的思想进行迭代,在<span style="color: black;">研发</span>完成后,为了对比优化结果,<span style="color: black;">能够</span>对调优后的系统进行小范围测试。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">4.进行基准测试并分析调优结果</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">数<span style="color: black;">据述</span>明一切,性能优化的结果<span style="color: black;">不可</span>简单的<span style="color: black;">经过</span> “感觉系统变快了”来衡量,最好是<span style="color: black;">经过</span>对比优化前后的测试结果,用图表的方式直观的把优化结果展示出来。基准测试<span style="color: black;">指的是</span><span style="color: black;">经过</span>设计科学的测试工具和方式<span style="color: black;">办法</span>,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。对比测试结果,结合容量<span style="color: black;">评定</span>等工作,<span style="color: black;">能够</span>让系统发挥最大的效用。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">一个<span style="color: black;">周期</span>的优化工作完成以后,最好是总结反思一下,<span style="color: black;">例如</span><span style="color: black;">这次</span>优化<span style="color: black;">是不是</span>达到了<span style="color: black;">目的</span>?系统的整体性能<span style="color: black;">是不是</span>得到了改善?用户体验<span style="color: black;">是不是</span>得到了<span style="color: black;">提高</span>?以及<span style="color: black;">怎样</span>在接下来的<span style="color: black;">研发</span>工作中做的更好。</span></p>
<h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">运用</span>JMeter进行压力测试实践</h2>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">JMeter是<span style="color: black;">日前</span>流行的测试工具,<span style="color: black;">这儿</span>简单的介绍一下<span style="color: black;">关联</span>的应用。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">1.JMeter安装与<span style="color: black;">运用</span></h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Linux下可直接下载安装,<a style="color: black;">MAC系统进入</a><a style="color: black;">http://jmeter.apache.org/download_jmeter.cgi</a><a style="color: black;">,</a>下载apache-jmeter-3.1.tgz。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">下载完毕后解压,得到安装包,进入到进入解压目录/bin/,单击jmeter图案,<span style="color: black;">就可</span><span style="color: black;">起步</span>JMeter。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">2.基本组件简介</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">应用JMeter需要<span style="color: black;">熟练</span><span style="color: black;">有些</span>基本的概念,这是编辑测试计划的界面:</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwv68D2OjibWMzt1iaG9FFDicJwUTEb2j30Wk0jDicT5y1Hcte1HmPT3EpIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)Threads 线程组</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个组件<span style="color: black;">重点</span>用来<span style="color: black;">掌控</span>Jmeter并发时产生线程的数量,在它的下一级菜单下<span style="color: black;">仅有</span>一个组件(线程组),<span style="color: black;">能够</span>这么理解<span style="color: black;">每一个</span>线程<span style="color: black;">便是</span>一个虚拟的用户。所有的其他类型组件必须是(线程组)节点的子节点。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)ConfigElement 配置单元</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">和Sample组件<span style="color: black;">一块</span>工作,<span style="color: black;">重点</span>用来配置Sample<span style="color: black;">怎样</span>来发起请求<span style="color: black;">拜访</span>服务器,这个东西的<span style="color: black;">重点</span>特点是<span style="color: black;">能够</span>把<span style="color: black;">有些</span>Sample的<span style="color: black;">一起</span>配置放在一个元素里面方便管理,配置单元是有<span style="color: black;">功效</span>域的。<span style="color: black;">功效</span>域和树的那个关系<span style="color: black;">同样</span>越是上级节点的<span style="color: black;">功效</span>域越大,越是接近叶子节点的</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">功效</span>域就越小,<span style="color: black;">能够</span>复写上级<span style="color: black;">功效</span>域的配置。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)Timer <span style="color: black;">按时</span>器</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个<span style="color: black;">重点</span>是用来调节(线程组),<span style="color: black;">掌控</span>线程每次运行测试<span style="color: black;">规律</span>(<span style="color: black;">例如</span>说:发出请求)的时间间隔。当然这个下面还有<span style="color: black;">非常多</span>类型的<span style="color: black;">按时</span>器,<span style="color: black;">她们</span><span style="color: black;">重点</span>功能<span style="color: black;">便是</span>调节时间间隔,但个个组件之间的策略有很大<span style="color: black;">区别</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(4)Pre Processors 前置处理器 / Post Processors 后置处理器</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">类似一个HOOK,在测试执行之前和执行之后执行<span style="color: black;">有些</span>脚本的<span style="color: black;">规律</span>。该组件我还<span style="color: black;">无</span><span style="color: black;">详细</span><span style="color: black;">运用</span>过,但大致功能<span style="color: black;">便是</span><span style="color: black;">这般</span>,非重点组件。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(5)Assert 断言</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">指的是</span><span style="color: black;">针对</span>Sample完<span style="color: black;">成为了</span>请求发送之后,判断一下返回的结果是否满足期望。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(6)Listener 监听器</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这个组件<span style="color: black;">区别</span>于平时在Web编程的那种监听器,他是<span style="color: black;">伴同</span>着Jemeter测试的运行而从中抓取运行<span style="color: black;">时期</span>的数据的一个组件,经常<span style="color: black;">运用</span>的是聚合报告组件,从里面<span style="color: black;">能够</span>统计到测试的TPS,响应时间等关键测试数据。</span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">3.进行<span style="color: black;">第1</span>个测试</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(1)设置线程组参数</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">首要</span>在TestPlan下面添加一个ThreadGroup组件,设置线程组组件各项参数。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"> <img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwvlPHkWYkKm1SAxDPQyZscXrdTA2NiaUX3Leo5Z4G0fVdTd5LsTIJBiaw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">线程数:最大测试时<span style="color: black;">运用</span>的线程数。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Ramp-Up Period : Jmeter达到指定最大线程数的时间。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">循环次数 : <span style="color: black;">倘若</span>是Forever,线程组中的线程将不间断的连续测试系统,当然<span style="color: black;">亦</span><span style="color: black;">能够</span>设置<span style="color: black;">每一个</span>线程测试的次数,当完<span style="color: black;">成为了</span>规定次数后,该线程将自动退出线程组。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(2)添加Sampler信息</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">保留</span>线程组后,接着在线程组下面添加Sample组件,<span style="color: black;">咱们</span>添加一个HTTP Request组件,</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">设置属性如下图:</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwTAC0r6RS5Fz3zhgfDPyDCYEfVLw88lP0lOQH3V4ecuVIUqCaFbZHUw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Sampler<span style="color: black;">暗示</span>客户端发送某种格式<span style="color: black;">或</span>规范的请求到服务端,<span style="color: black;">因此</span>有<span style="color: black;">各样</span>各样的Sampler,如FTP/JDBC等。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">这儿</span>我添加了一个针对百度百科首页的<span style="color: black;">拜访</span>请求,端口为80,<span style="color: black;">运用</span>http协议。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(3)添加聚合报告的监听器组件</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">添加一个Aggregate Report的listener的监听器组件。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">(4)<span style="color: black;">起步</span>运行</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">点击RUN运行测试<span style="color: black;">就可</span>。<span style="color: black;">而后</span><span style="color: black;">能够</span>看到<span style="color: black;">这次</span>测试的Aggregate Report。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><img src="http://mmbiz.qpic.cn/mmbiz_png/Po59YsHBXAeIynvGpibyZic9VNQyB1FCKwu4qH4Z73WxFv0n3cx8HEgpE6JdHa4VKEddT7f6AGoE00DRpXmbg3ow/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></span></p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">4.Jmeter中的几个重要测试指标释义</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">能够</span>看到,上面的聚合报告中有<span style="color: black;">非常多</span>维度的信息,简单介绍几个比较重要的指标。</span></p>Label<span style="color: black;">每一个</span> JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,<span style="color: black;">这儿</span><span style="color: black;">表示</span>的<span style="color: black;">便是</span> Name 属性的值#Samples<span style="color: black;">暗示</span>你这次测试中一共发出了多少个请求,<span style="color: black;">倘若</span>模拟10个用户,<span style="color: black;">每一个</span>用户迭代10次,<span style="color: black;">那样</span><span style="color: black;">这儿</span><span style="color: black;">表示</span>100Average平均响应时间——默认<span style="color: black;">状况</span>下是单个 Request 的平均响应时间,当<span style="color: black;">运用</span>了 Transaction Controller 时,<span style="color: black;">亦</span><span style="color: black;">能够</span>以Transaction 为单位<span style="color: black;">表示</span>平均响应时间Median中位数,<span style="color: black;">亦</span><span style="color: black;">便是</span> 50% 用户的响应时间90% Line90% 用户的响应时间,其他的几个<span style="color: black;">能够</span>类推Min最小响应时间Max最大响应时间Error%<span style="color: black;">这次</span>测试中<span style="color: black;">显现</span>错误的请求的数量/请求的总数Throughput吞吐量——默认<span style="color: black;">状况</span>下<span style="color: black;">暗示</span>每秒完成的请求数(Request per Second)Received / Sent KB/Sec每秒从服务器端接收到/发送的数据量<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">以下列出,<span style="color: black;">微X</span>,<span style="color: black;">博客</span>,QQ群,论坛,等交流方式。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">QQ群:领测老贺聊软件测试 22386432</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">微X</span>公众号: 领测软件测试网</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">外链</span><span style="color: black;">博客</span>:领测软件测试</p>喜马拉雅订阅频道:<a style="color: black;">http://www.ximalaya.com/25816</a>41/album/6011135蜻蜓FM<span style="color: black;">订阅频道:http://www.qingting.fm/#/vchannels/198184</span>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">苹果广播:搜索“领测老贺”</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">荔枝FM:<span style="color: black;">FM1663127 领测老贺聊软件测试</span></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> <span style="color: black;">日前</span>暂定每周不<span style="color: black;">定时</span>更新,您的<span style="color: black;"><strong style="color: blue;">关注,转发,打赏</strong></span><span style="color: black;">便是</span><span style="color: black;">咱们</span><span style="color: black;">保持</span>的动力!</p><span style="color: black;">领测软件测试网</span><span style="color: black;">∣</span><span style="color: black;">一个有逼格的软件测试网站</span>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz/Po59YsHBXAeCKe8vR3HAEnzwicNYrLMW8nY7Aboiamk322pE5wtOPrLtialgtaYDOSRMjiaDVeypnvBmc6Cicc1uAbA/640?tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" style="width: 50%; margin-bottom: 20px;"></p><span style="color: black;">长按,识别二维码,加关注</span>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><strong style="color: blue;">加入领测老贺聊测试QQ群可扫描下面的二维码</strong></span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
你的见解真是独到,让我受益良多。 “板凳”(第三个回帖的人) 哈哈、笑死我了、太搞笑了吧等。
页:
[1]