厚脸皮说测试

在这里我们只说测试

《iOS测试指南》勘误一

《iOS测试指南》出版并且上市已经有一个月的时间了。随着该书陆续的与读者见面,一些隐藏着的小错误也慢慢浮出水面。在这里先简单的说明一下,截止到现在笔者所知的一些书内的错误。

Byte 和 bit的区别

Byte和bit是有区别,8个bit是一个Byte。一般说文件大小的时候,单位是Byte。说网络带宽时一般使用bit。在《iOS测试指南》的125页中,在描述几种手机上网带宽时,写错了,网络带宽的地址。

书中原始如图所示,这里应该使用 kb,来表示网络带宽,并不是使用KB。 alt text

非常抱歉,一个简单的疏忽就让网络带宽原地提高了8倍,真可谓差之毫厘,失之千里。

千万不要去Copy代码

我在写《iOS测试指南》的过程中,书稿经过了好几次修改,但是依然还是能发现一些错别字。文字功底已经没有办法挽回了,只能认真的把实例代码写好了。所以,我都很认真的写着示例代码。保证所有的代码都是运行过,并且没有问题的才写进到书中。“代码运行过,不代表没有问题。”这是测试工程师经常拿来教育开发工程师的话,自己也犯错误了。

在书中的第43页,有一段代码中的注释有问题。

alt text

注释写错了,很明显这不是一个笔误。这是一个复制之后没有修改完全的错误。在编写代码的过程中千万不要去Copy代码。没有Copy就没有低级错误。

iOS 7的改动带来的问题

在本书中使用了很多次Recipse程序,Recipse程序是官方文档中用来介绍UI Automation的示例程序。本书的第八章介绍KIF时,也是使用了Recipse程序来完成一些功能测试。当需要删除Recipse程序中的菜单时,系统提供的TableViewCell会有删除确认。但是那个确认的按钮的一些属性有些变化。如图所示。

alt text

图中红框内的属性和iOS 6中的属性已经有所变化。

在 iOS 7.0以上的版本,删除确认按钮的属性是 Delete。但是在iOS 6或者5中,删除确认按钮的属性是 Confirm Deletion for xxx(xxx 是 TableCell的name属性)

所以为了测试能在iOS所有的系统上都能完美的运行,代码可以这样修改:

Objective-C
1
2
3
4
5
6
7
8
//点击删除确认按钮
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) {
    [tester tapViewWithAccessibilityLabel:@"Confirm Deletion for aaa"
                                   traits:UIAccessibilityTraitButton];
} else {
    [tester tapViewWithAccessibilityLabel:@"Delete"
                                   traits:UIAccessibilityTraitButton];
}

当然,因为属性是很多自动化测试工具都要用到的,所以,大家在iOS6升级到iOS7时都会有这个问题。当你使用的UI Automation的时候,也会遇到这个问题。当然,在UI Automation的时候,还有更大的一个问题。在iOS 7系统中,由于Apple公司的问题,导致UI Automation的所有滑动操作无效。

由于iOS7中滑动操作无效,所以,只能使用别的操作路径来进行删除。

完整的代码如下:

JavaScript
1
2
3
4
5
6
7
8
9
test("删除刚才添加的饺子菜单,通过判断总菜单数量的变化来判断测试是否成功",
    function(){
        oldCellsLength = Finder.findElementByName("Empty list").cells().length
        Finder.findElementByName("Edit").tap();
        Finder.findElementByName("Delete 饺子").tap();
        Finder.findElementByName("饺子").buttons()[0].tap();
        newCellsLength = Finder.findElementsByClassType("TableCell").length
        assertEquals(newCellsLength,oldCellsLength-1);
    }

以上两处需要进行代码更改的地方,都是Apple升级iOS7以后,需要针对iOS7进行的一些容错处理。需要容错的主要由2处:

  1. iOS 7 中 TableCells中自带的删除按钮的Accessbility属性发生了变化。有原来的 “Confirm Deletion for xxx(xxx 是 TableCell的name属性)” 变化为 “Delete”。

  2. UI Autoamtion的所有滑动相关的手势无效。

针对以上的内容需要进行iOS7相关的适配。适配方法请仔细阅读代码。《iOS测试指南》出版的时候,iOS7已经发了,但是未能对iOS7中的内容进行全面的兼容,在此表示深深的歉意。