学习笔记记录
做接口测试,一般测试的接口都非常多,我们需要使用抓包工具来便捷式获取多个接口信息。
常用的是fiddler。有新版本FidderEverywhere,但是要钱。网上也有一些破解版链接,但是链接都失效了,也有大佬分享了破解方法,但是因为没用过我是无从下手,最后就找了fiddler的中文版免费版。
一、测试业务场景
1、登录,修改信息,搜索,选择商品
在操作时,需要一直打开抓包工具。
二、接口测试完成流程
1、获取分析接口的信息
2、设计测试用例
3、postman实现接口请求发包,以及结果断言。
四大要素:url http方法 请求体 请求头(Content-Type)
三、登录鉴权的方式
Cookie与Session token
Http协议是无状态的协议,Cookie与Session用于补充跟踪会话状态。Cookie与Session的工作流程如下图(图片来自于B站的教学视频)。
session相当于前台登记的信息,房间号相当于一个SessionID,房卡是Cookie。
可以在开发者工具的Application里看到,Cookie是由服务端返回给客户端,在客户端本地保存。至于哪一个Cookie是登录状态的Cookie,这是开发决定的。
session是保存在服务端的一次会话。
-
Session用于存储服务器端状态数据,通过session ID识别用户,存放于服务器,安全但占用服务器资源。
-
Cookie存储在客户端,通常存放于cookie中,安全性较低,适合存储非敏感信息。
-
Token是一种无状态的认证方式,适用于分布式系统,具备简洁和自包含优点,一般放在header中明文传输。
首次访问登录接口成功之后,服务端通过返回头的Set-Cookie字段,返回cookie内容,下次请求的时候,带上cookie请求即可。
蓝桥登录测试为例
1、打开fiddler
2、打开蓝桥界面,进行登录操作。
3、关闭捕获,找到登录界面的信息条。
重点关注标记出来的信息。
4、打开postman,创建一个项目,链接,请求
因为本人也是第一次使用postman,所以在这里记录一些创建的步骤,使用postman是需要创建账号的,创建后就可以免费使用,但是一定要记得用户名和密码,因为找回密码的时候邮件是接收不到的。
进入postman后,开始创建项目。
创建成功后就是下面这样的界面。
5、将在fiddler里获取到的信息填入。
cookie可以不填,点击send后,会返回一个set-cookie,在下次请求时postman会自动带上cookie。
postman中,cookie有自己的管理机制,可以自动保存。
四、接口测试报文中的编码
\u 4位16进制数,Unicode编码,可以通过postman里的返回体选择pretty里的json来转换为对应的特殊字符。
% 2位16进制数,url编码格式,可以网上找url在线解码工具
五、搜索获取商品id
使用正则表达式,在postman的Tests里编写。
一般规律:把需要的内容前后复制进来。把要的那部分用(.+?)代替。
//要获取的id的规则
var regex=/<tr data-id="(.+?)">/g;
//<div class="course-cover relative" data-v-b7db37b4><img src="*">" alt="Python 新手入门课"
//
//获取返回结果
var content=pm.response.text();
//在console中输出结果检测
// console.log(content);
// 通过正则在content中搜索需要的alt
var result=regex.exec(content);
console.log(result);
六、环境变量的使用场景
1、有些变量是需要频繁维护的,为了方便修改,可以设置环境变量。
添加一个环境变量,再需要用的时候写{{变量名}}
操作步骤
然后再原先的变量(原先变量名为username)位置更改为{{登录账号用户名}}
2、参数传递
上一个接口得到的结果,在下一个接口中要使用
操作步骤
在接口的texts脚本中完成变量的存储,代码后添加
pm.environment.set("变量名称",result);
点击sends,打开环境变量后就会发现变量自动添加。
在取时依旧使用{{变量名称}}
七、校验结果
也就是断言,一般我们判断接口是否成功都是通过肉眼观察得到,现在需要添加断言来查看结果。
在每个接口的tests文件里选择右侧的Response body:JSON value check,代码自动生成后,将红色框选的部分更改为自己需要使用的。
比如在登录接口中,返回的结果应该是status=1,那么tests里面应该改为:
pm.test("接口登录成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.status).to.eql(1);
});
点击send后,会在Test Result下面看到测试结果
对于一些添加接口,如何进行结果检测?
一般添加成功后,返回的结果都会改变,我们可以通过判断返回结果里是否包含添加的数据来进行断言。
点击右侧的断言列表里的Response body: Contains string
在系统自动生成的代码中进行更改。
前面我们是进行了商品名的设置,现在我们要获取商品名,就要将红框内容进行更改。
pm.test("结果中包含添加的商品名字"+pm.environment.get("商品名"), function () {
pm.expect(content).to.include(pm.environment.get("商品名"));
});
第一个更改:结果运行后会带上获取到需要的结果
第二个更改:直接从content中进行检索
第三个更改:获取结果添加的商品名
在所有流程接口的texts里写完断言后,批量运行,通过run collection
点击运行后,接口就会自动执行。
一趟接口测试操作就完成了。