分类 测试 下的文章

Appium + robotframework 安装教程 rf编辑器和app元素定位工具

windows 环境安装教程

所需软件的百度云盘链接:https://pan.baidu.com/s/1dFFTy1b

目录:

Python 安装

首先,从官网下载 最新版本 的 Python 2.7。可通过 Python 官网 的”Windows Installer”链接保证下载到的版本是最新的。python-2.7.12.amd64.msi

Windows版本是MSI文件格式,双击它即可开始安装。MSI文件格式允许Windows管理员使用标准工具自动 进行安装流程。

Python将安装到内含版本号信息的路径,例如2.7版本的 Python 将被安装到 C:Python27, 故多个版本的 Python 可以共存在一个系统里,不会有冲突。当然仅有一个默认的 Python 文件解释器, PATH 环境变量也不是自动修改的,开发人员可以控制要运行的Python 版本。

把默认使用的 Python 版本路径加到 PATH 环境变量中,避免每次使用时都要冗余地写全 Python 解释器路径。假设安装路径是 C:Python27, 将这段加入到 PATH 中:

C:\Python27\;C:\Python27\Scripts\

或在 powershell 中运行:

:SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")

验证安装成功,在命令行输入:

python -V

python

pip 安装

下载 pip 包,pip-8.1.2.tar.gz,解压到一个文件夹,用CMD控制台进入解压目录,输入:

python setup.py install

验证安装成功,在命令行输入:

pip list

pip

Robot Framework 安装

利用 pip 安装,在命令行输入:

pip install robotframework==3.0

robotframework

ride 安装

首先安装依赖 wxPythonwxPython2.8-win64-unicode-2.8.12.1-py27.exe

利用 pip 安装 ride:

pip install robotframework-ride

ride

打开 ride 检查能否正常打开:

C:\Users\Jay>cd C:\Python27\Scripts
C:\Python27\Scripts>python ride.py

ride.py

附:如何制作 RIDE 桌面图标

利用 pip 安装 robotframework-appiumlibrary

pip install robotframework-appiumlibrary

Appium 安装

参考 appium-girls 的文章

安装步骤

安装 JDK 并设置环境变量

  1. 到 Java 官网下载相应的 JDK 并安装,jdk-7u79-windows-x64.exe
  2. 设置环境变量

    1. 添加 JAVA_HOME 对应的路径 C:\Program Files\Java\jdk1.7.0_79
    2. PATH 变量末尾追加 ;%JAVA_HOME%\bin;
    3. 添加 CLASSPATH,设置值为:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

设置完毕后在命令行输入

java -version

java

安装 Android SDK 并设置环境变量

  1. Android 官网下载并安装SDK,installer_r24.4.1-windows.exe
  2. 设置环境变量

    1. 添加 ANDROID_HOME 设置值为:C:\Program Files (x86)\Android\android-sdk
    2. 在path环境变量值末尾追加:;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

安装完成后打开 Android SDK Manager

sdkmanager

参考 http://androiddevtools.cn/ 使用国内 Android SDK 镜像源

使用方法:

  1. 启动 Android SDK Manager ,打开主界面,依次选择「Tools」、「Options...」,弹出『Android SDK Manager - Settings』窗口;
  2. 在『Android SDK Manager - Settings』窗口中,在「HTTP Proxy Server」和「HTTP Proxy Port」输入框内填入 mirrors.neusoft.edu.cn 80,并且选中「Force https://... sources to be fetched using http://...」复选框。设置完成后单击「Close」按钮关闭『Android SDK Manager - Settings』窗口返回到主界面;
  3. 依次选择「Packages」、「Reload」。

proxy

选择以下安卓组件下载安装

sdk

安装 Nodejs

Nodejs 官网下载最新版本的 NodeJs 并直接安装,node-v4.6.1-x64.msi
安装完毕后,打开命令行,分别输入 node -vnpm -v,出现类似下面的信息说明安装成功。

node

安装 appium

安装appium有两种方式:

  1. 使用 npm (Node js 的管理与分发工具)
  2. 使用 Appium 官方安装包安装

npm 安装在 windows 相对比较复杂,建议使用官方安装包。

使用NPM安装Appium

首先,npm默认的镜像地址已经被墙,我们需要将npm的下载地址更改为国内的地址。
打开终端(命令行),输入

npm config get registry

我们可以看到当前 npm 的镜像地址。
我们需要将这个地址替换为国内的地址,这里我们替换成淘宝的NPM镜像源:

npm config set registry=https://registry.npm.taobao.org/

敲击回车后,我们再次输入

npm config get registry

可以确认镜像源是否替换成功。

升级 npm ,因为 appium 需要 npm > 3

npm install npm -g

接下来我们就可以安装Appium了:

npm install -g [email protected]

需要注意的是,最新版本的Appium在安装过程中,会去google拉取最新的chromedriver,因为google被墙的关系,你很可能无法下载。这里强烈建议各位学习如何翻墙(openvpn)。

如果安装失败,参考 http://ask.testfan.cn/article/925 ,直接下载个压缩包,修改下路径

使用Appium官方安装包安装

Appium 官网 下载和你所使用系统一致的版本进行安装。AppiumForWindows_1_4_16_1.zip

验证安装

命令行安装 appium-doctor 可以检查环境是否正常

npm install -g appium-doctor
appium-doctor

执行 robotframework appium demo

appium --session-override

打开 ride.py 导入 rf-pregnancy 文件夹
修改 全局配置.txt 中的 ${PLATFORM_VERSION}${DEVICE_NAME}
运行一下。

robotframework 的编辑器

  1. RIDE
  2. Pycharm 插件 IntelliBot

安装 Pycharm

下载并安装 Pycharm,Professional 版功能全需要激活,激活可以参考 http://idea.qinxi1992.cn/ ,激活时选择 License server 填入在线激活服务器地址(或自建激活服务器参考 IntelliJ License Server docker 版)。

安装插件 IntelliBot

参考文章:在pycharm中支持robotframework脚本

  1. 打开Pyhcarm,打开菜单栏>Perferences>打开Plugins>点击Browse reponsitories
  2. 输入IntelliBot,搜索并安装
  3. 安装后,重启pycharm,打开任意.robot格式的脚本,正常应该可以识别了
  4. 但是会发现,第一次安装,并不支持.txt格式的脚本文件,此时需要这么做:
  • 4.1.打开Perferences>Editor>File Types>找到Robot Feature>在Registered Patterns中添加.txt
  • 4.2.保存即可
  1. 此时可以方便地编写脚本,支持自动补全,关键字跳转等。

配置运行测试命令

  1. 脚本编写好了,想执行测试怎么办?可以用pybot命令直接在Pycharm的Terminal中执行。
  2. 也有更方便的办法:不每次输入命令,每次直接在脚本中选择用例或suite直接执行
  • 2.1.配置选择执行单个case:打开Perferences,在Tools中选择External Tools,点击+号新建,按如下信息配置:

testcase

  • 2.2.配置执行testsuite

testsuite

  • 2.3.配置执行所选Tag

tag

  • 2.4.配置执行文件夹中的所有用例

testsuites

3.执行用例时,需要划选整个testcase名称执行单个case;选择testsuite文件或点击testsuite文件空白处执行整个testsuite;选择整个文件夹执行所有用例。

SoapUI 总结

在公司开了4节课教导测试小伙伴们学习和使用soapui,以下是本人的一些关于soapui的课程总结

课程:

  • 第1课: SoapUI 入门
  • 第2课: git操作和问题回顾
  • 第3课: 设计接口测试用例的一些方法
  • 第4课: Soapui in Jenkins

SoapUI 入门

从gitlab中导入项目

  1. 以windows为例,到C盘目录下,克隆项目
  2. 在soapui中切换工作空间,File -> Switch Workspace,选择workspace.xml

switch

  1. 双击打叉的项目,填入项目在硬盘中的绝对地址:C:\soapui\soapui-project,确认后即成功读取整个Project

reload

  1. 点击项目,左下角属性里面有一项 Composite Project:true,即以文件夹形式保存项目,方便多人协作,如果为false,即以单文件形式保存项目,不方便多人协作。

composite

新建接口测试工作空间和项目

  1. 新建工作空间,File -> New Workspace,填写 工作空间名(如果已建,忽略该步骤)
  2. 新建项目,File -> New Project,填写项目名称,如 项目名
  3. 在左下角项目属性里面,将 Composite Project : false 改为 true ,以以文件夹形式保存项目,方便多人协作
  4. 添加项目全局变量 Properties :

    • Name :apiv
    • Value :v5_3_0
    • 引用该变量用: ${#Project#apiv} ,用于适应接口版本变更

Properties

添加一个 API URL

A.使用录制的方式(接口已在 swagger-ui 文档中)

  1. 选中项目右键,Discover REST APIs;

Discover

  1. 到 swagger-ui 中把完整的 Request URL 复制,黏贴进去,按一下回车;

swagger-ui

  1. 等待请求响应后,点击 Done;

Done

  1. 转跳请求 url 记录,点击 Generate services 生成 Services,确认;

generate-services

  1. 在主界面左侧就能看到生成的 API URL
  2. 以上是从接口文档中得到的请求参数,由于接口文档不一定准确,还需要用 Charles 从 app 抓包检查接口参数,还可以从代码中走读检查是否有缺失参数:如何找到接口路径以及完整参数

B.使用手动的方式

  1. 选中项目右键,New REST Service from URI,输入完整URL
  2. 调整 Service 配置:选中 Service,左下角中的属性设置:

    • name : host
    • Base Path : /${#Project#apiv}/api/xxx
  3. 如果已有 Service,选中 Service 右键,New Resource,输入 Path:/xxx.php?xx=xx1&xx=xx2
  4. 在生成的 Request 1 中,手动调整参数:

    • Style : QUERY
    • Level : RESOURCE

canshu

C.使用 swagger-ui json 导入

  1. swagger2.0 版本的 json 比较好,1.2 兼容性不行
  2. 新建项目时,选中 Create project from Swagger Definition(REST)

new-project

  1. 如果已有项目,右键项目,选择 Import Swagger

import-swagger

已录入的接口还能导出 Swagger json ,但是没有示例参数,没有归类 tag,并不算好用

如何找到接口路径以及完整参数

  • 从 swagger-ui 中找
  • 从 kibana 中找
  • 从 Charles 中找
  • 从代码中找
  • 判断接口是否已不使用
    从 kibana 线上数据中找到接口是否被调用的记录

筛选条件形如:

{
  "query": {
    "match": {
      "uripath": {
        "query": "/api/xx.php",
        "type": "phrase"
      }
    }
  }
}

新建测试套件和测试用例

  1. 新建测试套件和测试用例,选择 Request 右键,Add to TestCase

testcase

  1. 生成的测试套件和测试用例如下,

createtestcast

  1. 处理 token 问题,可以自己写接口计算 token 值再传参到真正的请求,或者用 groovy 脚本记录cookies,本人用 php 写了计算 token 接口并结合 nginx rewrite 规则来使用

数据驱动

  1. 添加测试步骤:DataSource,DataSource Loop,用于数据驱动

testsuite

  1. 数据源的设置,类型选择 Grid

datasource

  1. 数据循环的设置:

datasourceloop

  1. 执行测试步骤对数据源的引用方式如下,可以从输入框右边的柱状按钮点击选择:

testrequest

初期,可以一个testcase只有一个执行测试步骤,先不加入数据驱动

用例关联

  1. Add Step -> Run TestCase 引用其他用例作为测试步骤

other-testcase

  1. 过程中需要传参,如该登陆接口需要传递 uid 到关注接口,登陆 Test Case 添加 Properties uid

properties2

  1. 登陆 Test Case 在 Property Transfer 中配置 uid 参数传递,$.data.uid 这个Xpath可以从GET - Request 1 步骤的返回 json 中获取

property-transfer

  1. 引入的手机账号登陆 Test Case 设置参数传递,点击扳手图标,将参数勾选上

run-testcase-options

  1. 测试步骤中,引用其他测试步骤传递过来的参数:

添加断言

  • 在测试步骤中,底部点击 Assertion 展开,添加;或者在返回 Json 中选中数据,右键 Add Assertion

assertion

git操作和问题回顾

  • 导入项目
  • git 回滚操作

    • 本地未提交,拉取报冲突
    • 本地已提交,拉取报冲突
    • git reset 3种模式(重置提交) 和 git revert (提交回滚)的区别
    • git stash (贮藏)的用法
  • 挑选文件提交、重置文件
  • 清除初始url中的参数数值
  • 整体执行用例调试

设计接口测试用例的一些方法

测试用例设计

  • 单一接口 (优先)

    • 覆盖正常情况(优先)
    • 前置条件和收尾工作最好通过写入固定数据库数据来做
    • 不仅要校验返回值,还要校验数据变更是否符合预期
  • 组合接口 (业务场景)

    • 模拟常用的业务场景,在接口层面进行检查

断言方法:

  • for Content
  • for Count
  • for Existence
  • for Content matching RegEX 正则参考
  • Valid HTTP Status Codes
  • Contains 中文需unicode转码
  • Not Contents
  • XPath Match 可以模糊匹配
  • 一般用准确断言和存在断言来对返回数据进行判断,在不能进行数据库数据写入后还原的情况下,更多地使用存在断言或模糊匹配
  • 可以用groovy脚本来进行更复杂的断言,需要较高学习成本

数据驱动

  • 目的:重复导入字段数据,检测接口异常
  • 添加步骤 DataSource 和 DataSource Loop ,进行数据循环录入,设置好 DataSource Loop 的 DataSource Step 和 Target Step
  • 在 request 参数中 填入 ${DataSource#变量名} 来引用数据源

业务场景

  • 参数传递

    • 在 testcase 的 Properties 中添加变量,并添加 PropertyTransfer 步骤将 response 拿到的参数传递给变量
    • 关联用例 testcase 添加后,在 request 参数中 填入 ${用例名#变量名} 来引用
  • 不同的账号以不同的登录 testcase 来给其他用例组成测试场景,避免以数据驱动的方式来实现,不然要面对复杂的断言

SoapUI in Jenkins

普通命令行方式运行:

  1. 在 jenkins 所在的 linux 服务器上安装Soapui开源版~/SoapUI-x64-5.2.1.sh
  2. 安装 jenkins 插件并配置

  3. 配置 jenkins 项目

    • 源码管理: Git 填写 soapui 仓库地址,Additional Behavioursa 添加 Clean before checkout
    • Build periodically: H 9 * ,每天定时早上9点构建一次
    • 构建:Execute shell:
        cd ${WORKSPACE}
        mkdir report
        cd /data/SoapUI-5.2.1/bin
        ./testrunner.sh -Dfile.encoding=UTF-8 -I -r -j -f${WORKSPACE}/report ${WORKSPACE}/soapui-project.xml
- 构建后操作: Publish JUnit test result report,  测试报告(XML) : report/*.xml 
- 构建后操作: Editable Email Notification,  Default Content : ${JELLY_SCRIPT,template="testReport_fail"}

以 docker 方式运行

  1. 在jenkins所在 linux 服务器(如 ubuntu )上安装 docker: curl -sSL https://get.docker.com/ubuntu/ | sudo sh ,参考:Install Docker Engine
  2. 拉取镜像,docker pull jmcn/soapui-docker ,参考: https://github.com/JMcn/soapui-docker
  3. jenkins 项目设置中的构建步骤改为:
    Execute shell:
mkdir ${WORKSPACE}/report

sudo docker run --rm --add-host="host:ip" -v ${WORKSPACE}:/var/home jmcn/soapui-docker -l -c "testrunner.sh -Dfile.encoding=UTF-8 -I -r -j -f/var/home/report/ /var/home/soapui-project.xml"

项目构建触发条件:

  1. 定时运行,在项目中设置

    • Build periodically:相当于 linux 的 crontab,定时执行构建任务
    • Poll SCM:定时检查源码变更,有更新则 checkout 最新代码,然后执行构建
  2. 设置上游项目

    • 场景:接口代码更新构建后,执行一次自动化接口测试
    • 在接口的构建项目设置中添加 构建后操作, Build other projects ,选择要构建的项目以及触发条件

命令行参数:

  • ssh 到服务器运行安装目录下的 ./bin/testrunner.sh 即可查看参数具体说明,特别注意只能指定 soapui-project-file 的 xml 文件来运行,不能指定项目文件夹
  • 在Soapui图形界面中,右键 TestSuite 测试套件,Lauch 后查看 log 能找到 soapui 命令行的带参以及运行情况

testrunner

测试报告

  • pro 版可以生成 pdf 以及 html 的测试报告,但开源版只能对每个 TestSuite 生成 xml 文件,错误的请求详情以 txt 文件记录,所以,需要配合 jenkins 的 Publish JUnit test result report 步骤来展示报告,或邮件模板来展示
  • 添加 -a 参数无论错误还是正确的 testcase 都会生成 txt 文件记录请求详情
  • 添加 -I 参数:Do not stop if error occurs, ignore them
  • xml 文件中文名称不显示问题,需要在系统安装中文语言包并设置语言为 zh_CN.UTF-8

Appium - JAVA 入门

Appium 的理念:

  1. 你无需为了自动化,而重新编译或者修改你的应用。
  2. 你不必局限于某种语言或者框架来写和运行测试脚本。
  3. 一个移动自动化的框架不应该在接口上重复造轮子。(移动自动化的接口应该统一)
  4. 无论是精神上,还是名义上,都必须开源。

满足第一条,Appium 真正的工作引擎其实是第三方自动化框架

  • iOS: 苹果的 UIAutomation
  • Android 4.2+: Google’s UiAutomator
  • Android 2.3+: Google’s Instrumentation. (Instrumentation由单独的项目Selendroid提供支持 )

满足第二条,把这些第三方框架封装成一套 API,WebDriver API.WebDriver(也就是 “Selenium WebDriver") 指定了客户端到服务端的协议。
Appium 和 WebDriver 客户端不是技术意义上的“测试框架”,而是“自动化库”。你可以在你的测试环境中随意使用这些自动化库!

第四条就不用说了,Appium 是开源的。

Appium 概念:

appium1

appium2http://std.mama.cn/laizhuoming/appium_share/raw/master/2.png

Appium 安装和运行

brew install node (brew install nvm) # get node.js

npm --registry http://registry.cnpmjs.org install -g appium # get appium

npm install wd # get appium client

appium & # start appium

node your-appium-test.js (maven clean test)

Appium 服务关键字:

http://appium.io/slate/cn/master/?java#appium-服务关键字

移动手势的自动化

http://appium.io/slate/cn/master/?java#移动手势的自动化

Wireless 远程连接

adb connect 172.68.81.247:5555

STF 安卓设备集群

https://github.com/openstf/stf

rethinkdb

stf local --public-ip 172.68.80.228 --allow-remote

以上是5月底分享的内容。本人觉得不是十分满意,因为只看了官网文档和根据sample做了个简单的demo,没有深入去做好分层,封装好代码。
再参考其他教程,说说java方面怎么入门appium(Android):

01 安装相关环境

  1. 安装 JDK 并设置环境变量
  2. 安装 Android SDK 并设置环境变量
  3. 安装 Nodejs
  4. 安装 appium
  5. 通过 appium-doctor 验证安装是否正常
  6. 安装 Eclipse 或 IDEA

本人使用 Eclipse ,官网例子有 maven 处理依赖,所以不需要额外下载 Appium Java Client

启动 appium 的配置

写在 setUp() 方法中

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("appium-version", "1.5.2");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", "Android");
    capabilities.setCapability("platformVersion", "5.1");
    //capabilities.setCapability("avd", "Nexus_6_API_22");
    capabilities.setCapability("deviceName", "71MBBL622933");
    capabilities.setCapability("noSign", "true");
    capabilities.setCapability("noReset", "true");
    capabilities.setCapability("app","apk 路径");

然后启动手机或模拟器

    serverAddress = new URL("http://127.0.0.1:4723/wd/hub");
    driver = new AndroidDriver(serverAddress, capabilities);

结束后需要关闭 session

    @After
    public void tearDown() throws Exception {
        if (driver != null) driver.quit();
    }

元素定位

  • appium 图形客户端有 Inspector 工具,可以直接得到xpath
  • android sdk tools 中有 uiautomatorviewer,可以拿到resource-id
  • android sdk tools 中有 DDMS 也可以获得元素信息

以后的目标:

我转python,加上robot framework 来实现 ^_^
持续学习中

Junit 再读

单元测试框架主要完成三件事

  • 提供用例组织与执行
  • 提供丰富的比较方法
  • 提供丰富的日志

Junit 单元测试框架解析

常用注解:

  • @Test:测试方法
    (A) (expected=XXEception.class)

(B) (timeout=xxx)

  • @Ignore: 被忽略的测试方法
  • @Before: 每一个测试方法之前运行。
  • @After : 每一个测试方法之后运行。
  • @BefreClass 所有测试开始之前运行。
  • @AfterClass 所有测试结果之后运行。
package com.junit.test;
import static org.junit.Assert.*;
import static org.hamcrest.Matcher.*;
import org.junit.Test; import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.AfterClass;

import org.junit.After; 
import org.junit.Ignore;
import com.junit.test.count; 

public class tests {
    @BeforeClass //的所有方法运行之前运行。 
    public static void beforeClass(){
        System.out.println("--beforeClass"); 
    }

    @AfterClass //在所有方法运行之后运行 
    public static void afterClass(){
        System.out.println("--afterClass"); 
    }

    @Before //每个测试方法运行之前运行 
    public void before(){
        System.out.println("==before"); 
    }

    @After //每个测试方法运行之后运行 
    public void after(){
        System.out.println("==after"); 
    }

    @Test
    public void testAdd() {
    System.out.println("test Run through");
    }

    @Test ()
    public void testdivision(){
    System.out.println("in Test Division"); }

    @Ignore //表示这个方法是不被运行的
    @Test
    public void testDivide(){
    System.out.println("test Ignore");
    }
}

运行结果:

--beforeClass
==before
test Run through
==after
==before
in Test Division
==after
--afterClass

错误类型:

  • Errors:表示程序本身错误。
  • Failures: 是指测试失败。

断言方法:

assertArrayEquals(expecteds, actuals):查看两个数组是否相等。
assertEquals(expected, actual):查看两个对象是否相等。
assertNotEquals(first, second):查看两个对象是否不相等。
assertNull(object):查看对象是否为空。
assertNotNull(object):查看对象是否不为空。
assertSame(expected, actual):查看两个对象的引用是否相等。类似于使用“==”比较两个对象
assertNotSame(unexpected, actual):查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
assertTrue(condition):查看运行结果是否为 true。
assertFalse(condition):查看运行结果是否为 false。
assertThat(actual, matcher):查看实际值是否满足指定的条件。
fail():让测试失败。

批量执行测试用例

  1. 创建一个空类作为测试套件的入口;
  2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuitClasses 修饰这个空类
  3. 将 org.junit.runners.Suite 作为参数传入给注解 RunWith,以提示 Junit 为此类测试使用套件运行器执
    行。
  4. 将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数
  5. 保证这个空类使用 public 修饰,而且存在公开的不带任何参数的构造函数
package com.junit.test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class) 
@SuiteClasses({
    test.class, 
    tests.class 
    })
public class testAll { 
}

明天是再读TestNG!

利用Squid代理实现WEB测试修改hosts

无论在 Android,IOS 还是其他移动设备上,机器的 hosts 一般不给修改,要通过越狱和 root 等手段来获取 hosts 的修改权限。而利用Squid搭建一台HTTP代理服务器,移动设备通过这台机器登录,就可以利用这台机器的hosts设定,而不需要冒险麻烦去越狱和root啦,当然电脑的浏览器也可以使用。
具体方法如下:
1.在Linux安装Squid:
偷懒方法(在CentOS下):
# yum install squid
2.安装后找到squid.conf配置文件,并修改。
这个文件通常在/etc/squid目录下,找不到只能说:
# find / -name "squid.conf"
3.# vi /etc/squid/squid.conf
在最后添加:visible_hostname ProxyServer
修改 http_port 3128 transparent (支持透明代理,端口号为3128,可以根据口味修改)
http_access deny all 改为 http_access allow all
cache_dir ufs /var/spool/squid 100 16 256 改为 cache_dir ufs /var/spool/squid 1000 16 256 (不改会提示缓存不足)
4.初始cache目录:# squid -z
5.以后台进程运行:# squid -s
6.修改服务器hosts文件:# vi /etc/hosts
7.用IOS或者Android选择HTTP代理,填入IP和端口即可。

参考资料:
Squid中文权威指南 http://blog.s135.com/book/squid/index.html