在创建测试用例之前,请先检查其是否存在-TFS 2018

时间:2019-01-16 15:56:41

标签: api testing tfs automation postman

我正在使用这样的邮递员在TFS 2018中创建一个测试用例:

curl -X POST \
  'https://TFSURL:443/DefaultCollection/PROJECT/_apis/wit/workitems/$Test%20Case?api-version=4.1' \
  -H 'Authorization: Basic MYKEY' \
  -H 'Content-Type: application/json-patch+json' \
  -d '[
    {
        "op": "add",
        "path": "/fields/System.AreaPath",
        "from": null,
        "value": "TEST\\Automation"
    },
    {
        "op": "add",
        "path": "/fields/System.IterationPath",
        "from": null,
        "value": "TEST\\Sprint 8"
    },
    {
        "op": "add",
        "path": "/fields/System.Title",
        "from": null,
        "value": "Sample task"
    },
    { 
        "op": "add", 
        "path": "/fields/Microsoft.VSTS.TCM.Steps",
        "value": "<steps id=\"0\">
        <step id=\"1\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 1</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 1</parameterizedString><description/></step>
        <step id=\"2\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 2</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 2</parameterizedString><description/></step>
        <step id=\"3\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 3</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 3</parameterizedString><description/></step>
        <step id=\"4\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 4</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 4</parameterizedString><description/></step></steps>"
    } 
]'

如何在发送此请求之前检查该测试是否存在,以便我可以更新它而不是每次都创建一个新测试?

我原本希望通过以下方式做到这一点:

  • 搜索自动化名称,该名称在tfs中应该是唯一的(自动化脚本中的方法名称),并查看它是否返回某些内容

似乎在tfs中有一种方法可以请求获取所有工作项,但是我不确定是否可以根据项目的标题字段返回。 (Help page on how to do this request

如果tfs中存在具有该名称的任何内容,我尝试使用搜索api返回结果,但是我收到一条错误消息,我不知道如何解决

  curl -X POST \
      'https://TFSURL:443/DefaultCollection/PROJECT/_apis/search/workitemsearchresults?api-version=4.1-preview' \
  -H 'Authorization: Basic MYKEY' \
  -H 'Content-Type: application/json' \
  -d '[
    {
        "searchText": "Sample task",
        "$skip": 0,
        "$top": 1,
        "filters": {
            "System.AreaPath": [
                "TEST\\Automation"
            ]
        },
        "$orderBy": [
            {
                "field": "system.id",
                "sortOrder": "ASC"
            }
        ],
        "includeFacets": true
    }
]'
'

响应:

{
    "count": 1,
    "value": {
        "Message": "An error has occurred."
    }
}

1 个答案:

答案 0 :(得分:0)

只是回答我自己的问题,以防万一其他人需要它,如我所读,您不能仅凭一个或两个不同的API调用就做到这一点。对于以下解决方案,我向TFS创建了多个REST API请求,并使用Python> 3对其进行了调用/处理。

为了更新一个测试用例(如果不存在)或创建一个新的用例,我做了什么:

  • 在tfs中创建一个返回所有测试用例的查询
  • 使用API​​请求和您创建的查询关键字更新查询(我在请求的正文中专门指定了迭代和小组)(help
  • 创建一个API请求以获取该查询的结果(help
  • 在循环中,我遍历了查询返回的所有测试用例ID
  • 在同一循环中,我使用测试用例ID来访问特定工作项(help)的请求
  • 然后,我将返回的项目的标题与要从自动化脚本(ClassName_MethodName)创建的标题进行了比较
  • 如果那些标题相同,那么我会请求使用我得到的测试ID更新该测试用例,然后从循环中退出
  • 如果标题不同,则创建一个新的测试用例,然后从循环中退出

我知道这不是最快的解决方案,但至少它能起作用! 如果有另一种方法更容易,更快捷,我很乐意遵循。