HP QC ALM REST API — проблема с созданием дефекта

Я пытаюсь создать новый дефект. Я должен сделать это с помощью REST API в моем проекте С# ASP.Net. Ниже приведен используемый URL:

qcbin/rest/domains/TESTDOMAIN/projects/TESTPROJECT/defects

Ниже мое тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<Entity Type="defect">
  <Fields>  
    <Field Name="priority">
      <Value>3-High</Value>
    </Field>
    <Field Name="description">
      <Value>test description</Value>
    </Field>
    <Field Name="name">
      <Value>test with rest API</Value>
    </Field>    
    <Field Name="creation-time">
      <Value>2011-08-16 11:34:08</Value>
    </Field>
  </Fields>
</Entity>

Я могу успешно создать дефект, только если я не использую creation-time в XML. Могу ли я узнать, как использовать столбцы, содержащие дефис?

Я написал код на C#. Ниже мой код С#

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(HPALMUrl + "/rest/domains/" + HPALMDomain + "/projects/" + HPALMProject + "/defects/");
request.Method = "POST";
request.Accept = "application/xml";
request.ContentType = "application/xml";
authRequest.KeepAlive = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";
request.CookieContainer = createSessionRequest.CookieContainer; //Authenticated cookie
using (var requestStream = request.GetRequestStream())
{
    requestStream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();

string responseText = string.Empty;
if (response.StatusCode == HttpStatusCode.OK)
    responseText = "Update completed";
else
    responseText = "Error in update";

Я сталкиваюсь с этой проблемой столбца дефиса при обновлении столбца тестовой таблицы. Итак, пожалуйста, дайте мне знать, как использовать дефис, содержащий столбец

Заранее спасибо!


person Karthick Raju    schedule 10.11.2017    source источник
comment
Это не должно быть проблемой, возможно, проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь установить какое-то значение для поля, которое будет автоматически генерироваться ALM при вставке новой записи. Уточните, какие поля в плане тестирования вызывают проблему.   -  person Barney    schedule 11.11.2017
comment
@Barney, я пробовал то же самое с To-Mail, который не генерируется автоматически.   -  person Karthick Raju    schedule 11.11.2017
comment
@ Барни, это дефект, а не план испытаний.   -  person Karthick Raju    schedule 11.11.2017
comment
I am facing this hyphen column problem when updating Test table column Хорошо, опубликуйте сообщение об ошибке.   -  person Barney    schedule 11.11.2017
comment
Извините, это произошло и с тестовой таблицей. Но на данный момент создание Дефектов имеет первостепенное значение. Спасибо!   -  person Karthick Raju    schedule 11.11.2017
comment
Получение 404 неверный запрос. Я мог создать дефект (без использования столбца с дефисом).   -  person Karthick Raju    schedule 11.11.2017
comment
https://github.com/macroking/ALM-Integration/blob/master/ALM_Integration_Util.py Я использовал некоторые имена столбцов с -. Если у вас есть доступ к вкладке «Управление» в HP ALM, перепроверьте, что имена столбцов, которые вы используете в своей программе, действительно существуют в соответствующей таблице alm.   -  person Barney    schedule 11.11.2017
comment
@Barney, спасибо за URL. URL-адрес не работает. Поскольку столбец дефиса работает для вас, не могли бы вы поделиться со мной своим кодом? Я перепроверил колонку. Это то же самое, что и поле столбца   -  person Karthick Raju    schedule 13.11.2017
comment
github.com/macroking/ALM-Integration   -  person Barney    schedule 13.11.2017
comment
@ Барни, я посмотрел URL. Они удаляют специальный символ (дефис) в коде. Нужно ли передавать столбец без дефиса? Я не очень хорошо знаком с Python. Не могли бы вы мне помочь?   -  person Karthick Raju    schedule 13.11.2017


Ответы (1)


Как подойти,

  1. Сделайте запрос на получение, чтобы извлечь все имена полей и формат данных, которые он принимает.

    Eg: https://almserver/qcbin/rest/domains/WWT/projects/content/defects/1

  2. Определите обязательные поля.

  3. Установите заголовок запроса в XML/JSON в соответствии с вашей полезной нагрузкой.

Создание дефекта в Python

ALM_USER_NAME = "username"
ALM_PASSWORD = "password"
ALM_DOMAIN = "domain"

ALM_URL = "https://almserver/qcbin/"
AUTH_END_POINT = ALM_URL + "authentication-point/authenticate"
QC_SESSION_END_POINT = ALM_URL + "rest/site-session"
QC_LOGOUT_END_POINT = ALM_URL + "authentication-point/logout"
ALM_MIDPOINT = ALM_URL + "rest/domains/" + ALM_DOMAIN + "/projects/"

def generate_xml_data(inputdata):
    '''
        Function    :   generateXMLData
        Description :   Generate an xml string
        Parameters  :   Dictionary of variable
    '''
    root = Element('Entity')
    root.set('Type', inputdata['Type'])
    inputdata.pop('Type')
    childs = SubElement(root, 'Fields')

    for key, value in inputdata.iteritems():
        child1 = SubElement(childs, 'Field')
        child1.set('Name', key)
        child2 = SubElement(child1, 'Value')
        child2.text = value
    return tostring(root)

def createdefect():
    '''
        alm defect
    '''
    alm_session = requests.Session()
    # Login
    try:
        res = alm_session.post(AUTH_END_POINT, auth=HTTPBasicAuth(
            ALM_USER_NAME, ALM_PASSWORD))
        if res.status_code == 200:
            print "ALM: Logged in"
        alm_session.post(QC_SESSION_END_POINT)
        alm_session.headers.update({'Accept': 'application/json',
                                    'Content-Type': 'application/xml'})
        # Get all the projects
        res = alm_session.get(ALM_MIDPOINT)

    # Post a New Defect
    defect = dict()
    defect['Type'] = 'defect'
    defect['name'] = 'StackOverflow'
    defect['user-10'] = 'Content'  # User defined field
    defect['severity'] = '1-Low'
    defect['priority'] = '1-Low'
    defect['detected-by'] = 'userid'
    defect['creation-time'] = '2017-11-13'

    # Call the generic method to build the xml data
    defect_payload = generate_xml_data(defect)

    response = alm_session.post(ALM_MIDPOINT + "content/defects", data=defect_payload)
    print response.url

except (KeyboardInterrupt, SystemExit, Exception) as err:
    print "keyboard interrupt"
    print err.message
finally:
    if alm_session:
        res = alm_session.post(QC_LOGOUT_END_POINT)
        if res.status_code == 200:
            print "ALM: Logged out"

if __name__ == "__main__":
    try:
        createdefect()
    except (KeyboardInterrupt, SystemExit):
        print "done with errors"
    
person Barney    schedule 13.11.2017
comment
Теперь работает. Спасибо за код! +50 за помощь :-) - person Karthick Raju; 14.11.2017