如何更好的测试移动端app总结

测试移动端与测试web或者其他还是有些许差异的,为了方便大家能够快速的掌握测试移动端app的要点,下面根据自己的切身经验进行了一些总结。希望能够对大家有所帮助。

测试前的思考

我们这个产品主要是做什么的?市场上有那些同类型的产品?我们的产品所具有的优势?

测试前的准备

1、使用同类型的产品,在接触到自己产品之前,就已经对大致的主体功能有测试方向。

2、熟悉我们产品的需求设计文档,模糊的地方积极和pm交流。

3、写测试用例,资源不够的话可以不写,但是需要有checklist。

功能测试注意点

1、基本功能,主要指app是否完成了设计的所有功能。

分清模块,写一份checklist,避免漏测。

详细包括:

1)安装/卸载时,系统正常安装/卸载成功(注意覆盖安装);

2)安装成功后,系统图标显示正确;

3)根据checklist进行需求点的覆盖测试;

4)对于中途中的一些返回或退出,应有相应的提示信息;

5)显示的数据与接口返回的数据一致(抓包查看,如fiddler、charles)

6)信息上传到数据库,上传的数据保持正确

 

2、系统交互:系统正在使用一些功能时,外界给与的干扰是否会影响当前功能。

1)电话短信干扰;

2)低电量提醒;

3)push提醒;

4)usb数据线插拔提醒;

5)充电提醒;

6)音乐播放器干扰等。

 

3、兼容性:android碎片化是个难题,bug也多,ios相对bug少。

需要针对不同系统及不同机型进行覆盖测试。Android可以选取一些代表性的机型。

 

性能测试注意点

1、稳定性:利用monkey在下班后进行一些伪随机用户事件的执行,会发现一些ANR及CRASH的问题。

2、app运行的内存消耗和cpu消耗。

3、app后台长时间运行的耗流量,耗电量。

2、3点等可以用Emmagee或GT进行Android端的测试,iOS端可以直接利用xcode自带的插件进行分析

4、不同网络下的响应速度测试(可以利用charles工具实现)。

5、服务端的压力测试(可以使用jmeter),高用户的并发都要要考虑的问题。

 

易用性测试注意点

1、路径短,用户操作简单

2、界面是否吸引人、容易理解。

3、界面整洁、简单,色调统一。

4、无错别字,字体格式统一。

5、点击范围确定,利于用户操作等。

这部分测试很多,可以参照易用性-界面测试规范,如果认为有不合理的地方通常会提交需求bug-设计问题。

 

自动化测试注意点

如果不是敏捷开发,可以执行自动化测试(robotium,monkeyrunner,androidjunit),这样在回归的时候会节约很多资源。但是面对经常变更UI的敏捷开发,自动化测试的维护成本就较高,这时候并不合适加入自动化测试。但可以加入monkey自动化随机测试,还可以对接口进行自动化测试。

另外,敏捷开发中,一定要有持续集成的环境,这样可以节省很多时间。

 

其他测试注意点

1、网络切换下的app运行情况及功能正常(wifi/4G/3G/2G)。

2、网络信号强、弱甚至无网络情况下的app运行情况。

 

暂时就总结这么多了,以我目前的眼界也只能囊括这么多,如果以后发现了更多的注意点,会逐步更新的。

JMeter之获取某页面所有链接并再次请求

  今天主要讲下JMeter逻辑控制器和正则的联合使用,以jmeter获取某页面所有的链接,然后通过这些链接再次发出请求为列。

  首先我们知道,凡是输入一个地址,点击回车,通过F12查看,请求并不止一个,而如果放入jmeter中,如果不加其他设置,那我们测试的结果与实际是不符的。所以我们一般会在高级设置中勾选“从HTML文件获取所有内含的资源”,如图下所示:

当然还是眼见为实,举例,我们只是请求https://www.taobao.com,做基础的请求操作,点击运行,结果只有一条,而如果我勾选,则下方还会获取其他请求,如图所示:

但是,这些还不够!

下面我们一起来实战下,获取一个网页所有的链接并进行再次请求。

1、首先,你要打开jmeter,创建一个线程组,添加一个http请求,我们还是以淘宝为例,输入服务器名称:www.taobao.com,协议输入https,方法为GET请求。

2、在1的http请求下加上后置处理器-正则表达式提取器,关于正则的具体用法可以百度或者谷歌,我这边就直接给结果了,概念性的东西可能以后会单独出篇文章讲解。如图所示:

3、线程组下添加一个逻辑控制器-ForEach控制器(ForEach控制器会循环遍历一系列相关变量),关于逻辑控制器,到时候我会单独开篇文章去讲解,这边主要是实现目的。

 

4、在ForEach控制器下添加一个http请求,填写路径,路径为foreach中填写的输出变量名称,如图所示,注意jmeter元件作用域与执行关系,这个可以看文章:http://blog.jianjiexuan.com/tools/jmeter/213.html

如图所示:

5、添加监听器-察看结果树,保存计划,点击运行,就可以查看淘宝里所有链接的二次请求了。大功告成!

对Web应用进行静态性能的评估

概念:开发Web应用时,基于一系列Web应用页面性能优化的最佳实践对Web应用的页面进行静态分析,被给出评估结果的性能分析方法。即通过分析页面的代码来评估页面的情况

工具:YSlow(雅虎)、PageSpeed(谷歌)

 

以chrom为列

1、打开chrom浏览器

2、打开扩展程序

3、在扩展程序中进行搜索这两款软件,或下载插件导入

4、chrom-工具-打开yslow,点击runtest按钮,就会进行网页的静态性能分析,并给出分数和级别

以Firefox为列

1、打开Firefox浏览器

2、打开扩展程序

3、在扩展程序中进行搜索yslow,或下载插件导入

4、在扩展程序中进行搜索firebug,或下载插件导入

5​、F12-打开firebug-切换到yslow,点击runtest按钮,就会进行网页的静态性能分析,并给出分数和级别

分数和级别的解释

ABCDEF A为最好,依次分数降低 评估标准有23条,解释如下:

1)尽量减少http的请求  Make fewer HTTP requests

2)页面有没有CDN,内容分发网络  Use a Content Delivery Network(CDN)

3)避免空的src和href这样的编码,渲染的时候会有影响  Avoid empty src or href

4)为文件头指定过期标签  Add Expires headers

5)有没有使用gzip对内容进行压缩  Compress components with gzip

6)将css样式表尽量放在页面代码的顶部 Put CSS at top

7)将JS脚本放在底部,这样用户在访问的时候能够尽早的呈现内容 Put JavaScript at bottom

8)使用CSS样式表的时候尽量避免CSS表达式的使用   Avoid CSS expressions

9)使用JS和CSS样式表的时候尽量使用外部文件,这样可以进行缓存  Make JavaScript and CSS external

10)减少DNS的查找次数  Reduce DNS lookups

11)精简JS和CSS样式表  Minify JavaScript and CSS

12)避免URL的跳转  Avoid URL redirects

13)删除重复的JS和CSS脚本  Remove duplicate JavaScript and CSS

14)配置Etags,使用此技术可以提升性能  Configure entity tags(ETags)

15)使AJAX可以缓存,加快响应  Make AJAX cacheable

16)使用GET完成AJAX请求  Use GET for AJAX requests

17)减少DOM元素的数量  Reduce the number of DOM elements

18)避免404错误  Avoid HTTP 404(NOT Found)error

19)减少cookie大小  Reduce cookie size

20)使用没有cookie的域 Use cookie-free domains

21)避免滤镜的使用(低版本IE中会导致大的性能问题)  Avoid AIphaImageLoader filter

22)HTML里面不要使用缩放图片的方式来处理我们的图片  Do not scale images in HTML

23)小图标尽量使它的文件大小变小,而且文件是可以缓存的 Make favicon small and cacheable

PageSpeed与YSlow的功能差不多,通过这样的静态分析,我们可以知道web应用的基本性能情况。Goodbye~~

iOS抓包工具—Charles简介及安装

Charles是一个HTTP代理服务器、HTTP监视器、反转代理服务器。它可以查看所有连接互联网的HTTP通信。这些包括request, response现HTTP headers (包含cookies与caching信息)。移动端的话,这款工具更加适用于苹果设备,安卓的话有点反应缓慢。

一、下载安装Charles

1、下载地址:

https://www.charlesproxy.com/

2、安装Charles

下载完成后直接进行安装即可,如果不注册每次只能使用30分钟,关于如何注册破解,可以网上下载jar包替换。

 

二、使用Charles

1、打开charles

2、录制pc端

默认打开就开始录制了,直接将Proxy-Windows Proxy勾选,此时在pc端任意链接互联网的http通信都能抓包。

3、录制移动端

本篇文章即主要针对如何对iOS移动设备进行抓包

1)查看本机的IP,win+R,输入cmd,命令输入ipconfig即可查看

或打开Charles的Help-Local IP Address

2)查看Charles的HTTP Proxy的Port,在Proxy-proxy setting中,如下图所示

3)手机端连接无线网(与pc连接同一网段),在无线网详情中选择HTTP代理-手动模式,如下图所示

输入服务器ip,即你步骤1当中查询的本机ip;

输入端口,即你步骤2中查询的端口号;

填写完成之后点击返回即可

4)确保Charles录制按钮已经打开,即红色圆点的按钮

5)在手机端进行操作,charles即可进行抓包

 

最基本抓包功能就这样了,还是很简单的,关于其他的分析以及扩展使用,可以在其他文章中查看。

关于软件上线后出现重大bug是谁的责任?

之所以写这篇文章,主要是大部分测试还是处于弱势地位,线上一旦出问题,大部分人想到的是:你这个没测?基于这点,这篇文章也许可以给你一个明确的答案,这到底是谁的责任。

一、先解决问题

线上爆发重大bug,这时候不是追究责任的时候,而是动员所有可调用的资源,尽快解决这一问题,将损失降到最低。而一般公司在这之前就应该制定好出现重大问题的补救流程和方案以及对应的人员分配。

二、定义bug的性质

解决问题后,定义线上发生的问题的性质,是第三方引起的,不可抗拒的问题,还是自身疏忽导致的错误?且爆发的问题的严重程度,关于bug严重程度的区分,可以参看我的另一篇文章。(传送门:http://blog.jianjiexuan.com/testdocument/42.html

三、分析产生bug的根源

1、需求未涉及,或需求当初定义的不够详细造成。

 这个一般由需求、设计、测试都承担责任,需求的责任最重。之所以说设计和测试也有连带责任,是因为需求评审的时候也参与进去了,而需求都是通过大家一致确认可行通过才执行的。当然,有些公司对于需求评审也不是很重视,也没有专门写需求文档的人,甚至一些小公司直接都是口头表达,这样的需求连记录都没有,实在没办法追责。不过,一般这样的公司也不会追责,如果追责的话,建议设计(产品)、测试一句:你可以刷新简历了。

2、设计过程、开发过程未实现造成。

 这种问题是需求检查到了有未完成的需求,但是设计和开发并没有进行弥补。则为设计与开发的责任,而设计的责任最大。

3、测试过程中的疏漏造成。

 测试过程中的疏漏有2种情况,一种是测试用例没有覆盖,一种是测试用例覆盖了没有执行。第一种参与过测试用例评审的都有责任,但是设计测试用例的人承担最大责任。第二种则完全是测试责任。当然,很多公司根本就不具备评审测试用例或者有专门写测试用例的人,本来管理流程就乱,一人做多种职位的事情,这时候如果硬要追责,建议测试一句:你可以刷新简历了。

4、交付部署中出现问题造成。

 比如版本错误、发布错误、部署错误,一般在设计(产品)、配置、测试经理共同承担责任。

5、私自改动代码造成。

 只能开发哥哥完全承担了。

四、分析总结

 对于这次的事件进行分析与总结,确定是谁的问题后,应该吸取教训,并给出措施,给下次的版本一个参考。

 

其实这套方案肯定是基于自身的流程和管理都非常明确的公司执行。并不适合小团队去执行,小团队建议还是大家一起承担,否则,只会让员工提前离开。如果你不是领导者,愿你不需要看到这篇文章。

 

JMeter元件作用域与执行顺序

在复杂的脚本中,会涉及到jmeter的多个元件,而元件之间的作用域和执行顺序这时候就很重要了,放错位置不仅会造成数据获取不正确,严重还会无法执行,下面即为大家介绍一下元件作用域与执行顺序。

1、元件的作用域

  • 配置元件(config elements):会影响其作用范围内的所有元件(同级别或父级起作用)
  • 前置处理程序(Per-processors):在起作用范围内的每一个sample元件之前执行
  • 定时器(timers):对其作用范围内的每一个sampler有效(同级别或父级起作用)
  • 后置处理程序(Post-processors):在其作用范围内的每一个sampler元件之后执行(同级别或父级起作用)
  • 断言(Assertions):对其所用范围内的每一个sampler元件执行后的结果执行校验
  • 监听器(Listerners):收集其作用范围的每一个samoler元件的信息并出现(同级别或父级起作用)
  • sampler元件不和其他元件相互作用,因此不存在作用域的问题

2、元件的执行顺序

  • 配置元件
  • 前置处理器
  • 定时器(首次也是定时器先执行再执行sampler)
  • Sampler
  • 后置处理器(只在有结果可用情况下执行)
  • 断言(只在有结果可用情况下执行)
  • 监听器(只在有结果可用情况下执行)

如果在同一作用域内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行

备注:如果两个相同配置元件作用于同一个采样器,那么这两个配置元件会进行合并,完全一样的取排序靠近的配置元件(如父子级关系)

例1:zuoyongyu1则执行结果是:one显示网页b的地址加上了a的参数(HTTP默认请求都有网页,必须取其一,那么取就近的地址,参数不受影响)。

例2:

zuoyongyu2

后置处理器debug,作用域里按照顺序执行,无就近原则。

3、元件的部分概念

  • 断言:可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。
  • 前置处理器及后置处理器:负责在生成请求之前完成工作。前置处理器常常用来修改请求的设置。
  • 后置处理器:负责在生成请求之后完成工作。后置处理器常常用来处理响应的数据,我们主要在动态关联中用到后置处理器的正则表达式提取器

JMeter录制手机端操作

这只算一个小技能,并没有什么难度,大家可以体验一下:

1、首先打开jmeter,在测试计划下,右击添加“线程组”

2、在工作台下,右击添加“非测试元件—HTTP代理服务器”

1)输入端口号,可以自定义,如9887

2)输入HTTPS Domains(域名):输入自己主机的ip,查询:cmd输入ipconfig即可查看,如:192.168.1.1

3)目标控制器,选择上面的线程组

4)HTTP sampler settings中的Type选择“HttpClient4”

5)配置完手机端(下面的第3步),点击【启动】

shouji1

ps:关于HTTP代理服务器的一些扩展

如图所示,分组选择每个类型的含义:(颜色标出的是比较常用的方式)

shouji2

  • 不对样本分组(Do not group samplers):所有请求全部罗列
  • 在组间添加分隔(Add separators between groups):加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义
  • 每个组放入一个新的控制器(Put each group in a new controller):执行时按控制器给输出结果
  • 只存储每个组的第一个样本(Store 1st sampler of each group only):对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。(当选择这个进行录制后,获取的http请求,可以选中图下模式)

shouji3

 

 

3、配置手机端

1)打开设置-无线网-详情,选择HTTP代理—手动

2)输入服务器ip:即为你上面填写在jmeter中的ip,即主机ip

3)输入端口:即为上面自定义的端口,9887

4、操作手机,按着需要录制的东西操作

5、录制完成后,点击HTTP代理服务器的停止按钮,然后删除掉不必要的请求,添加监听器,即可按着刚刚的操作运行查看结果。(有问题可调试解决)

备注:

工作台默认不保存在脚本里,如果需要保存,需要勾选图下内容:(一般情况下我们不需要保存工作台下面的内容)

shouji4

JMeter与ant的结合使用

JMeter与ant的结合使用使得运行结果更丰富、图表化,可以直接浏览器查看。

默认你已经安装了jmeter且配置好了jdk环境变量,如有不懂的,可以先看这篇文章

传送门:http://blog.jianjiexuan.com/tools/jmeter/178.html

1、首先需要安装ant,

  下载地址:http://ant.apache.org/bindownload.cgi

  下载好了之后解压即可

2、配置环境变量

path           D:/apache-ant-1.9.1/bin

classpath        D:/apache-ant-1.9.1/lib

3、验证是否安装成功

    命令行运行:ant -version

ant         出现这个原因是因为Ant需要用到jre\lib目录下的tools.jar,我们把jdk\lib下的tools.jar拖过去就可以

重新输入命令:ant -version,成功

ant1

4、将jmeter的extras目录中ant-jmeter-1.0.9.jar包拷贝至ant安装目录下的lib目录中

5、修改Jmeter的bin目录下jmeter.properties文件的配置jmeter.save.saveservice.output_format=xml

6、编写脚本,build.xml,想要深入了解的可以自己去翻资料摸透,只是想实现效果的,可以直接将下方的代码拿去即可

♥注某些地方需要根据自己的实际情况进行修改

<?xml version=”1.0″ encoding=”UTF-8″?>

<project name=”ant-jmeter-test” default=”all” basedir=”.”>

    <tstamp>

   <format property=”time” pattern=”yyyyMMddhhmm” />

    </tstamp>

    <!– 需要改成自己本地的 Jmeter 目录–>

<property name=”jmeter.home” value=”D:\apache-jmeter-2.6” />

<!– jmeter生成jtl格式的结果报告的路径–>

<property name=”jmeter.result.jtl.dir” value=”D:\resultLog\jtl” />

<!– jmeter生成html格式的结果报告的路径–>

<property name=”jmeter.result.html.dir” value=”D:\resultLog\html” />

<!– 生成的报告的前缀–>

<property name=”ReportName” value=”TestReport” />

<property name=”jmeter.result.jtlName” value=”${jmeter.result.jtl.dir}/${ReportName}${time}.jtl” />

<property name=”jmeter.result.htmlName” value=”${jmeter.result.html.dir}/${ReportName}${time}.html” />

<target name=”all”>

<antcall target=”test” />

<antcall target=”report” />

    </target>

<target name=”test”>

        <taskdef name=”jmeter” classname=”org.programmerplanet.ant.taskdefs.jmeter.JMeterTask” />

        <jmeter jmeterhome=”${jmeter.home}” resultlog=”${jmeter.result.jtlName}”>

        <!– 声明要运行的脚本。”*.jmx”指包含此目录下的所有jmeter脚本–>

               <testplans dir=”D:\testcase” includes=”*.jmx” />

<property name=”jmeter.save.saveservice.output_format” value=”xml”/>

               </jmeter>

</target>

    <path id=”xslt.classpath”>

   <fileset dir=”${jmeter.home}/lib” includes=”xalan*.jar”/>

          <fileset dir=”${jmeter.home}/lib” includes=”serializer*.jar”/>

            </path>

<target name=”report”>

<xslt classpathref=”xslt.classpath”

force=”true”

  in=”${jmeter.result.jtlName}”

              out=”${jmeter.result.htmlName}”

style=”${jmeter.home}/extras/jmeter-results-detail-report_21.xsl” />

  <param name=”dateReport” expression=”${report.datestamp}”/>

        <!– 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 –>

<copy todir=”${jmeter.result.html.dir}”>

<fileset dir=”${jmeter.home}/extras”>

<include name=”collapse.png” />

<include name=”expand.png” />

</fileset>

</copy>

</target>

</project>

7、命令行,进入放build.xml脚本的目录下,运行 ant,如图所示

ant2

8、运行结束后,打开对应路径下的html文件查看结果,如下图所示

ant3

所有的都结束啦,这个图表的作用也没那么大,主要是通过自己写build脚本,可以让执行变得多样化,也可以同时执行多个脚本。

非GUI模式运行JMeter脚本

使用非GUI模式,即命令行模式运行JMeter测试脚本,这样能够大大缩减所需要的系统资源。

命令需要在jmeter的bin目录下执行

命令:jmeter -n -t <testplan filename> -l <listener filename>

如:jmeter -n -t testplan.jmx -l log.jtl

停止运行:ctrl+c       停止后台运行:ctrl+z

解释:

  • -h帮助 → 打印出有用的信息并退出
  • -n非GUI模式 → 在非GUI模式下运行Jmeter
  • -t测试文件 → 要运行的JMeter测试脚本文件
  • -l日志文件 → 记录结果的文件
  • -r远程执行 → 启动远程服务
  • -H代理主机 → 设置JMeter使用的代理主机
  • -P代理端口 → 设置JMeter使用的代理主机的端口号

如:jmeter -n -t test1.jmx -l logfile1.jtl -H 192.168.1.1 -P 8080

服务器GUI模式(分布式测试):jmeter -server -H 192.168.1.1 -P 8080

备注

1、执行命令前要检查当前目录是否是%Jmeter_Home%\bin目录,如果不是,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

2、执行结果可以使用GUI模式下的聚合报告查看。打开Jmeter GUI界面 →测试计划 →添加线程组 →添加聚合报告 →点击“所有数据写入一个文件”下的“浏览”,找到之前生成的.jtl文件即可。

3、命令行实时查看运行结果,需修改jmeter.properties,打开以下内容:

summariser.name=summary

summariser.interval=30  //这个表示统计频率

summariser.out=true //是否将统计结果输出到控制台

4、使用编辑器直接打开jtl文件

buchong1

名词解释:

属性 内容
httpSample 取样节点名字
t 用时(ms)
lt 延时(ms)-不是所有的取样器支持这个
ts 时间标志
s 是否成功
lb 标签
rc 响应代码
rm 响应消息
tn 线程名
dt 数据类型
by 字节数
de 数据编码
ng 在这个线程组中活跃的线程数
na 所有线程组中的活跃线程数

 

Jmeter安装与配置

其实jmeter安装很简单,但是还是有人问起,这边就简单描述一下。

总概括

1、前置条件:安装配置好jdk

2、jmeter下载地址:

http://jmeter.apache.org/download_jmeter.cgi

3、一般启动:直接解压,点击bin目录里的jmeter.bat即可启动

4、服务器模式启动:jmeter -server.bat。允许在远程节点上以服务器模式运行jmeter,并通过jmeter gui来控制。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

详细扩展:

1、JDK的安装与配置

1)jdk下载:http://pan.baidu.com/s/1ge8efeF

2)双击适用的jdk版本的exe文件,一般安装至C:\Program Files\Java目录下;

3)配置环境变量:
①我的电脑→右键→属性→高级系统设置→环境变量

②在系统变量中新建,变量名:CLASSPATH,变量值:
C:\Program Files\Java\jdk1.7.0_71\lib\dt.JAR;
C:\Program Files\Java\jdk1.7.0_71\lib\TOOLS.JAR;
C:\Program Files\Java\jdk1.7.0_71\BIN;

③再新建,变量名:JAVA_HOME,变量中:
C:\Program Files\Java\jdk1.7.0_71;

④修改PATH变量,添加%JAVA_HOME%/bin;

⑤然后确定即可。

检测JDK是否安装成功:
在系统cmd中输入java -version,返回版本信息说明成功。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2、Jmeter的安装与配置

1)下载地址:http://pan.baidu.com/s/1dEGVCwp,解压

2)配置环境变量:
①我的电脑→右键→属性→高级系统设置→环境变量

②在系统变量中新建,变量名:JMETER_HOME,变量值:(你当前解压jmeter的路径)

如:
D:\apache-jmeter-2.6;

③修改CLASSPATH变量,添加
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;
% JMETER_HOME%\lib\jorphan.jar;
%JMETER_HOME%\lib\logkit-2.0.jar;

④然后确定即可。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3、然后点击Jmeter目录下bin文件夹里的jmeter.bat就可以打开Jmeter

赶快去看我的另一篇文章:搭建基本测试环境,体验一下jmeter吧!

传送门:http://blog.jianjiexuan.com/tools/jmeter/98.html