iOS之性能优化我的阅读

说说 iOS 自动化测试那些事

2018-03-27  本文已影响21人  Ecolean

自动化测试是什么?

自动化测试是指在预设条件下运行系统或者应用程序,评估运行结果,预先条件包括正常条件和异常条件。---- 摘自《百度百科》

iOS自动化测试的目的?

在进行版本迭代的过程,开发同学和测试同学都会app进行测试,不管对应的业务在该版本中有没有发生变化,只要有新的bug 产生,那么在以后的发版中又会重新对该bug 进行测试,造成了非常多的人力资源浪费,而且还不高效。

iOS 自动化测试的框架

如果您是iOS 开发,相信您一定会关注每年的WWDC 大会,苹果自带的XCTest 是在2015 年 WWDC 上提出来的,而且官方还给出了一个Demo。如果您感兴趣,戳这里https://developer.apple.com/videos/play/wwdc2015/406/
除此之外,也有一些其他的自动化测试框架。
至于这些框架的简介、优缺点等等,网上的资源很多,这里就一笔带过,用的比较多的是 Appium。笔者嫌弃它配置麻烦,就没有研究,今天我们主要说说 iOS 自带的XCTest。

添加执行文件

在我们创建一个项目的时候,如果需要加入UI Test,那么就要勾选 Inclide UI Tests 还有一个是 Inclide Unit Tests 这个是单元测试(今天暂且不说)。
0.png
如果是现有项目,那么新建一个 Target 就好了。
1.png

相关 API

官方API:https://developer.apple.com/documentation/xctest/xcuielementquery?preferredLanguage=occ 只要花上半天或者一天的时间就可以将这些API 看完。下面我们说一下常用的一些API。

1、- children​Matching​Type:​​查询所有的直接子代元素, 返回值是一个新的查询
2、- descendants​Matching​Type:​​ 查询所有的后代子元素(包括子代元素),返回值是一个新的查询
3、matching​Identifier:​​根据标识查找后代元素,返回值是一个新的查询。使用该方法时,需要在xib 或者代码中给一个UI 的accessibilityIdentifier 赋值,否则查询不到。
4、element 返回一个查询的元素, 返回值是一个元素。
5、- element​Bound​By​Index:​​ 根据下标返回查询结果中匹配的元素。
6、exists: 判断元素是否存在。
7、hittable 判断该元素是否能够响应事件。
8、Typing Text 文本输入(一般是UITextField 或者 UITextView)
9、tap,doubleTap单击,双击手势。
10、swipe​Left,swipe​Right,swipe​Up, swipe​Down,上下左右滑动等等。

代码编写

刚开始的时候,我们进行代码录制。在我们的 UITests的.m 文件中,系统会自动创建一个testExample方法。当我们点击录制按钮的时候, Xcode 会根据用户的操作在testExample生产相对应的代码。
2.png
通常情况下,自动生成的代码是会报错的,因为我们的按钮的title,cell 上的内容等等都是中文。有两种方式解决这个问题。
另外,系统生产的代码通常情况下是很乱的,需要我们进行过滤或者验证一遍,有时候甚至会生产一些错误的代码,这个时候就需要我们进行调试和修改。这里给出一个Example。
- (void)testLogin {
  for (int i = 0; i < self.names.count; i++) {
      XCUIElement *textFieldUser = self.app.textFields[@"用户名"];
      [textFieldUser tap];
      [self.app.buttons[@"Clear text"] tap];
      [textFieldUser typeText:self.names[i]];
      sleep(1);
      XCUIElement *textFieldPwd = self.app.secureTextFields[@"密码"];
      [textFieldPwd tap];
      [self.app.buttons[@"Clear text"] tap];
      [textFieldPwd typeText:self.pwds[i]];
  
      XCUIElement *button = self.app.buttons[@"登录"];
      [button tap];
      sleep(2);
      
      if (!button.exists) {
          // 登录成功
      }
  }
}

我们简单说明一下上面的代码, 我声明了两个数组,一个用来存储用户名(names)一个用来存贮密码(pwds),循环遍历,依次输入用户名和密码,如果错误则重新输入直到正确为止。

iOS 自动化测试遇到的问题

上一篇下一篇

猜你喜欢

热点阅读