0


Postman:Postman高级功能:预请求脚本与测试脚本编写

Postman:Postman高级功能:预请求脚本与测试脚本编写

在这里插入图片描述

预请求脚本基础

预请求脚本的作用与应用场景

预请求脚本允许在发送请求之前执行自定义的JavaScript代码。这在以下场景中特别有用:

  • 动态设置请求参数:根据不同的测试条件或环境动态生成请求参数。
  • 执行API调用:在发送主请求前,先调用另一个API获取必要的数据。
  • 环境变量与全局变量设置:预请求脚本可以设置或更新环境变量和全局变量,用于后续请求或测试中使用。

编写预请求脚本的步骤

  1. 打开Postman:确保你已经安装并打开了Postman应用。
  2. 选择请求类型:在Postman中创建一个新的请求,选择GET、POST或其他HTTP方法。
  3. 启用预请求脚本:在请求的设置中,找到“Pre-request Script”选项卡并启用它。
  4. 编写脚本:在预请求脚本编辑器中,使用JavaScript编写你的脚本。确保脚本逻辑清晰,变量命名规范。

使用pm.sendRequest进行API调用

在预请求脚本中,

pm.sendRequest

函数可以用来调用另一个API。下面是一个示例脚本,它调用一个外部API来获取当前的天气信息,并将结果存储在环境变量中。

// 调用外部API获取天气信息const url ="https://api.openweathermap.org/data/2.5/weather";const params ={q:"New York",appid:"YOUR_API_KEY"};const options ={url: url +'?'+ Object.keys(params).map(key=> key +'='+ params[key]).join('&'),method:"GET"};

pm.sendRequest(options,function(err, res){if(err){
        console.error("Error occurred: "+ err);}else{const weatherData = res.json();// 将天气数据存储在环境变量中
        pm.environment.set("weatherData",JSON.stringify(weatherData));}});

代码解释

  • API调用:使用pm.sendRequest函数,传入请求的URL和方法。
  • 参数设置:通过params对象动态构建查询字符串。
  • 错误处理:检查API调用是否成功,如果失败,输出错误信息。
  • 结果存储:将API返回的天气数据存储为环境变量,以便在后续请求中使用。

设置环境变量与全局变量

预请求脚本中,可以使用

pm.environment.set

pm.globals.set

来设置环境变量和全局变量。下面的示例展示了如何在预请求脚本中设置一个环境变量。

// 设置环境变量
pm.environment.set("exampleVariable","Hello, World!");// 设置全局变量
pm.globals.set("globalVariable","This is a global variable.");

代码解释

  • 环境变量设置pm.environment.set用于设置环境变量,这些变量在当前会话中可用。
  • 全局变量设置pm.globals.set用于设置全局变量,这些变量在所有会话中都可用。

通过预请求脚本,你可以灵活地控制请求的发送前的准备工作,包括动态参数设置、API调用和变量管理,从而提高测试的效率和准确性。

测试脚本进阶

测试脚本的编写与执行

在Postman中,测试脚本允许你自动化测试流程,确保API响应符合预期。这通过

pm.test

函数实现,该函数可以包含各种断言来检查响应数据。

示例代码

// 使用pm.test进行响应状态码的检查
pm.test("Status code is 200",function(){
    pm.response.to.have.status(200);});// 检查响应头
pm.test("Content-Type is application/json",function(){
    pm.response.to.have.header("Content-Type","application/json");});// 检查响应体中特定字段的值
pm.test("Body contains correct userId",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.userId).to.eql(1);});

解释

  • 第一个测试检查响应状态码是否为200。
  • 第二个测试确保响应头的Content-Typeapplication/json
  • 第三个测试验证响应体中userId字段的值是否为1。

断言与响应校验

断言是测试脚本的核心,用于验证API响应的各个方面,如状态码、响应头、响应体等。

示例代码

// 检查响应体中是否存在特定的JSON键
pm.test("Body contains 'name' key",function(){
    pm.response.to.have.jsonBody("name");});// 检查响应体中特定键的值是否匹配正则表达式
pm.test("Body 'email' matches pattern",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.email).to.match(/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/);});

解释

  • 第一个测试确保响应体中包含name键。
  • 第二个测试使用正则表达式来验证email字段的格式是否正确。

使用pm.test进行测试脚本编写

pm.test

函数是Postman测试脚本的主要入口点,用于定义测试用例。

示例代码

// 测试响应时间是否小于200ms
pm.test("Response time is less than 200ms",function(){
    pm.expect(pm.response.responseTime).to.be.below(200);});// 测试响应体中特定键的值是否为true
pm.test("Body 'isActive' is true",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.isActive).to.be.true;});

解释

  • 第一个测试检查响应时间是否低于200毫秒。
  • 第二个测试验证isActive字段的值是否为布尔值true

测试集合与迭代执行

测试集合允许你将多个测试用例组合在一起,以确保API在不同场景下的行为。你可以设置测试集合来迭代执行,以测试API的稳定性和性能。

示例代码

// 创建一个测试集合
pm.test("User details test suite",function(){// 测试状态码
    pm.test("Status code is 200",function(){
        pm.response.to.have.status(200);});// 测试响应头
    pm.test("Content-Type is application/json",function(){
        pm.response.to.have.header("Content-Type","application/json");});// 测试响应体
    pm.test("Body contains correct userId",function(){var jsonData = pm.response.json();
        pm.expect(jsonData.userId).to.eql(1);});});

解释

  • 这个测试集合包含了三个测试用例:状态码检查、响应头检查和响应体中userId字段的值检查。

测试失败时的处理与调试

当测试失败时,Postman会提供详细的错误信息,帮助你定位问题。你也可以在测试脚本中添加日志语句,以更好地理解API的响应。

示例代码

// 在测试失败时记录响应体
pm.test("Body contains correct userId",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.userId).to.eql(1);if(jsonData.userId !==1){
        console.log("Response body: ", jsonData);}});

解释

  • 如果userId字段的值不等于1,脚本将输出响应体的完整内容,帮助调试。

通过上述示例,你可以看到Postman的测试脚本功能如何帮助你自动化API测试,确保API的稳定性和正确性。使用

pm.test

函数和断言,你可以编写复杂的测试用例,检查API响应的各个方面。测试集合则允许你将多个测试用例组合在一起,进行更全面的测试。最后,当测试失败时,通过日志和错误信息,你可以快速定位问题,进行调试和修复。

预请求与测试脚本实战

结合预请求脚本与测试脚本的案例分析

在Postman中,预请求脚本和测试脚本是两个强大的功能,它们可以让你在发送请求前执行一些代码,以及在响应后进行自动化测试。下面,我们将通过一个具体的案例来分析如何结合使用这两个功能。

案例背景

假设我们正在开发一个用户认证系统,需要在每次请求前生成一个基于用户信息的JWT(JSON Web Token)。同时,我们希望在响应后测试JWT是否正确生成,并验证其有效性。

预请求脚本

预请求脚本可以用来生成JWT。我们将使用

pm

对象和

crypto

模块来实现这一功能。

// 预请求脚本
pm.sendRequest({url: pm.environment.get("authUrl"),method:"POST",header:{"Content-Type":"application/json"},body:JSON.stringify({username: pm.environment.get("username"),password: pm.environment.get("password")})},function(err, res){if(!err && res.code ===200){var token = res.json().token;
        pm.environment.set("jwtToken", token);}else{
        console.error("Failed to get JWT token.");}});

测试脚本

测试脚本用于验证JWT是否正确生成,并检查其有效性。

// 测试脚本
pm.test("JWT token is present in response",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.token).to.not.be.null;});

pm.test("JWT token is valid",function(){var jwt =require("jsonwebtoken");var token = pm.environment.get("jwtToken");
    jwt.verify(token, pm.environment.get("secretKey"),function(err, decoded){if(err){
            pm.test.fail("JWT token is invalid.");}else{
            pm.test.pass("JWT token is valid.");}});});

自动化测试流程设计

自动化测试流程设计是确保API稳定性和功能完整性的关键。在Postman中,你可以通过创建测试集合,使用预请求脚本和测试脚本来自动化这一过程。

测试集合设计

  1. 环境设置:定义环境变量,如authUrlusernamepasswordsecretKey
  2. 预请求脚本:在请求前执行,用于生成JWT。
  3. 请求发送:使用生成的JWT进行认证。
  4. 测试脚本:在响应后执行,验证JWT的有效性。

实现步骤

  1. 创建环境:在Postman中创建一个环境,设置必要的变量。
  2. 编写预请求脚本:在请求的“Pre-request Script”部分编写脚本。
  3. 编写测试脚本:在请求的“Tests”部分编写脚本。
  4. 运行测试:通过Postman的Runner或Collection Runner来运行整个测试集合。

错误处理与异常捕获

在预请求脚本和测试脚本中,错误处理和异常捕获是必不可少的,以确保测试的健壮性和准确性。

预请求脚本中的错误处理

// 预请求脚本错误处理
pm.sendRequest({// 请求配置},function(err, res){if(err){
        console.error("Request failed:", err);// 可以在此处添加失败时的处理逻辑}elseif(res.code !==200){
        console.error("Unexpected response code:", res.code);}else{// 成功处理逻辑}});

测试脚本中的异常捕获

// 测试脚本异常捕获
pm.test("JWT token is valid",function(){var jwt =require("jsonwebtoken");var token = pm.environment.get("jwtToken");try{var decoded = jwt.verify(token, pm.environment.get("secretKey"));
        pm.test.pass("JWT token is valid.");}catch(e){
        pm.test.fail("JWT token is invalid.");}});

性能测试与预请求脚本的优化

性能测试是评估API在高负载下表现的重要手段。预请求脚本的优化可以减少请求的准备时间,从而提高性能测试的效率。

优化预请求脚本

  1. 减少网络调用:尽量避免在预请求脚本中进行额外的网络请求,如数据查询或外部API调用。
  2. 缓存结果:如果预请求脚本的结果可以复用,考虑将其缓存到环境变量中,避免重复计算。
  3. 代码优化:使用高效的算法和数据结构,减少不必要的循环和条件判断。

示例:缓存JWT

// 预请求脚本if(!pm.environment.get("jwtToken")){
    pm.sendRequest({// 请求配置},function(err, res){if(!err && res.code ===200){var token = res.json().token;
            pm.environment.set("jwtToken", token);}else{
            console.error("Failed to get JWT token.");}});}

测试报告的生成与分析

Postman允许你生成详细的测试报告,这对于跟踪测试结果和分析API性能至关重要。

生成测试报告

  1. 使用Collection Runner:选择一个测试集合,使用Collection Runner来运行测试,并选择“Export”来生成报告。
  2. Newman工具:Newman是一个Postman的命令行集合运行器,可以用于CI/CD流程中,生成测试报告。

分析测试报告

测试报告通常包含以下信息:

  • 测试结果:每个测试的通过或失败状态。
  • 响应时间:每个请求的响应时间。
  • 错误信息:测试失败时的详细错误信息。

通过分析这些信息,你可以识别API中的性能瓶颈,以及测试中出现的任何问题,从而进行相应的优化和修复。


通过上述案例分析、流程设计、错误处理、性能优化和测试报告的生成与分析,你可以在Postman中有效地使用预请求脚本和测试脚本来自动化API测试,确保API的稳定性和功能完整性。


本文转载自: https://blog.csdn.net/weixin_42749425/article/details/142409110
版权归原作者 kkchenjj 所有, 如有侵权,请联系我们删除。

“Postman:Postman高级功能:预请求脚本与测试脚本编写”的评论:

还没有评论