# 2020年了，终于可以让siri帮我们做自动化测试了




2020年是一个魔幻的年份，那么在这一年里，我们不妨玩的更科幻一点。

在下面这个视频里，我们看看怎么样使用siri帮我们做自动化测试吧。


### 原理分析

原理其实很简单。首先用语音唤醒siri，调用ios的快捷指令，自动给在公司的小伙伴打电话，让他们配合表演，做一阵各种操作，把测试结果返回。

当然，这是开玩笑的。

真正的原理如下图所示


其实就是用语音唤醒siri之后调用ios的快捷操作app，通过ssh到远程服务器的方式，调用远程服务器上的测试脚本，运行用例，并将结果返回。

### 用到的设备

* 一台ios机器，iphone和ipad都可以，升级到最新版本
* 一台云服务器，能ssh访问

### 测试用例

因为偷懒的关系，我就没有写特别复杂的用例了，这里我就用python简单测试了一下重定向科技的所有课程页面，属于简单的界面UI测试范畴。

不过这里没有用到selenium，而是直接发送1个get请求拿到页面的html，然后从html标签中分离出我想要的关键信息做断言。

先写自然语言的用例

* 发GET请求到http://www.itest.info/courses
* 拿到html后用css选择器.servive-block-in > h4拿到所有课程的名称
* 课程名称里包含**全栈测试开发班**这个课程，这里用包含断言，提升了用例的鲁棒性，也就是说跑多次不容易报错

再用python去实现一遍

```python

import requests, unittest
from bs4 import BeautifulSoup

url = 'http://www.itest.info/courses'
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')

titles = [i.text for i in soup.select('.servive-block-in > h4')]
course_name = '全栈测试开发班'
assert course_name in titles, '{}不在课程列表中'.format(course_name)
print(titles)
print('All good')

```

这里用到了2个第三方库

* requests：简化http的各种操作
* BeautifulSoup4: html parser，方便我们从html标签中分离出各种有效信息

用例的整体思路借鉴了多年前google提出的测试降级思路，也就是如果页面上的一些元素可能是干扰项，那么就需要在用例中去掉这些干扰，实际上这个脚本其实就是一个简单的爬虫，只是加了断言而已。

### 确保可以远程运行

将脚本放到云服务器上，运行

```
python itest.info.py
```

结果应该如下

```
['全栈测试开发班', '性能测试班', '接口自动化测试开发--Python班', 'Selenium自动化测试--Python班']
All good
```

### 配置快捷指令

一步一步按图来配置就好了。


这里我配置了

* 通过ssh运行脚本，在这里选择ssh到了远程服务器，并执行了shell脚本
* 播放声音，这个纯属为了好玩
* 最后显示shell脚本结果，把运行的结果返回回来

配置好快捷指令之后就可以用siri去运行这个指令了。

### 最后

用siri去执行自动化测试脚本，听上去感觉脑洞很大，但只要了解了原理，就会发现其实并不算困难。

整个过程看上去很简单，但其实包含了一些值得分享的思路。

* 能在命令行里跑的都在命令行里跑
* 能在云服务器跑的都在云服务器上跑
* 工作中其实有很多地方都可以用到自动化，主要看脑洞够不够大

通过siri + 快捷操作的方式，你还可以实现

* 通过siri去部署
* 通过siri去运行爬虫
* 通过siri去执行jenkins任务，ssh到一台跳板机，然后通过curl运行jenkins api
* 其他更多....

有兴趣的同学不妨亲自动手试一下，跑通了流程以后也许可以在面试的时候表演一下，比如假装收到告警短信，然后低调的语音唤醒siri，说跑一下现网的监控测试，然后就优雅的等待测试结果或翻车，总之，人生如戏，全靠演技。




原始封面

![课程图片](https://images.unsplash.com/photo-1479030160180-b1860951d696?w=300)


