zoukankan      html  css  js  c++  java
  • Postman使用

    postman模拟发送get请求

    1.选择请求类型

    2.输入请求URL

    3.点击Send发送

    postman模拟请求头:

    http://www.baidu.com/s?wd=新梦想软测

    1.该请求在页面上可进行根据最后关键字参数进行搜索;

    2.但是由于是postman模拟请求时,传递给服务器的User-Agent是postman,会导致服务器拒绝请求,可以利用postman添加头部信息的做法成功请求

    1.这些信息可以使用抓包工具或谷歌浏览器F12进行获取

    带json的post请求

    postman中post数据类型说明:

    1.none:表示不传递数据

    2.form-data:http请求中的multipart/form-data,它会将表单的数据出处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

    3.x-www-form-urlencoded:application/x-www-from-urlencoded,会将表单内的数据转换为键值对

    4.raw:可以上传任意格式的文本,可以上传text、json、xml、html等

    5.binary:Content-Type:application/octet-stream,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

    实际中可以通过:接口设计文档数据说明或fiddler工具中Content-Type类型来确定需要输入的数据类型

    postman界面想查看响应信息:

    Body有三种视图:

    Prettry:将JSON或XML响应格式化,使他们更容易被查看。Pretty模式中的链接被高亮显示,点击他们可以在Postman中加载一个使用该URL的GET请求

    Raw:视图知识一个显示了相应的body的大文本区域,它可以帮助你判断你的响应是不是被压缩的。

    Preview:选项卡在内联沙箱框架中呈现响应。一些web框架默认返回HTML错误,这时,Preview模式就非常有用了。由于内联沙箱框架的限制,JavaScript和图像在内联框架中是被禁用的。如果你的API端点返回一个图像,Postman会自动检测并呈现他。

     Postman设置断言:

    学习:https://www.cnblogs.com/dream66/p/12692072.html

    语法一:tests['测试用例名称'] = 表达式;

    语法二:Chai.js断言库,可以通过右侧页签点击生成代码

    老式写法:学习https://www.cnblogs.com/dream66/p/12692072.html

    // tests['testcase01 这是一个测试用例'] = true;
    // tests['testcase02 这是一个测试用例'] = 1+1 ===2; //javascripts 定义变量var
    // tests['testcase03 这是一个测试用例'] = 'hello'.has('h')  //hello 是否包含h
    
    // 旧版本取响应状态码
    var code = responseCode.code;
    // tests[code] = true;
    
    // 新版本
    var code1 = pm.response.code;
    // tests[code1] = true;
    
    tests['case_demo_01: 验证响应状态是否为200'] = code1 === 200;
    
    //老版本获取响应状态码
    var info  = responseCode.name;
    //新版本
    var info1 = pm.response.status;
    tests[info1] = true;
    
    //老版本获取响应时间
    var time = responseTime;
    tests[time] = true;
    tests['case_demo_002:验证响应是否在50--500ms以内返回'] = time>=50 && time<=500;
    
    var time1 = pm.response.responseTime;
    tests['new:'+time1] = true

    // 老版本获取响应头
    var value = postman.getResponseHeader('Content-Type');
    tests[value] = true;

    var v1 = pm.response.headers; //需要正则表达式
    tests[v1] = true;

    // 老版本获取响应正文
    var body_info = responseBody
    //tests[body_info] = true;

    tests['case_demo_003:验证响应正文是否包含 新梦想IT教育'] = body_info.has('新梦想IT教育')

    // 新版本获取响应正文
    var b1 = pm.response.text();
    tests[b1] = true

    正则表达式

    str1 = "1234567890abcdef"
    str2 = str1.match(new RegExp('1234567(.+?)def'))[1];
    tests[str2] = true;
    // . 匹配一个字符 +表示匹配前面的子表达式1次或多次   ?懒惰字符:首次遇到右边界就停止匹配

    响应正文为json时,可以利用postman进行解析再获取部分相应正文

    // var token = responseBody.match(new RegExp('"access_token":"(.+?)"'))[1];
    // tests[token] = true
    
    //旧版本
    var jsondata = JSON.parse(responseBody);
    var token = jsondata.access_token; //你想要的值得键
    // tests[token] = true
    
    //新版本
    var jd = pm.response.json();
    tests[jd.access_token] = true

    更复杂的需要用到www.bejson.com

    // 数组用花括号
    var jd = pm.response.json();
    var v = jd.tags[8].name;
    tests[v] = true;
    
    // 遇到键值对用.
    var v1 = jd.content.identity.resources[5];
    tests[v1] = true
    

     

    新式写法:学习https://www.cnblogs.com/dream66/p/12692072.html

    pm.test("测试用例标题", function () {
        pm.expect(true).to.be.true;    //chai.js断言编写处
    });
    pm.expect(2<5 && 3<6).to.be.true;    //判断是否为true
    pm.expect('everything').to.be.ok;    //判断是否为真值  非空、非0 即为真
    pm.expect('hello').to.equal('hello');    //判断是否相等
    pm.expect({ foo: 'bar' }).to.eql({ foo: 'bar' });    //判断是否深度相等 判断列表字典
    pm.expect('foobar').to.have.string('bar');    //判断是否包含字符串
    pm.expect('foobar').to.match(/^foo/);    //判断是否包含,支持正则表达式  ^表达已什么开头
    ......
    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);    //判断响应状态码是否是200
    });
    
    pm.test("Content-Type is present", function () {
        pm.response.to.have.header("Content-Type");    //判断响应头部信息是否包含Content-Type字段
    });
    

    postman持久化保存:

    1.点击左侧导航栏Collections页签,点击+New Collection创建(可以当成项目)

    2.新增后,点击Collection中的‘...’,然后点击'Add Folder',新建一个文件夹(可以当成模块)

    3.点击右侧Save按钮,在弹出的对话框中选择刚新建立的模块,修改该接口的名称,然后点击save按钮即可。

    postman导入导出接口项目:

    分享接口项目:

    • 点击Collection中的‘...’>点击Share Collection

    导出接口项目:

    • 点击Collection中的‘...’>点击Export

    导出Environment(环境)

    • 每个Environment中有对应的Download

    postman环境变量、全局变量设置:

    postman设置环境变量:

    1.点击右上角设置图标(Manage Environment),点击add

    2.然后在需要使用环境变量的地方使用{{环境变量名称}}替换静态的固定值

    3.设置好后,在左上角的下拉框(No Environment)可以下拉切换环境变量

    post设置全局变量:

    1.点击右上角设置图标(Manage Environment),点击Globals;

    2.添加全局变量后,点击Add

    3.然后在需要使用环境变量的地方使用{{全局变量名称}}替换静态的固态值

    Runner的使用:

    操作步骤:

    1.点击Runner;

    2.左侧选择要批量执行的Collections;

    3.右侧选择接口和调整要执行的接口顺序

    4.点击执行

    接口进阶使用:

    postman设置接口关联

    1.利用postman获取上一个接口指定的返回值

    2.使用postman全局变量保存上一个接口的值

    3.在使用相关全局变量的地方使用{{全局变量名称}}即可,具体代码如下

    // 获取接口指定的返回值
    var jsondata = JSON.parse(responseBody);
    var token_value = jsondata.access_token;
    // 使用全局变量保存上一个接口得值
    // postman.setGlobalVariable('全局变量名',str)// 旧
    pm.globals.set("token_id", token_value);  //新
    
    // 在接口中使用{{token_id}},注:这段不是写在代码里,写在调用的接口URL上
    https://api.weixin.qq.com/cgi-bin/tags/create?access_token={{token_id}}
    

    postman参数化(数据驱动)

    1.自带3个内置变量

    • {{$guid}}:随机生成GUID的值
    • {{$timestamp}}:当前时间戳
    • {{$randomInt}}:随机1~1000的整数

      缺点:内建变量不能进行精确的对比

    2.Pre_request_script写脚本: 

    2.1Pre_request_script:请求前要准备执行的脚本

    2.2Pre_request_script与test一样,支持java scripts语法;

    //Pre_request_script脚本中写
    //
    生成时间戳 var now_time = Date.now(); pm.globals.set("now_time", now_time) //生成Guid const guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' .replace(/x/g, () => (Math.floor(Math.random() * 16)).toString(16)) .replace(/y/g, () => (Math.floor(Math.random() * 4 + 8)).toString(16)); pm.globals.set("guid_value", guid) //生成随机整数 const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; pm.globals.set('random_number', randomInt(8,14)) //从列表中随机选择 const getRandomValue = list => list[randomInt(0, list.length - 1)]; const charsInName = ['王','李','张']; pm.globals.set('people_name', getRandomValue(charsInName)) //随机手机号 var mobile_num = `18${randomInt(100000000, 999999999)}`; pm.globals.set("mobile_num", mobile_num) //同步等待实现: const sleep = (milliseconds) => { const start = Date.now(); while (Date.now() <= start + milliseconds) {} }; sleep(10000)
    //test断言中写
    var
    title = responseBody.match(new RegExp('<title>(.+?)</title>'))[1]; excepted_result = pm.globals.get("mobile_num") + '_百度搜索'; tests['case01 验证title是否正确1'] = title === excepted_result;

    3.csv文件json格式文件实现参数化

    csv文件:第一行必须是在request中要使用的变量名,每一行是一条用例,并表示依次迭代

    json文件需要确保文件有键/值对数组。数组中的每个元素是键值对对象,代表一次迭代。key作为request中要使用的变量名,value作为key的取值。

    外部文件方式实现参数化:

    1.准备要使用的测试数据文件;

    2.在Postman脚本中,HTTP requests中使用{{key}}去引用,在tests script中使用data.key或者data["key"]去引用

    3.打开Runner窗口,点击Data旁边的Select File按钮,导入参数化文件;

    4.点击Data File Type类型后,点击Preview按钮,检查数据是否正确,如果不正确,调整数据格式或编码;

    5.设置迭代次数,每次迭代都将使用你的数据文件中的一行,如果迭代次数超过数据文件中的行数,将重复使用最后一行数据;

    // csv文件格式
    search_word,excepted_result
    selenium,selenium_百度搜索
    天天向上,天天向上_百度搜索
    12306,12306_百度搜索
    // json文件格式
    [
        {"search_word":"selenium","excepted_result":"selenium_百度搜索"},
        {"search_word":"天天向上","excepted_result":"天天向上_百度搜索"},
        {"search_word":"12306","excepted_result":"12306_百度搜索"},       
    ]
    // 请求url使用{{key}}
    https://www.baidu.com/s?wd={{search_word}}
    // 断言处使用data["excepted_result"]或data.excepted_result
    var title = responseBody.match(new RegExp('<title>(.+?)</title>'))[1];
    tests['case01 验证title是否正确'] = title === data["excepted_result"]; //data.excepted_result

    postman函数

    1.返回元素是否与预期值一致

    var title = pm.response.text().match(new RegExp('<title>(.+?)</title>'))[1]
    tests[title] = true;
    // 二次封装
    var assertEqual=(name,actual,expected)=>{tests[`${name}:实际结果:${actual},期望结果:${expected}`]=actual===expected;};
    // 使用方法
    assertEqual('case01_验证title是否正确',title,'新梦想IT教育_软件测试培训_Java培训_Python培训_长沙良心IT教育')

    2.返回元素是否与预期值不一致

    var assertNotEqual=(name,actual,expected)=>{tests[`${name}:实际结果:${actual} , 期望结果:${expected}`]=actual!==expected;};

    postman定义公共函数

    • eval():将字符串转换为代码

      通过eval()函数,可完成公共函数的编写:

      1.把定义好的函数作为字符串存放在变量中;

      2.把上一个定义的变量设置到全局变量中;

      3.在需要使用函数的地方,使用eval(pm.globlas('common_function'))把全局变量中的值转换成代码进行使用。

      备注:只能使用var定义的函数,不能使用const;

    // 使用方法;common_function是在全局变量名,里面存放了返回元素是否与预期值一致的方法;
    eval(pm.globals.get('common_function'))
    var title = pm.response.text().match(new RegExp('<title>(.+?)</title>'))[1];
    assertEqual('case01 验证网站title是否正确',title,'新梦想IT教育_软件测试培训_Java培训_Python培训_长沙良心IT教育')
  • 相关阅读:
    济南学习 Day2 T1 am
    济南学习 Day1 T2 pm
    济南学习 Day1 T3 am
    济南学习 Day 1 T2 am
    洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚
    2016.10.30 济南学习 Day2 下午 T1
    餐厅随笔----2016.10.30 于济南 外出学习
    bzoj1671 [Usaco2005 Dec]Knights of Ni 骑士
    bzoj1088 [SCOI2005]扫雷Mine
    bzoj1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店
  • 原文地址:https://www.cnblogs.com/ClownAlin/p/12920232.html
Copyright © 2011-2022 走看看