接口笔记,day01
功能测试:手工测试、UI测试 业务+技术 前端 后端 C/S Client --网络--Server B/S Browser --网络--Server 接口测试:Interface Testing 相对于界面UI测试、单元Unit测试,属于基于服务层Service测试; http://www.baidu.com/s?word=%E5%8C%97%E4%BA%AC%E5%A4%A9%E6%B0%94&tn=50000167_hao_pg&ie=utf-8 http://www.baidu.com/s?word=北京天气&tn=50000167_hao_pg&ie=utf-8 协议:Protocol 网络通信的规则、规范、标准 比如:HTTP 超文本传输协议 FTP 文件传输协议 TCP 传输控制协议 C:\Users\zhang\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 一、教学环境准备 https://www.postman.com/ Download the App 下载 https://www.postman.com/downloads/ 1、Postman: 接口测试工具、接口自动化工具 需要注册 右上角 Sign in 进行登录 点击 Create Account 注册 填入邮箱或用户名、密码 需要注册,否则有一些功能限制,比如工作区无法使用 2、Fiddler:Web调试代理工具(抓包工具、包的分析、调试报文)属于接口测试的辅助调试工具 以上两个软件是有冲突的,都是以代理方式工作。 检查一下工具环境 比如Fiddler4 版本不一定越新越好,比如不够稳定 每次启动时有Update 升级声明,平时点击No,不需要升级 无需注册,即可使用 如果安装Fiddler时提示无法安装,需要先安装.Net插件; 打开Google浏览器,尝试是否可以使用: https://www.baidu.com 访问过程中,查看到列表,就是上网的信息包,重点在于分析 3、被测系统 目前使用免费的第三方的系统:聚合数据 www.juhe.cn 需要注册、登录、认证(个人认证,上传身份证正反面照片 需要审核,需要等待一两天) 注意:一个账号只能申请一个免费接口,练习时接口需要申请才可访问。 申请比较快,认证稍慢些 二、接口测试招聘需求 1、自动化:功能自动化 QTP Selenium 性能自动化 LoadRunner JMeter 接口自动化 Postman Fiddler JMeter... 手机自动化 adb monkey monkeyrunner Appium ... 2、分层的手工测试: 黑盒测试、白盒测试、灰盒测试 1)黑盒测试:一般也称为功能测试,把测试的程序看作是一个黑盒子,在程序界面输入数据,进行操作,检查程序是否按照需求规格说明书的规定正常实现。 投入产出比 较低,就是编写用例发现的缺陷不是很多; 2)白盒测试:又称为结构测试,在单元测试阶段完成,对代码要求较高 通过检查代码来发现程序的错误,需要测试人员掌握被测系统所用的编程语言,熟悉程序结构和处理过程,所以一般由程序员自己来做,在单元测试阶段应用较多。 目前需求量较小:航空航天、医疗、银行等 比如神州6号飞船控制系统代码120万行,测试代码写了150万行 Win7操作系统5000万行,Linux系统2000万行 白盒测试精确度非常高,发现bug的修复成本非常低 让测试人员进行白盒测试,难以推广,要求很高。 3)灰盒测试:结合了白盒测试和黑盒测试的要素,是介于白盒测试与黑盒测试之间的测试。灰盒测试像黑盒测试那样,检查输出结果对于输入的数据
是否正确;同时也像白盒测试那样,检查程序的代码,但这种检查不像白盒测试那样详细、完整,一般只对程序模块之间的调用、核心代码进行检查,
在集成测试时经常采用,一般也是程序员大量采用。 在集成测试时,采用,取一个折中的办法 三、接口测试基础 1、测试金字塔模型 基本观点:应该有更多低级别的单元测试,而不仅仅是通过用户界面运行高层端到端的测试。 整个测试分为三层: UI Service Unit 1)UI层(User Interface 用户界面) 在用户界面上进行操作完成测试--黑盒测试(功能测试) 2)Server层:服务层测试 主要在集成测试阶段,测试模块间的调用关系 (一个模块给另一个模块提供调用,就说提供服务) -- 主要测试代码之间的调用关系,也是接口测试的核心 3)Unit层:单元层,主要在单元测试阶段,使用白盒和黑盒的方法,测试某个模块的功能是否正确。 金字塔测试模型认为:UI层的测试效率低,发现Bug的能力弱,投入与产出比低(事倍功半),应该逐步减少采用;而更多采用Server层和Unit层的测试
(更多的代码级测试) 基本理念:1.越底层,越稳定 2.越底层,越高效 3.越底层,越低成本 4.越底层,越难实施 代码级测试特点: 精准度高、发现Bug能力强,发现Bug后解决的成本低 要求会代码,测试的人力成本、时间成本比较高--目前很难推广 世界范围的难题,目前还是大部分靠开发完成 -- 所以目前采用折中的办法——接口测试 UI层自动化测试: 功能自动化测试:使用Selenium、QTP等自动化工具对系统进行测试,主要通过模拟用户在界面的操作完成测试。 ... 2、分层的自动化测试 基本观点:每一层都应该开展自动化测试 1)UI层:QTP、Selenium 功能自动化测试工具 主要应用在回归测试、大数据量测试,代替测试员的重复手工测试; 缺点:投入产出比低,发现Bug能力弱 2)Unit层: Java测试:JUnit、JTest Python测试:Unittest 自带的白盒测试工具 C/C++测试:C/C++ Test 使用工具测试代码的正确性和语法正确性、规范性 缺点:难度太大,找不到合适的人员,成本高; 3)Service层:接口自动化测试 测试模块间的集成示范正确: 接口测试就是测试模块间的调用关系的正确性。 目前主要指Web接口测试,主要测试网页和后台服务器之间的数据传递的正确性。 接口测试产生的背景: (Web前端技术:HTML5、CSS3、JavaScript) Web页面做得越来越复杂,交互数据越来越多,在前端页面和后台服务器之间有大量数据传递(函数调用),为了降低前端工程师和后台程序员的难度
,前端和后端采用“接口”来传递数据。接口测试主要考察传递的数据是否正确。 Web规范:构建基于B/S架构程序的一套行业规范 1)Web前端技术:HTML5、CSS3、JavaScript -- 越来越炫酷、丰富、用户体验好 前端开发工程师 2)Web后端:Web服务器、应用服务器、数据库服务器、缓存服务器... 技术:以Java为例 JavaSE 标准版、JavaEE 企业级开发版本 JDBC:对数据库访问的规范 Servlet、JSP等Web规范 大数据、缓存... -- 越来越稳定、高效、大数据、集群、分布式.. 3)Web接口将前后端连接:表达客户端的请求,也能表达服务器的反馈,使用特殊文本,比如JSON、XML进行信息传递;目前主流的接口--Web接口 逻辑:要符合某种前提,根据前提完成后续流程,称为是一种逻辑; Web开发的经典模型:MVC架构模型 1)Model: 模型层 业务逻辑 满足业务功能主要程序,对后台数据库进行访问 2)View: 视图层 显示逻辑 满足用户不同的显示效果,提供更加丰富的界面 3)Controller: 控制器层 控制逻辑 在V和M之间进行调度,指派某个M完成业务逻辑,将结果交给某个V显示界面效果; 需求:用户登录 界面 Username: Tom Password: 123 Login 提交登录表单,向服务器发送请求 API:应用编程接口,可以理解为大量可用重用的功能、服务、函数... 写程序离不开API,是对已有大量功能调用、重组而成; 3、接口测试的概念 1)日常生活中的接口 通过接口连接,将传输的内容将一处传送到另一处。 2)程序的接口 API Application Programming Interface 应用编程接口 接口本质上是程序开发的函数或方法,提供参数和返回值 函数的三要素:(C/Java语法) 功能名 加入的数据 返回值类型 函数名(参数表, ...) int add(int a, int b) { return a + b; } 调用时:add(1, 2); 结果为3 add(3, 5); 结果为8 C,C++,JS Java,Python 4、函数:也称为方法 function、method 函数 方法 1)程序由大量的函数调用组成,有些编程语言把函数称作方法; 2)函数就是实现某个功能的代码,写在一个整体中,然后让自己或别人调用;call、invoke 3)函数编写和调用示例: 函数定义: A. 实现两个数相加 1 2 实参 def add(x, y): 形参 变量就是代词,指代所用的值 z=x+y return z 说明:定义一个加法函数,函数名称叫add,使用x、y接收两个参数,进行加法计算,最后将计算结果返回给调用者; B. 实现减法函数 def sub(m, n): t=m-n return t 说明:定义一个减法函数,函数名称叫sub,使用m、n接收两个参数,进行减法计算,最后返回减法计算结果; 把函数理解成一个加工机器,接受一定的参数(被加工的数据),进行处理,处理完以后,把结果返回给调用者; 函数调用: a=10 b=20 sum=add(a,b) 调用加法函数add,同时传递a=10给x,b=20给y res=sub(2000,1000) 调用减法函数,传递参数2000给m,1000给1000 说明:通过函数名称进行函数调用,本质就是要跳转到函数定义的位置去执行,并且把所需参数传递过去,达到重复使用代码,简化开发的目的。 函数核心要点: 函数名称、需要的参数、返回结果、函数实现的功能 函数必须先定义再调用 一个函数定义一次可以被多次调用(重复利用) 5、Web接口测试 现在企业说的接口测试,一般指的是Web接口测试或Http接口测试,主要指的是基于B/S架构的接口测试(B/S架构主要基于HTTP 超文本传输协议,
所以也叫HTTP接口测试) 1)B/S架构使用的协议: HTTP 超文本传输协议 HTTPS 安全版的HTTP协议 2)在客户端(Browser浏览器)和服务器端(Server)之间传输的数据主要包括:HTML(静态网页)、视频、音频、图片、CSS(样式表)、JavaScript等。 6、为什么采用Web接口? 项目分工: 产品经理、需求分析师 开发人员:系统架构师、Web前端工程师、程序员 测试人员 为什么人员使用Web接口? 程序是分层设计的,各层之间有数据传递 表示层 <-> 业务逻辑层 <-> 数据访问层 <-> 数据库 View Controller Model DB 几乎所有管理系统的共性: 对xxx信息的CURD操作:增删查改 Create Update Read Delete 1)程序开发是分层的,一般至少分为3层: A. 界面层:提供程序的界面,要求美观,吸引客户,有美工或前端开发工程师完成; B. 业务逻辑层和数据访问层:完成程序的实际业务处理功能和数据读取、写入等数据操作功能,一般由程序员完成。 在各个层之间有大量的数据传递。 2)随着Web前端技术的兴起,用户交互界面越来越复杂、美观,同时显示的数据越来越多,数据在前端和后端传递难度比较大——解决方案:前端和后端
采用Web接口传递数据; 7、采用Web接口的好处: 各司其职,各尽所能,应用广泛 1)前端专业性越来越高,重点关注显示逻辑; 2)后端由程序员完成,重点关注业务和数据逻辑; 3)Web接口应用广泛,既可满足Web页面调用,也可满足移动App调用,即可提供公司内部系统调用,也可提供给公司外系统调用。 8、什么是Web接口测试? Web接口测试就是测试前端和后端之间的Web接口的正确性。 为什么做Web接口测试? 1)可以更早的介入测试; 2)更好的验证系统的安全性和性能; 3)发现底层的问题。 接口:简称为API,是对大量可复用功能的统称; 如何访问到某接口,对API的访问; Python API: int() str() print() 函数 Mysql函数:sum() avg() max() min() count() C函数: strcmp() 字符串比较 Java方法:System.out.println(); 打印... 共同点:都有函数名(功能名)、参数表(加入计算的数据)、返回结果; Web接口:也有地址URL、参数,响应结果一般JSON格式; 接口测试思路: 1)获取需求 -- 需求规格说明书 2)获取接口文档 -- 开发方在设计阶段编写的 核心依据 3)编写接口测试用例 4)使用工具执行用例 比如:Postman 5)编写接口测试报告 重点分析接口文档的内容: 1)接口名称:通用酒店数据接口 2)子接口: <1> 通用酒店数据接口 <2> 酒店房型 <3> 酒店评论 3)接口简介: 多个酒店平台数据汇总,通过访问该接口可获取详细的酒店数据。从各大酒店平台采集的酒店数据,包含酒店名称,评论数,联系方式以及房型报价等数据
,支持使用经纬度+距离查询,也支持关键词查询,两种方法可以单独使用,亦可以结合使用。 4)请求方式 : 满足 HTTP、HTTPS协议 以GET方式发请求 5)请求URL:统一资源定位 就是“地址” http://api01.idataapi.cn:8000/hotel/idataapi 6)携带的参数: ?apikey=自己API调用凭证&kw=广州 语法:Query String 查询字符串 规则:?参数名=参数值&参数名=参数值&... 目的:URL后携带请求的参数 给服务器 参数名: 含义: 参数值: 是否必填: apikey API调用凭证 查阅文档xxx 是 kw 搜索关键词 广州、上海... 否 lon 经度 113.829 否 lat 维度 23.333 否 distance 距离 5km 否 ... kw: 搜索关键词 比如:广州 请求示例 : URL 通过以下地址访问某接口,发送参数信息 协议名://域名:端口号/应用名/资源名?参数名=参数值&... http://api01.idataapi.cn:8000/hotel/idataapi?apikey=您的apikey&lon=11&lat=22&distance=33&kw=广州 7)接口返回结果:一段封装了酒店结果信息、错误提示信息的JSON文本; Postman的基本使用: 1)安装并注册、登录 注意:登录后才可创建属于自己的工作区 Postman的后台服务会保存之前工作区 2)创建一个工作区 WorkSpace -> Create New 创建新的 名称:TSDxxxx上课案例 说明:针对一些接口进行测试 类型Type: 个人 Personal 3)在工作区中创建一个用例集:Collections -> New Collection 新建集合 名称:通用酒店数据接口测试 描述: 多个酒店平台数据汇总,通过访问该接口可获取详细的酒店数据。从各大酒店平台采集的酒店数据,包含酒店名称,评论数,联系方式以及房型报价等数据,
支持使用经纬度+距离查询,也支持关键词查询,两种方法可以单独使用,亦可以结合使用。 -> Create 创建 4)在用例集下可创建子接口:(子目录) -> Add Folder 新建文件夹、目录 目录名 描述 <1> 通用酒店数据接口 xxxxxx <2> 酒店房型 查看酒店房型信息 <3> 酒店评论 查看酒店评论信息 5)考虑请求的不同协议、方式: 在"通用酒店数据接口"目录下,新建子目录: 目录名 描述 <1> HTTP 针对HTTP协议的请求进行测试 <2> HTTPS 针对HTTPS协议的请求进行测试 6)在HTTP子目录下,新建请求:依据接口文档设计 填写 -> Add Request 思路:一个请求对应一条用例 <1> 请求名称:通用酒店数据-HTTP-GET-001 (用例名称) 接口名-协议-方法-编号 <2> 描述: 基于HTTP请求,以GET方式访问,使用有效数据kw查询,看能否返回正常的结果; -> 添加 <3> 请求方法:GET <4> URL:统一资源定位 请求的地址 http://api01.idataapi.cn:8000/hotel/idataapi <5> Params: 请求的参数 作为查询字符串写的 Query String Key参数名 Value参数值 kw 广州 apikey xxxxxxxx 自己查文档 7)保存请求:Save Ctrl+s 8)发送请求:Send 9)查看返回数据包结果: Status: 200 OK 成功 HTTP响应状态码 Time: 5.68s 请求响应时间 Size: 537.27 KB 响应包大小 重点关注:响应的主体,目前是一段JSON格式文本 { "data": .... } { 消息 没有API key 在请求的头部 或 "message": "No API key found in headers or querystring" 查询字符串中找到 ?apikey=xxx } HTTP响应码:401 Unauthorized 属于客户端错误,和未授权有关 401 - 未授权: 由于凭据无效,访问被拒绝。 { 消息 无效 认证号 "message": "Invalid authentication credentials", "retcode": "100700" 接口设计的状态码 查看接口文档 } 100700 Invalid authentication credentials 授权失败 HTTP响应码:403 Forbidden 访问被禁止 ?kw=广州& apikey=m3s5sF0pghf7HFyrT2O3PuL7Rv 面向对象基本理解: 类: 对一类事物的抽象、看法、概念 属性--数据抽象 有什么? 方法--业务抽象 会什么?行为 对象:类的具体代表、个体、实例 “万物皆对象” 找到某类,创建某对象,通过属性区分不同对象,通过调用方法完成不同业务行为; 其它:面向对象三大特性--封装、继承、多态 JSON和XML的区别? 1)XML:可扩展标记语言 标签可以自定义 HTML:超文本标记语言 是一种特殊的XML 大量标记、标签由Web规范规定的 <html 属性名="属性值"></html> XML文本第一行:声明 <?xml version="1.0" encoding="utf-8"?> <country> 根标记 代表一个国家 <name>中国</name> 子标记 国家名称 ... </country> 普通文本:city:北京,city:上海,.... 内容结构过于简单,无法胜任复杂格式 但是内容更精简 2)JSON:JavaScript对象定位、表示法 介于普通文本和XML文本之间,比普通文本复杂,又比XML格式简单(表达、生成、解析),跨语言(多种开发语言都能读懂JSON)、
跨平台(不同操作系统也支持),常用于表达较为复杂的信息,是一种轻量化的、面向对象思想的文本数据格式; Web前端 ---网络、接口协议--- Web服务器程序 HTML、JS、CSS Java程序 将JSON信息 <--- 查询结果=> JSON 解析并表达到界面中 界面中的信息 封装为JSON文本 ---> 解析并存入数据库中 比如:{}表示一个JSON对象 { "属性名" : 属性值 目前都是字符串 "message": "Invalid authentication credentials", "retcode": "100700" } 9、接口测试核心技术点 1)协议: Web接口主要使用Http、Https协议 2)数据格式(用什么方式存储、传递这些参数) JSON(JavaScript对象表示法) 10、接口测试的主要测试点 1)功能测试 业务流程(业务功能)测试、 参数测试(必填参数、选填参数、参数组合、特殊字符、最大值、最小值) 2)性能测试 响应时间、用户数、吞吐量(每秒处理多少字节) 3)安全性测试 敏感信息加密、核心数据前后端都要验证、防止恶意请求