Lesson1 Postman安装与基本使用
postman工作原理:
Postman下载安装:
发起第一个接口请求:
我们使用的是这个网站给我们提供的一个查询天气的接口。
拿到一个接口以后www.tianqiapi.com,首先要获取一下接口信息,那么就需要去看一下接口文档。
[if !vml]
[endif]
get:http请求方法,后面是跟着的url。
在postman中选择好请求方法,将url粘贴过来。
然后查看参数内容,在参数中,找到必填参数,填写到params中。
填写好之后就可以进行send,返回的信息就是这个接口发送请求给服务器,服务器返回回来的内容。
除了必填的参数,还有一些非必填的参数,也可以有选择性的进行填写。
Lesson2 Get请求实战一接口测试流程
Get与Post区别:
[if !supportLists]1. [endif]Get比Post更不安全,因为参数直接暴露在url上, 所以不能用来传递敏感信息。
[if !supportLists]2. [endif]Get参数通过url传递,Post放在Request Body中。
详解:
3. 场景:连接wlan,需要登录之后才能进行上网,但是认证页面打开非常慢,如果打开页面中的广告再打开认证页面就会变得很快。→get比post要快
[if !supportLists]4. [endif]场景:用货车拉煤,将煤放在货车顶上get;用货车拉煤,将煤放在货车里面post。
但是若运输的是汽油,就不能放在顶上了,只能使用post。→post更安全,并且携带敏感信息。→但是get同样可以将货物放在里面,post同样可以将货物放在上面。
5. get只有一个数据包,post有两个数据包。get是将header和数据一起发过来,post是先发一次header,再发一次数据。
接口测试一般在功能测试之前,开展集成测试的时候就开始了。
拿到接口文档后,就可以针对文档中要验证的内容进行用例设计,调用接口进行验证就可以了。
实例:百度进行ip地址的搜索,输入一个ip地址,点击查询进行查询。
1.获取接口信息:
检查进行抓包,抓到这个请求的url,填入postman进行接口请求。
2.接口测试用例设计:
一般是针对postman中的参数进行用例编写。
更改某个参数或者去掉某个参数,进行send传值。还可以利用这个查询别人的url中哪些参数是必填的。
3.4.通过postman就可以完成。
设置请求头域,根据接口文档填写
接口响应:检查network中的response,和从postman拿到的内容是一样的
验证body内容,检查cookie是否正确。
请求需要关注的:请求方法,url,头域信息(referer表示url的来源信息),请求参数
响应需要关注的:响应码,响应头,响应正文
Lesson3 Get请求实战二头域操作
url地址,http操作方法,请求头域,请求操作
有些接口进行测试时,必须设置头域。
抓到的接口,XHR:XMLRequest
referer头域一般指明这个请求的来源,是从哪来的,加上referer防止倒链,爬虫。
如果填写好了url发送,返回有错误的话,那么可以检查头域是否缺少了需要填的信息。找到接口文档,查看这个接口必填信息有哪些。也可以通过抓包查看头域,尝试看下哪个参数是必填的。
Lesson4 Post请求实战-文件上传与json请求
一般情况下,很多登录请求都是post请求。
post请求除了要填写url,自动生成参数,还需要填写body。
这时需要特别注意请求参数在body中的格式以及headers中的Content-Type中要填写的东西。
X-www-form-urlencoded:
一个登陆接口:
[if !vml]
[endif]
这个登陆接口在“检查”时不会在response中展示返回信息,只会登陆成功,使用postman可以看到返回信息,message使用Unicode转码查看。
form-data:
一个上传文件的接口:
在body的填写中,选择form-data,需要选择file选项,进行本地图片的上传。
Form-data中,file为二进制binary图片格式,其他还有很多别的信息,因为我们在上传图片时,只选择了图片,所以在body的填写中,添加图片名称即可。
如果在body中选择form-data了,那么在headers中content-type,就会默认选择multipart/form-data。
[if !vml]
[endif]
如果选择raw,一般在text选项中和www、或者form-data是一样的。可以进行content-type的编辑,直接按照请求体的格式进行发送。
例子:
申请用友云新发证券查询接口:https://api.yonyoucloud.com/apilink/tempServicePages/b1277b7e-b1e3-445c-818a-cdcd457f298c_true.html
购买之后,就可以利用这个接口进行测试,用友云新发证券查询接口:
接口文档中有headers的设置,和一些参数的设置。参数不是必填的,就可以先不填就进行一次请求,看一下结果是啥。
请求的结果是成功的。
[if !vml]
[endif]
参数的设置是请求体body的内容,所以body中选择x-www,在header中会自动加上content-type为x-www,然后再加上请求参数中的设置。
我们在body中加上一个size参数,将其设置为5,那么发送接口后,只展示五条。
其实在选择x-www时,再加上body,相当于在url后面直接加上了?size=5,但是现在在url中不展示,我们可以手动加上?size=5,再请求一次,看结果是否一致。
https://api.yonyoucloud.com/apis/pte/New_Issue_Bond_Information/New_Issue_Bond_Information?size=5
通过content-type中进行判断,在request headers中,content-type如果是application/json,那么在post请求的body中选择raw-json,将请求体输入其中,发包就可以了。
Lesson5 环境变量与全局变量
进行参数设置,如何对接口返回信息进行校验。
环境变量(add):
设置一组变量,在某一个环境中进行使用。
全局变量(Global):
设置单个变量,可以跨接口使用。
全局变量(Global):
我们在使用天气的api时,输入城市名进行发包,就可以获取到这个城市的天气情况。
现在我们想将其保存为一个接口,不需要每次修改url,只要输入城市,就可以查询。
在city参数中输入{{,会展示几个设置好的随机数,前面带上G,G代表Global,全局变量。可以根据本身的英文来判断意思,比如,guid,randomID,randomPhoneNumber等等。
我们这里需要自己配置的话,就设置一个自己想要的名字,比如这里设置成,{{cityname}},但是此时这个变量还没有进行设置。
我们在这里设置一个全局变量,命名为cityname,默认值就随便设置一个城市,保存好这个全局变量之后,再到postman中查看这个接口的变量时,就可以看到在cityname上有了一个G的标识,代表现在这个变量已经是个全局变量了,进行一次发包,得到的结果就是默认情况下海口的天气。
环境变量(add):
比如在百度查询ip接口设置环境变量,
[if !vml]
[endif]
命好名字后,就能在环境变量中看到自己命名的一组变量。
点击进入,可以添加其他的变量,同时保存在这一组环境变量中。
设置好了环境变量,必须在右上角选择响应对应环境,在输入{{时才可以展示出自己设置好的这组变量,不然就只展示全局变量。
但是如果在右上角选择了环境变量,在输入栏写入全局变量时,取值仍是环境变量,也就是说环境变量的优先级大于全局变量(overdriven)。
小眼睛快读:
Lesson6 测试沙箱与测试断言
发送请求之后,对返回信息进行校验的过程,就是断言,验证返回结果是否符合预期。
Postman测试沙箱其实是结合JS脚本以及自己封装的一些功能,完成测试中的功能,在请求发起前后实现部分测试操作。
Pre-request:
在发起请求之前,
var表示variable,表示用一个变量city来接收从环境变量中得到的这个信息
使用postman自带的控制台console,将变量输出到postman中的控制台上,在控制台上就可以看到这一次请求的请求和返回。
在进行接口测试之前,要选择相应的环境。
使用Tests自动进行接口的断言:
Tests是得到了返回信息之后才进行操作的,一般使用的是send a request之后的这些。
比如:
[if !supportLists]1. [endif]状态码200
可以利用这个模板进行校验,function()就是我们要进行的断言。
[if !supportLists]2. [endif]使用返回体模板,返回体中包含某个string字段
这里的文本中格式必须是raw的格式,没有经过转译的Unicode,例如\ “”等符号,前面去添加\,防止被当成JS中的特殊字符。
[if !supportLists]3. [endif]验证某个字段中是否包含某个文本信息,json文本
需要将jsonData换成我们需要校验的变量,eql换成预期的结果,注意这里要加双引号。
举例:
百度ip查询接口:
[if !supportLists]1. [endif]写tests之前先看一下正确返回的信息,分析一下json的格式
如果要验证status,它是在json第一层级里;
如果验证location,它是在data[]中,并且在[]的第一层级中。
我们校验两个,使用console进行调试:
针对有多层数据的,我们一层一层进行校验,“”+是注释。
如果想其中加上循环,我们也可以书写一个循环加入,但是要调节其中的变量
Lesson7 多接口测试管理-测试集与数据驱动
多接口管理:
点击小三角打开run,或者直接点击runner,就可以运行我们的测试集。
需要注意,如果这个collection的接口是在不同环境中运行的,那么需要将这几个环境中的变量放置在一个环境中,再进行运行。
执行之前需要选择的就是环境(Environment)、次数(Iteration)、每次完成后需要等待多久(Delay)再进行下一次接口请求、是否记录所有请求的日志(Log Responses)。
点击某个接口就可以看到具体日志,请求返回信息等。
我们想利用自己创建的文件去一条一条执行用例,那么
Pm.expect(jsonData.value).to.eql(data.cityname)
这句话的意思是我们期望jsonData.value等于data.cityname。
jsonData是我们返回体json中的数据,用.连接我们想得到的数据,data.cityname是我们数据文件中的数据,用.表示数据文件中具体的某个字段,即用例文件中的变量名称。
postman中,文件导入支持的是json和CSV两种格式,我们将Excel文件转换成CSV文件,再在postman中进行导入。
上传好CSV文件后,先点击preview看下是都是乱码,此时表示文件的编码格式不正确,利用ue将编码格式换成utf-8无bom,就可以看到了。
运行中出错的地方:
[if !supportLists]1. [endif]一定要保证画框的地方写的变量是正确的,并且和我们数据文件中的变量名称保证为完全一样。
[if !supportLists]2. [endif]数据文件一定要是CSV文件,并且首先要预览一下不是乱码
[if !supportLists]3. [endif]必填的参数,如果在用例文件中没有涉及,一定要改成固定的值,不然接口会尝试去调用数据文件中对应变量名称的变量,找不到从而报错。
Lesson8 电商网站cookie操作
通过抓包,抓到登陆查看购物车的接口,我们查看到购物车中有一个“零食大礼包”。
得到一个接口后,首先查看四要素,url地址,请求方式,请求参数,头域。
我们将所有参数填入,此时在头域中不携带cookie,购物车中是没有任何商品的。
[if !vml]
[endif]
[if !vml]
[endif]
这时虽然产生了cookie,但是没有携带信息。
向cookie中添加信息:
[if !supportLists]1. [endif]直接在抓包过程中,抓到登陆时携带的cookie,填入请求头域中
[if !supportLists]2. [endif]手动添加
[if !vml]
[endif]
先将请求的域名填入,再增加cookie,增加cookie的时候一般只要拿到sessionID就可以了,这就要比我们直接在抓包过程中抓到的所有cookie填入要便捷。
断言:注意前后置顺序
[if !vml]
[endif]
[if !vml]
[endif]
[if !vml]
[endif]