当上海这座金融中心开启了路边摊,这就意味着回归实体经济才是根本,没有烟火气息的城市,就少了很多人口优势带来的活力,就没有办法带动区域化经济的发展;全国各大城市以效仿之,让人们都出来走一走,看一看,吃点小吃,逛会夜市,顺便逛逛各大商超广场,才能显现出庞大的经济链效应,也让人们少在家里躺平一会,少玩会手机,多走几步,还能促进和周边人的关系,一举多得。当然了路边摊不容易,出去吃路边摊也需要钱,所以还是先好好学习,找到工作了,有工资了再去吃吧。
接下来呢,就总结的是(二)接口自动化测试-Postman工具,简单开源免费的工具,都是大家最想用的,无一例外,既然有免费的就先用免费的,节约成本不就是为公司赚钱了吗?
CSDN话题挑战赛第2期
参赛话题:学习笔记
一、Postman简介
1、安装说明
2、功能简介
二、使用Postman发送请求
1、不带参数的GET请求
2、带参数的GET请求
3、带参数的POST请求
4、百度翻译API实战
5、QQ注册接口实战
三、参数化运行
1、什么是参数化
2、集合中运行
四、断言
1、定义
2、内置断言
3、使用断言
五、其他技术
1、脚本
2、环境变量
3、导出脚本
(1)安装
Postman API Platform | Sign Up for Free官网直接下载对应版本安装即可,无需注册
(1)80-20原则(帕累托法则)
软件中80%的缺陷,发现在需求和设计阶段;80%的代码时没有问题的,出bug的代码只占20%;软件的80%功能很少用(QQ和微信的帮助功能);用户使用软件的时候,80%的时间使用20%的核心功能
(2)Web API测试工具:网页调试、发送网页HTTP请求、运行测试用例
(3)模拟HTTP Request:GET、POST、RESTful、PUT、DELETE
(4)发送文件、发送额外的header
(1)在集合中创建一个请求
(2)输入地址和请求方式
(3)发送请求并分析结果
响应区域:
Body:服务器返回的信息主体
Cookies:服务器返回的所有cookies值(用于验证客户端、服务器身份信息)
Headers:服务器返回的响应头信息
Test Results:断言,判断服务器返回的响应信息是否正确
响应的其他信息:Status(状态码)、Time(响应时间)、Size(响应信息大小)
注意:分析接口的响应结果时,必须搞清楚每一个返回值含义及取值范围
(4)请求案例内容的保存
(1)在集合中创建一个请求
(2)输入地址和请求方式
(3)添加参数(Params:KEY参数名-VALUE参数值)
(4)发送请求并分析结果
响应区域:
Body:服务器返回的信息主体
Cookies:服务器返回的所有cookies值(用于验证客户端、服务器身份信息)
Headers:服务器返回的响应头信息
Test Results:断言,判断服务器返回的响应信息是否正确
响应的其他信息:Status(状态码)、Time(响应时间)、Size(响应信息大小)
注意:分析接口的响应结果时,必须搞清楚每一个返回值含义及取值范围
(5)请求案例内容的保存
(1)阅读API文档,获取接口地址、参数
(2)准备参数
(3)在body中添加参数
(4)发送请求并分析JSON结果
(1)先阅读API技术文档,成为技术开发者,获取APPID---2015063000000001
通过API文档,知道接口地址、参数(q、from、to、appid、salt(随机码)、sign(MD5值))appid-你自己登录注册开发者就有、密钥-你自己登录注册开发者就有
(2)准备参数
q-apple、from-zh、to-en、appid-你自己登录注册开发者就有、salt-202002121503、密钥-你自己登录注册开发者就有、sign-7105f811ca9d3835146ed9c44ab46770
q-苹果(%E8%8B%B9%E6%9E%9C参数值中有中文,需要进行URL Encode编码)、from-en、to-zh、appid-你自己登录注册开发者就有、salt-202002121503、密钥-你自己登录注册开发者就有、sign-4584abac71bd98feff3b0675942914cd
(3)将参数添加到postman界面中,点击send
(4)中文翻译为英文得到的结果:
{"error_code": "54001","error_msg": "Invalid Sign"}
{"error_code": "54004","error_msg": "Please recharge"}
分析结果:
1、通过查询百度翻译API文档,可知错误码54001为 签名错误,错误信息为无效签名。
2、通过查询百度翻译API文档,可知错误码54004为账户余额不足,错误信息为请充值。
(1)获取接口地址和参数信息
(2)edge浏览器的开发者模式-网络中,针对特定的请求,查找相关信息
https://ssl.zc.qq.com/cgi-bin/zc/sms_send
(3)分析参数
telphone: 008619591654646
nick: 没什么卵用(%E6%B2%A1%E4%BB%80%E4%B9%88%E5%8D%B5%E7%94%A8)
elevel: 61
fsq_sig: t039_4pwOwq-OmgGsXdqBmt2o6n0822jUmCWBRydiEBTs3n9XTa9VpveW5UjBe
0zyP8XDEMqjgzTXQd8-fpu3e9llFfQrlRXermvBuxxPFHOZ8X1TqEmGcHMZd691Xq-Jcx
rand_str: @6VI(%406VI)
(4)在postman中设定参数:body下设置form-data,写对应的参数值,发送请求
(5)分析响应结果:在没有API文档的情况下,必须询问开发或者自己阅读接口对应的函数(阅读源代码),然后分析程序的返回值
(1)使用变量代替常量的方式
(2)设计参数文件(csv文件(常用)、text文件)
(1)添加runner,设置测试集
(2)配置运行次数和文件读取
(3)Postaman关于参数化运行的方案和机制
以整个请求的集合(目录Collection)为一个主体(参数化运行作用对象是一个集合中的所有请求),需要将特定的请求单独放在一个集合中
以⒉x网站api为例:
https://www.v2ex.com/p/7v9TEc53
参数化对象是用户接口中的id参数
接口地址:https://www.v2ex.com/api/members/show.json
请求方法:GET
参数:id
a.准备参数化文件:csv文件,外部数据文件
b.在postman中创建接口请求
c.使用设置好的变量名代替对应的常量,同时需要双花括号{{}}引起来
d.启动runner,运行整个Collection
e.选择要进行参数化运行的Collection
f.设置运行效果:iterations迭代次数、Delay延迟时间ms(请求之间)、Data选择数据文件(需有参数化变量名)、其他设置(保存响应结果、保存运行中的变量值、运行之后保存cookies值)
g.开启运行脚本,查看和检查运行参数,并将测试结果导出。
结果显示:0成功0失败;原因:未添加断言,无价值测试
对结果进行判断
tests模块:对HTTP响应结果进行断言
(1)插入一个JSON结果判断的断言,返回值是一个单一的字典型数据
(2)插入一个JSON结果判断的断言,返回值是一个组合(多个等级)的字典型数据
(3)pm.test("响应码是200", function () {pm.response.to.have.status(200);});
(1)支持语言
JavaScript(Node.js)
(2)应用场合
断言:tests模块,在接收到HTTP的响应后进行处理和运行
预处理信息:Pre-request script,在HTTP请求发送之前进行数据的处理和运行,可配合参数化进行,通过制定的脚本运行,读取参数文件
控制请求的运行:跳转某个请求,或循环执行某个请求
(3)运行顺序
pre-re、控制、断言
(4)官方文档说明
Writing tests | Postman Learning Center
pm.environment.get("variable_key"); # 获取环境变量
pm.globals.get("variable_key"); # 获取全局变量
pm.variables.get("variable_key"); # 获取变量
pm.collectionVariables.get("variable_key"); # 获取集合变量
pm.environment.set("variable_key", "variable_value"); # 设置环境变量
pm.globals.set("variable_key", "variable_value"); # 设置全局变量
pm.collectionVariables.set("variable_key", "variable_value"); # 设置集合变量
pm.environment.unset("variable_key"); # 清除环境变量
pm.globals.unset("variable_key"); # 清除全局变量
pm.collectionVariables.unset("variable_key"); # 清除集合变量
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
}); # 从测试代码发送请求并记录响应
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
}); # 检查API返回的响应代码是否为200
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
}); # 检查响应正文中是否包含字符串
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
}); # 检查响应正文(JSON数据)中的特定值是否等于100
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
}); # 检查短响应是否与字符串匹配
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
}); # 检查响应标头是否存在
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
}); # 检查响应时间是否在指定范围内
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
}); # 检查API返回的响应代码是否在指定范围内
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
}); # 检查状态代码文本
var jsonObject = xml2Json(responseBody); # 解析XML为JSON对象
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function () {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
}); # 使用微型验证器V4(tv4)执行JSON架构验证
Environment、Globals
code(源代码)
愿你我都能为中华民族的伟大复兴尽一份绵薄力量,让中华文化的根扎根在中国这片绿水青山之上,让新一代中华儿女传承与发扬!!!
---无名之辈
以上内容均是本人自学,当然是有网上公布的内容,如有冒犯,请留言,立即改正,谢谢!
看完要是觉得对自己有用,动一下您那根金色的会一指禅的右手食指,按一下您的鼠标左键,在对应的那个位置点个赞,亦或者在评论区留下您的绝顶好句,亦或者收藏在您的收藏夹里,再走也不迟嘛!您说要不要得!谢谢您的阅读和赞赏!