接口测试学习第二天

1、全局变量

  • 概念:在postman全局生效的变量,全局唯一。
  • 设置:
    • 代码设置:pm.globals.set("glb_age",100)

//示例:

pm.globals.set("glb_age",100)

  • 获取:
    • 代码获取:var 接收值的变量 = pm.globals.get("全局变量名")

//示例:

var ret = pm.globals.get("glb_age")

  • 请求参数获取(postman界面获取):{{全局变量名}}

//示例:

{{glb_age}}

为什么要写接口测试用例?

  • 防止测试点漏测,条例清晰;
  • 方便分配工具,评估工作量和时间;
  • 面试时使用;

2、接口测试的测试点

接口测试学习第二天_第1张图片

2.1功能测试

  • 单接口功能:
    • 手工测试中的单个业务模块,一般对应一个接口。
      • 登录业务----》登录接口
      • 加入购物车业务---》加入购物车接口
      • ......
    • 借助工具、代码绕开前端界面,组织接口所需要的的数据,展开接口测试。
  • 业务场景功能:
    • 按照用户实际使用场景,梳理接口业务场景。
    • 组织业务场景时,一般只需做正向测试即可(与手工一致)
    • 一般建议用最少的用例覆盖最多的业务场景
      • 登录----搜索商品---加入购物车----下单----支付----评价

3、接口测试与手工测试不同点

1、手工测试,测写入到输入框中的数据是否正确。接口测试测参数 对应的参数值是否正确;

2、接口测试,不单单针对参数值进行,还可以针对参数本身进行测试;

  • 正向参数:
    • 必选参数:所有的必选必填都包含;
    • 组合参数:所有的必选+任意一个或多个可选参数;
    • 全部参数:所有的必选+所有的可选参数
  • 反向参数:
    • 多参:多出一个或多个必选参数(可以任意指定)
    • 少参:缺少一个或多个必选参数;
    • 无参:没有必选参数;
    • 错误参数:参数名输入错误;

4、单接口测试用例

手工测试用例文档8大要素:

  • 编号、用例名称(标题)、模块、优先级、预置条件、测试数据、操作步骤、预期结果

接口测试用例文档要素:

  • 编号、用例名称(标题)、模块、优先级、预置条件、请求方法、URL、请求头、请求体(请求数据)、预期结果

分析接口文档以登录接口为例

接口测试学习第二天_第2张图片

 登录模块的测试点:

  • 正向:
    • 登录成功
  • 反向:
    • 用户名为空
    • 用户名包含特殊字符、字母
    • 用户名超过11位(12位)
    • 用户名不足11位(10位)
    • 用户名未注册
    • 密码为空
    • 密码包含特殊字符、字母
    • 密码为1位
    • 密码为100位
    • 密码错误
  • 参数(接口测试特有)
    • 正向
      • 必选参数:正确用户名+正确密码
      • 可选参数:忽略
      • 全部参数:正确用户名+正确密码
    • 反向
      • 多参:多abc:“123”
      • 少参:没有用户名,正确密码
      • 无参:没有任何参数
      • 错误参数(手机号参数名错误):abc:13333333333,password:"123456"

5、导出和导入测试计划

        导出测试计划:选中--》三点选中export;

        导入测试计划:选中---》import;

6、postman断言

postman断言简介

  • postman断言借助javaScript - js语言编写代码,自动判断预期结果与实际结果是否一致。
  • 断言代码写在Tests的标签中。

常用断言

(1)、断言响应状态码

//断言响应状态码
pm.test("Status code is 200", function () {
    //postman的响应结果中应该包含状态码200,200是预期结果
    pm.response.to.have.status(200);
});
  • pm是postman下的一个实例;
  • test()是Pm实例中一个方法,有两个参数;
    • 参数1:在断言成功后,给出的文字提示。可以修改。"Status code is 200";
    • 参数2:匿名函数;

接口测试学习第二天_第3张图片

接口测试学习第二天_第4张图片 (2)、断言响应体是否包含某个字符串

//断言响应体是否包含某个字符串
pm.test("Body matches string", function () {
    //pm期望响应文本中包含xxx字符串
    pm.expect(pm.response.text()).to.include('"success":true');
});

  • pm:postman的一个实例
  • test():postman实例的方法,有两个参数
    • 参数1:断言后显示的文字提示信息,可改;
    • 参数2:匿名函数;

案例:

//断言响应体是否包含某个字符串
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include('"success":true');
});

(3)、断言响应体是否等于某个字符串(对象)

pm.test("Body is correct", function () {
    //意思是,pm的响应中应该有响应体xxx
    pm.response.to.have.body("response_body_string");
});

(4)、断言json数据

接口测试学习第二天_第5张图片

pm.test("Your test name", function () {
    //var jsonData 用js语法定义一个变量,jsonData就是变量名
    //pm.response.json():代表响应的json结果
    //举例:response.json()
    /*    
    {
    "code": 200,
    ...
    "success": true,
    "traceId": "598a67c79346b0617b6d77f1efb46fe0"
    }
    
    */
    var jsonData = pm.response.json();
    //pm预期json结果key对应的值等于xxx
    pm.expect(jsonData.value).to.eql(100);
});

 举例:

//断言json数据
pm.globals.unset("variable_key");
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.success).to.eql(true);
});
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data.userBizInfoEntity.baseUserId).to.eql(310000001746);

});

(5)、断言响应头

接口测试学习第二天_第6张图片

pm.test("Content-Type is present", function () {
    
    pm.response.to.have.header("Content-Type","application/json");
});

7、全局变量与环境变量 

7.1 概念

  • 全局变量:全局变量是全局唯一的,不可重复定义的变量;
  • 环境变量:
    • 一个变量只能属于某个环境,在某一个环境中变量不可重复定义
    • 在环境与环境之间可以定义重复的变量
    • 一个环境可以包含多个环境变量
    • 常见环境分类:开发环境,测试环境,生产环境;

7.2 设置变量

  • 全局变量
    • 手动设置
    • 代码设置:pm.globals.set("var_name",value)
  • 环境变量
    • 手动设置
    • 代码设置:pm.environment.set(:var_name",value)

7.3 获取变量值

  • 全局变量
    • 请求参数中获取:{{var_name}}
    • 代码中获取:var value = pm.globals.get("var_name")

案例

调用百度首页接口,传时间戳给服务器

实现步骤:

1.在Pre-request Script 标签页中,添加代码,拿到时间戳,写入全局变量

//拿到时间戳

var time = new Date().getTime()

//将时间戳设置到全局变量

pm.globals.set("glb_time",time)

2. 保存,点击send按钮,发送请求。请求发送前执行上述代码。写入全局变量

3. 查看写入的变量

接口测试学习第二天_第7张图片

4. 书写URL地址,在请求参数界面中,使用全局变量。{{全局变量名}}

接口测试学习第二天_第8张图片

 5. 在postman的控制台,查看发送的http请求;

 接口测试学习第二天_第9张图片

8、postman的关联

介绍:应用于多个http请求之间,有数据关联,或依赖关系时。 

实现步骤

A接口依赖B接口的数据

1、向B接口发送http请求,获取数据。

2、将数据设置至全局变量(环境变量)中。

3、A接口获取全局变量(环境变量)中数据值,进行使用。

案例

请求 获取天气接口,提取响应结果中的城市,将城市名,给百度搜索接口使用。

接口测试学习第二天_第10张图片

 接口测试学习第二天_第11张图片

9、批量执行测试用例

9.1 postman 测试报告

  • 安装newman
  • 使用newman生成测试报告

9.2 批量执行测试用例

选中模块点击run,批量执行

接口测试学习第二天_第12张图片

接口测试学习第二天_第13张图片

9.3 newman 生成测试报告

  • 批量执行测试用例集;
  • 导出测试用例集(得到xxx.json的文件);
  • 使用导出的用例集生成测试报告,在终端执行;

9.4 执行测试

使用newman命令,运行导出的测试集脚本,打开cmd输入;

newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export 测试报告名.html

eg:

newman run demo.postman_collection.json -r html

newman run demo.postman_collection.json -r html --reporter-html-export report.html

命令说明

  • run xxx.json: 表示要执行的postman脚本,即导出的测试集数据
  • -e source: 用来指定环境变量文件的路径
  • -d source: 用来指定测试数据文件的路径

注意:

1、如果添加 -r html就报错! 说明 newman -reporter-html 安装失败!

2、批量导出的测试用例放在一个文件夹里,然后在该文件夹内输入cmd,执行生成测试报告的命令;

接口测试学习第二天_第14张图片

你可能感兴趣的:(接口测试,学习)