• 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教育')
  • 相关阅读:
    5-python基础—获取某个目录下的文件列表(适用于任何系统)
    Automated, Self-Service Provisioning of VMs Using HyperForm (Part 1) (使用HyperForm自动配置虚拟机(第1部分)
    CloudStack Support in Apache libcloud(Apache libcloud中对CloudStack支持)
    Deploying MicroProfile-Based Java Apps to Bluemix(将基于MicroProfile的Java应用程序部署到Bluemix)
    Adding Persistent Storage to Red Hat CDK Kit 3.0 (在Red Hat CDK Kit 3.0添加永久性存储)
    Carve Your Laptop Into VMs Using Vagrant(使用Vagran把您笔记本电脑刻录成虚拟机)
    使用Python生成一张用于登陆验证的字符图片
    Jupyter notebook的安装方法
    Ubuntu16.04使用Anaconda5搭建TensorFlow使用环境 图文详细教程
    不同时区的换算
  • 原文地址:https://www.cnblogs.com/ClownAlin/p/12920232.html
Copyright © 2020-2023  润新知