第4章 iOS性能测试——腾讯iOS测试实践(2)

发表于:2017-10-13 16:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:丁如敏 王琳 等    来源:51Testing软件测试网原创

  2.4.2稳定性测试思路
  测试思路是整个测试的核心部分。通过做随机测试,我们有两种思路,一个是获取当前页面的所有控件,随机对某一个控件进行某一个操作;另一种是随机某一个像素点,在屏幕上点击该点。不管是哪一种思路,我们的出发点都是让测试尽可能高效、覆盖面尽可能广。
  先来看看控件部分,随机对某一个控件进行某一个操作,测试会比较随机。同时,因为操作都集中在部分可获取、可操作的控件上,所以大部的操作都是有效的。case的大体设计思路如图4-7所示。
  图4-1 稳定性测试思路
  再看看基于像素点的设计思路。首先必须保证测试有随机性。但是实践证明纯随机的操作,测试效率太低,覆盖面太小,能发现的问题太少。项目初期能发现一些明显的问题,但很快就很难发现问题了。所以,随机胡乱点击的这种测试不可取,但我们可以对其改进。我们的思路是在随机测试的基础上,加入一些非随机的测试,以有效得提高测试效率。所谓的非随机,是和随机相对的,主要的思想有以下几条:
  1)特殊坐标点处理:像工具栏中一些常用的按钮、弹出框经常出现位置,都可以先计算出来,在一定概率下直接点击这些位置。这样的点应该不会太多,对于每一个应用都可以花很短的时间去计算出来,但是效果却是非常明显的。
  2)将常用操作封装成一个接口,有序得执行:因为很多功能都需要数次的点击或其他操作才能触发,比如删除一个书签,就得先打开书签管理器,然后点击编辑,点击某一个书签,最后点删除这样的操作,用随机的方法不可能连接得执行这一连串的事件。其实像这样需要两次操作以上才能完成的,用随机的方法都太难被覆盖到。所以为了覆盖到这样功能,都会把他的操作路径封装成一个接口,顺序执行,中间不加其他的随机操作。这样的随机就可以覆盖绝大部分的功能。当然,封装接口时,每一个操作可以是绝对坐标点的操作,即计算出第一个操作涉及的坐标点,逐个操作;也可以是模糊的区域操作,即执行某一个操作过后,下一步的操作限定在某一个区域内,有效提高测试效率和覆盖率。
  3)提高常用区域的点击率,降低不常用区域的点击率:每一个应用,都会有最常被使用的功能,和边沿性的功能。我们的思路是应该根据应用的特点来提高某些操作的概率,提高某些区域的点击率,以达到提高测试效率的目的。
  4)随机地执行1、2点中的动作或者全屏随机操作:即像素点都找好后,想要的操作都封闭好后,再随机执行这些操作,中间或夹杂着全屏纯随机的操作,或是一小段一小段有序的操作。
  执行测试设计时,一般会把这两个方式放在一起,这样测试的覆盖面会更大些。
  上面提到过,我们的衡量方式是一段时间内程序出现闪退的次数,那一般来说,这段时间越长,这个测试结果才越有说服力,半小时或1小时的测试结果,完全没有意义。这样就要求我们,测试必须要长时间执行,程序出现Crash时也要能拉起来继续执行测试。
  说到执行测试,因为我们已经把测试代码和测试框架都集成到被测试软件中了,所以只要启动被测试程序,就开始执行测试了。
  我们的思路是从进程入手,在确保进程名唯一的情况下,对被测试程序的进程进行监控,如果发现进程结束了,重新用脚本调起被测试程序,继续执行测试。
  while :
  do
  pid=`psaux|grep $App_binary|grep -v grep |tr -s "” |cut -d '' -f 2`
  if[ -z "$pid" ]; then
   OpenApp ${App_ID}
   waitforAppStart
  else
   sleep 2
  done
  其中,open是iOS平台启动应用程序的命令行工具,后面的参数是应用的Bundle ID(用来唯一标识一个应用的ID),需要越狱的机器才能使用。
  这边举一个简单的例子,以KIF为框架,用例是浏览器里面随机测试设置的功能。测试的设计思路如上面所描述,这个也是稳定性测试的核心思想。关于基于KIF的工程如何配置,如入上手如用,请见《iOS自动测试入门》一章。示例代码如下:
  - (void)closeWindows
  {
  //关闭一个窗口
  CGPoint pointMultiWindows = CGPointMake(225, 980);
  [tester tapScreenAtPoint:pointMultiWindows];
  CGPoint pointclose = CGPointMake(275, 180);
  [tester tapScreenAtPoint:pointclose];
  }
  - (void)randomtap
  {
  //全屏随机点击
  CGPoint point; 
  for (int i = 10; i > 0; i--) {
  point.x = arc4random() % 640; 
  point.y = arc4random() % 1120; 
   [tester tapScreenAtPoint:point]; 
  }
  }
  - (void)returnback
  {
   [tester tapViewWithAccessibilityLabel:@"返回"];
  }
  - (void)settings_testcase
  {
  //进入页面设置
  CGPoint point = CGPointMake(320, 980); 
   [tester tapScreenAtPoint:point]; 
  //随机进入一个设置项
  point.y = arc4random() % 900; 
   [tester tapScreenAtPoint:point]; 
   [self randomtap]; 
   [self returnback]; 
   [self closeWindows]; 
  }
  - (void)other_testcase
  {
  //其他的用例
  }
  - (void)testMonkey
  {
  if (arc4random() %4 == 1) {//用于控制下面这个用例执行的概率
   [self settings_testcase]; 
  }
  if (arc4random() % 10 ==1){ 
   [self other_testcase]; 
  }
  }

本文选自《腾讯iOS测试实践》第四章,本站经机械工业出版社和作者的授权。
版权声明:51Testing软件测试网获机械工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号