霍格沃兹学习笔记
(持续更新,直到学完哈哈哈哈哈)
一、接口测试的价值
分层测试保证质量,变更发生时,及时发现。
UI(客户端)——Service(服务端)——Unit(单元)
开发代码发生变更时,必须进行单元测试。
客户端测试:UI 兼容 性能 安全
服务端测试:接口 兼容 性能 安全
接口测试的必要性:
- 行业成熟方案
- 更早发现问题
- 更快的质量反馈
接口测试不能做:不能解决移动端的质量
二、接口基础知识
三、接口行为的观测与分析
- 常见的协议
- IP
- TCP UDP
- HTTP DNS BRC
- SOAP RESTful Dubbo
- ProtoBuf、MCPack
- 协议分析工具
- 网络嗅探:WireShark、TcpDump
- Proxy:Fiddler(win)、AnyProxy[全平台]
推荐工具:charles(全平台)、burpsuite(全平台java) - 分析工具与协议客户端工具:
curl postman
chrome DevTool、Postman
- Chrome DevTool查看http请求
- copy as cURL 用来了解接口
-H 表示header信息 - har格式 (HTTP Archive )
存储性能数据的格式
可以用来自动生成接口测试用例
harviewer开源可视化工具 瀑布流图
copy as all HAR - HTTP协议组成
(curl命令 -vvv查看详情)
- target:
url method - request:
header
get query
body - response
status code
content
nc命令(mac)/talent(win)
//建立连接
nc www.baidu.com 80 -vvv
//手动发起一个http请求
GET /index.html HTTP/1.1
host baidu.com
客户端模拟请求工具
- nc
- curl 最常使用的http请求工具
- postman 交付调试工具
- burpsuite http操纵的黑客级别工具
- curl常用方法
- get请求 curl $url
- post请求 curl -d 'xxx' $url
- proxy请求 curl -x 'http://127.0.0.1:8080' $url
- 代理分析工具
Charles for 测试工程师 ,BurpSuite for hacker
- 代理功能
http/https、sock5
限速模拟
断点调试 - 转发功能
映射:让发往a网站的请求返回b网站的内容
重写:自动把请求和内容篡改掉
- charles的使用
- web端抓包
- 移动端抓包
genymotion模拟器 配置代理 - 抓http https
- 模拟弱网 Throttle Setting
- 打断点
- map local 篡改请求 响应
12.Burpsuite
一般黑客使用,测试工程师可做安全测试、定制工具
- 爬虫
- 暴力破解
四、接口用例的编写与管理
- 接口测试流程
接口范围
接口分析
接口测试用例设计
接口测试框架选择
测试用例编写与维护
持续集成
待测接口范围
总共要测多少接口、如何交互
待测接口统计渠道:接口文档(人工文档、swagger自动生产文档)、代码分析、线上log、客户端抓包接口分析
监听分析:tcpdump+wireshark+har提取工具 (适用于偏门协议)
代理分析:charles+burpsuite
转发分析:修改host域名+反向代理转发测试用例设计
接口调用的流程分析:
- 代理抓包
- 线上log
- 人工用例补充:用流程图或思维导图进行业务建模
正常场景用例
异常场景用例
安全和稳定性用例
- 接口测试框架选择
- 常见:
Jmeter: 性能测试工具,不具备完备的接口测试框架功能
Robotframework: 关键字驱动,适用技术弱的群体 - 推荐框架:
RestAssured 开源
soapUI 商业化
swagger
基于各种语言的httpclient封装也很常用
- 测试用例编写(RestAssured)
创建新的maven依赖
添加依赖restassrued junit 的依赖
编写用例
(1)基本请求:get 、post 添加header 、json请求
(2)常见的结果:statusCode、html、xml、json、jsonp
(3)用例调试: log、proxy
RestAssured.proxy("127.0.0.1",7778);
使用该全局变量,可以所有接口都走代理
(4)从结果中导出:多个api存在依赖关系时,通过excract()导出接口的response取出结果值。传递给后面的api请求添加断言
基础断言:
(1)常规断言assertXXX
(1.1)extract导出到response
(1.2)从response中取数据进行单独的assertEuqal断言
(1.3)Hamcrest断言assertThat:assertThat(x, is(3))
(2)restassured断言 then().xxx
(2.1)body断言: XmlPath、JsonPath(非标准)、HtmlPath
(2.2)结合Hamcrest断言的matcher
body断言:
GPath shopping.category.item[0].name store.book[-1].category
shopping.category.item.size()
**.find { it.name == 'Chocolate' }.price
调试
.log().all()
- 测试用例基本管理
suite体系
class = suite
method = testcase
执行顺序
❖同一suite下的用例执行是有顺序的
❖@FixMethodOrder(MethodSorters.NAME_ASCENDING)
❖@beforeClass @afterClass
❖@before @after
BaseSuite: 所有用例都默认继承, 提供默认的初始化
产品线Suite: 产品线定制class与method的执行顺序控制
❖@BeforeClass setUpClass
❖@Before setUp
❖@Test test1()
❖@After tearDown
❖@Before setUp
❖@Test test2()
❖@After tearDown
❖@AfterClass tearDownClass测试用例分组
数据驱动
五、接口测试的运行维护
- jenkins执行测试用例
mvn 命令运行case
mvn test -Dtest=类名(测试集)
//运行制定测试集下的case
mvn test
//运行src/test下类名带有Test的所有case`搭建自己的jenkins
容器技术docker入门
Jenkins基础
使用docker搭建Jenkins:docker run -p 8080:8080 -p 50000:50000 jenkins
,使用127.0.0.1:8080可以访问git上创建项目
服务器上的 Git - 生成 SSH 公钥
将公钥复制到github上setting-SSH key
github上新建一个仓库RestAssuredDemo,将要跑的case同步:
echo "# RestAssuredDemo" >> README.md
git init
git add README.md
git add src/
git commit -m "first commit"
git remote add origin https://github.com/leitianxiao/RestAssuredDemo.git
git push -u origin master
- jenkins创建job
源码管理使用git插件,填入github项目地址
构建选项-执行shell:
ls
which java
which mvn
mvn test //运行case
- result展示
构建后的操作:Publish JUint test result reports
测试报告:target/*/.xml
六、接口的监控分析
七、练习
- 用nc或talent手动发送http协议包,模拟访问baidu的/index.html,了解http协议过程
- 用charles在Android上抓雪球app的包
- 对json\xml断言
- 上个接口的响应中的某个参数用在下个接口中