自动化测试之iOS浅谈

Posted by DragonLi on August 21, 2017

自动化测试 :自动化测试就是写一些测试代码,用代码代替人工去完成模块和业务的测试

较全面的一篇文章

从0到1

iOS自动化测试:Appium 从入门到实践

unit

我写的一个测试demoXituUnitTestDemo,可以参考

大多数App还停留在人工测试阶段,人工测试投入的成本最低,能够保证核心功能的使用,而且测试人员不需要会写代码

  • 一个App的核心功能,在每一次发布版本前的测试必定会跑一遍所有的测试用例,不管对应的业务在当前版本有没有变化(天知道开发在做业务A的时候,对业务B有没有影响),如果这次测出新的bug,测试人员在下一次发版测试中,又不得不做这些重复的工作。

  • 开发在写API请求相关代码的时候没有做数据容错,测试在人工测试的时候都是正常的数据,所以测试通过。上线了之后,后台配置数据的时候出了点小问题,导致大面积崩溃,boom~。

自动化测试优点

  • 测试速度快,避免重复性的工作
  • 避免regression,让开发更有信心去修改和重构代码(个人认为最大的优点)
  • 具有一致性。
  • 有了自动化测试,持续集成(CI)会变得更可靠。
  • 迫使开发人员写出更高质量的代码。(自动化测试不通过,代码不允许合并)

自动化测试缺点

  • 开发和维护成本高。
  • 不能完全替代人工测试。
  • 无法完全保证测试的准确性 - 让代码去判断一段逻辑是否正确很容易,但是,让代码判断一个控件显示是否正确却没那么容易。
综上: 我们会选择那些业务稳定,需要频繁测试的部分来编写自动化测试脚本,其余的采用人工测试,人工测试仍然是ios App开发中不可缺少的一部分

UI测试

  • appium 基于Client - Server的测试框架。App相当于一个Server,测试代码相当于Client,通过发送JSON来操作APP,测试语言可以是任意的,支持android和iOS。

单元测试用例

比如,我有以下一个函数:

//验证一段Text是否有效。(不能以空字符开头,不能为空)
- (BOOL)validText:(NSString *)text error:(NSError *__autoreleasing *)error{}
3
那么,我该如何为这个函数编写单元测试的代码?通常,需要考虑以下用例:

输入以空白字符或者换行符开头的,error不为空,返回 NO
输入正确的内容,error为空,返回YES
输入为nil,error不为空,返回 NO (边界条件)
输入为非NSString类型,验证不通过,返回NO (错误输入)
特殊输入字符(标点符号,非英文等等)

总结

  • 单元测试还是选择BDD框架,毕竟可读性高一些,推荐Quick(Swift),Kiwi(Objective C)
  • UI测试优先推荐KIF,如果需要兼顾安卓测试,或者测试人员对OC/Swift很陌生,可以采用appium