Postman使用实际值和相同请求的预期错误参数化测试

Postman使用实际值和相同请求的预期错误参数化测试,postman,parametrized-testing,Postman,Parametrized Testing,我有很多测试用例,相同的端点,不同的实际值,不同的预期错误消息。 我想创建发送特定值的参数化请求,并在所有情况下检查列表中的特定错误消息。 请求机构: { "username": "{{username}}", "password": "{{password}}", ... } 答复: { "error_message": "{{error_message}}", &qu

我有很多测试用例,相同的端点,不同的实际值,不同的预期错误消息。 我想创建发送特定值的参数化请求,并在所有情况下检查列表中的特定错误消息。 请求机构:

{
"username": "{{username}}",
"password": "{{password}}",
 ...

}
答复:

{
"error_message": "{{error_message}}",
"error_code": "{{error_code}}"
}
由于不同情况而导致的错误消息更改:

  • 丢失的用户名
  • 密码丢失
  • 密码或用户名不正确
  • 现在,我对每个案件都有单独的要求。 问题:

    有没有办法让一个请求具有一组不同的值,正在检查 特定错误消息/代码

    创建csv: 现在将其用作collection runner或newman中的数据文件

    变量名与列名相同,并且对于每个迭代,您将有相应的行-列值作为变量值。例如,对于迭代1,用户名将是username1

    。正如danny提到的,postman有一个非常丰富的文档,您可以利用它


    添加关于如何运行由同一请求驱动的数据的另一个答案:

    创建名为“csv”的环境变量,复制以下内容并将其粘贴为值:

    username,password,error_message,error_code
    username1,password1,errormessage1,errorcode1
    username1,password1,errormessage1,errorcode1
    

    现在在pr请求中添加:

    if (!pm.variables.get("index")) {
    
        const parse = require('csv-parse/lib/sync')
        //Environmental variable where we copy-pasted the csv content
        const input = pm.environment.get("csv");
        const records = parse(input, {
            columns: true,
            skip_empty_lines: true
        })
    
        pm.variables.set("index", 0)
        pm.variables.set("records", records)
    }
    
    records = pm.variables.get("records")
    index = pm.variables.get("index")
    if (index !== records.length) {
        for (let i of Object.entries(records[index])) {
            pm.variables.set(i[0], i[1])
        }
        pm.variables.set("index", ++index)
        pm.variables.get("index")===records.length?null:postman.setNextRequest(pm.info.requestName)
    }
    
    现在,您可以为该特定请求运行数据驱动:

    Eg收集:

    使用与环境变量内容相同的数据,现在使用collection runner或newman运行集合

    输出


    这就是进行数据驱动测试的方法,使用csv或r json并运行脚本我会让@PDHide留下完整的答案,但这正是他提到的。基本上,创建一个CSV文件,将变量名作为标题,并在标题下的新行上创建每个测试的值。在收集运行程序中使用该数据文件。@DannyDainton当然,谢谢danny一直在等着知道这是否是ops想要的,因为这是一个直接的用例。正如danny提到的,postman有一个非常丰富的文档,您可以利用它,它看起来非常棒。但是我必须用我的集合和env存储额外的文件。它有机会在测试请求中解决它吗?你能说得更清楚一点吗。我无法理解评论我的意思是,有没有办法在没有其他文件的情况下实现它?只是收集和环境请查看添加的答案如果我需要通过共享工作区在CI中运行我的邮递员收集,而没有机会导出csv文件呢?在本地,当我们重新运行该请求时,似乎可以解决我的问题,是否应在nextRequest前提条件中每次运行行:pm.variables.set(“index”,0)?pm.variable创建一个局部变量,其生命周期为完整集合或newman运行。因此,当您开始运行时,索引值未定义,它设置为0,然后继续递增。运行完成后,所有变量都将被销毁。对于下次再次运行,该值从undefined@Vova查看更新后的答案,即使在最后一次迭代中,它也在设置下一个请求,我添加了一个步骤来检查它的最后一次迭代是否不发送下一个请求
    if (!pm.variables.get("index")) {
    
        const parse = require('csv-parse/lib/sync')
        //Environmental variable where we copy-pasted the csv content
        const input = pm.environment.get("csv");
        const records = parse(input, {
            columns: true,
            skip_empty_lines: true
        })
    
        pm.variables.set("index", 0)
        pm.variables.set("records", records)
    }
    
    records = pm.variables.get("records")
    index = pm.variables.get("index")
    if (index !== records.length) {
        for (let i of Object.entries(records[index])) {
            pm.variables.set(i[0], i[1])
        }
        pm.variables.set("index", ++index)
        pm.variables.get("index")===records.length?null:postman.setNextRequest(pm.info.requestName)
    }