Автоматизация центра качества HP с помощью Python или Java

У нас есть проект, который использует Центр качества HP, и одна из обычных проблем, с которыми мы сталкиваемся, – это люди, не обновляющие комментарии к дефекту.

Поэтому я думал, что мы могли бы придумать небольшой скрипт или инструмент, который можно было бы использовать, чтобы периодически вызывать напоминание и заставлять пользователя обновлять комментарии.

Я столкнулся с API Open Test Architecture и задавался вопросом, есть ли хорошие примеры Python или java для того же самого, что я мог видеть.

Спасибо Хари

6 Solutions collect form web for “Автоматизация центра качества HP с помощью Python или Java”

Я не уверен, что есть хорошие образцы для Java, потому что OTA не может быть потреблено Java напрямую, для этого нужен Java для COM-Bridnge, например JIntegra .

О Python, хорошо, вы можете использовать Python COM api. И тогда любой пример OTA будет делать. У вас есть много документов по QC OTA.

Но я думаю, что здесь возникает реальный вопрос: зачем вам это делать на Python или Java. Почему бы не написать то, что вам нужно прямо в QC, используя его функцию Workflow. Это позволит вам написать вашу логику в VBScript и вызвать ее в пользовательском интерфейсе QC в пользовательских действиях. Например, вы можете привязываться к событию Post из Defect / Bug и проверять, есть ли комментарий, и если пользователь не запрашивает сообщение напрямую.

Пример использования Python (win32com) для подключения к HP Quality Center через OTA

Центр качества HP предоставляет API, основанный на COM, который называется OTA.

Документация по этому вопросу можно загрузить с сервера QC (OTA_API_Reference.chm) (странно очень сложно найти онлайн)

В документации используется VBScript (официально поддерживаемый внутренний язык для QC), и вам нужно будет мысленно перевести на Python. Обычно это очень просто, но существует несколько ошибок.

Вам необходимо будет установить на свой компьютер локальный код центра качества, который находится на вашем ПК с Windows, если вы получили доступ к QC через веб-интерфейс.

Вам также необходимо знать URL-адрес сервера, имя пользователя и пароль и домен проекта QC, над которым вы работаете.

from win32com.client import Dispatch conn = get_QCConnection() for bug in get_bugs(qcConn): print bug.Title put_QCConnection(conn) #below code needs to be in seperate module or at least above the fold but here # for clarity def get_QCConnection(): '''Get the hardcoded connection to the server and domain. Can be made a "real" engine if you try hard. Use makepy utility to determine if the version number has changed (TDApiOle80) but this works to current version''' QCConnection = Dispatch("TDApiOle80.TDConnection") url = "http://qc.example.com/qcbin" QCConnection.InitConnectionEx(url) QCConnection.login("USER", "PASS") QCConnection.Connect("google_projects", "Google_Chrome") return QCConnection def put_QCConnection(qcConn): #If one person logged in to QC changes *anything* on a bug, # they hold a global lock on writing to that bug till # thier session times out, so really really remember to logout # its painful to wait for your own session to time out qcConn.Logout() def get_bugs(qcConn): '''just following boiler plate from vbscript PS the SetFilter is not in QTA API, it uses Filter. But due to the workarounds in the very brilliant pythoncom code it supplies a virtual wrapper class called SetFilter - this is one of those gotchas ''' BugFactory = qcConn.BugFactory BugFilter = BugFactory.Filter BugFilter.SetFilter(u"Status", "New") #NB - a lot of fields in QC are malleable - and vary from site to site. #COntact your admins for a real list of fields you can adjust buglist = BugFilter.NewList() return buglist 

Это не плохая основа для продвижения вперед, однако я создаю фиктивный класс для дефектов и запускаю что-то вроде:

 dfcts = [defect(b) for b in buglist] 

Затем я могу поместить рабочий код в класс дефектов и сохранить вещи аккуратно. Одна вещь, которую вы хотите сделать, – это обеспечить доступ к необработанной ошибке qc, внутренней для класса оболочки python.

Информация для других, кто может просматривать эту тему.

Чтобы начать все это, вам понадобится установить pywin32, например, здесь http://sourceforge.net/projects/pywin32/files/pywin32/Build216/

Прежде всего вам нужно будет импортировать pywin32

 '''@author: www.qcintegration.com @mailto:contact@qcintegration.com''' import pywintypes import win32com.client as w32c from win32com.client import gencache, DispatchWithEvents, constants 

Затем, как вторая операция, я включаю здесь действие при входе на сервер

 def connect_server(qc, server): '''Connect to QC server input = str(http adress) output = bool(connected) TRUE/FALSE ''' try: qc.InitConnectionEx(server); except: text = "Unable connect to Quality Center database: '%s'"%(server); return qc.Connected; def connect_login(qc, username, password): '''Login to QC server input = str(UserName), str(Password) output = bool(Logged) TRUE/FALSE ''' try: qc.Login(username, password); except pywintypes.com_error, err: text = unicode(err[2][2]); return qc.LoggedIn; def connect_project(qc, domainname, projectname): '''Connect to Project in QC server input = str(DomainName), str(ProjectName) output = bool(ProjectConnected) TRUE/FALSE ''' try: qc.Connect(domainname, projectname) except pywintypes.com_error, err: text = "Repository of project '%s' in domain '%s' doesn't exist or is not accessible. Please contact your Site Administrator"%(projectname, domainname); return qc.ProjectConnected; 

Второй способ, который будет включать в себя файл dll OTAapi

 def qc_instance(): '''Create QualityServer instance under variable qc input = None output = bool(True/False)''' qc= None; try: qc = w32c.Dispatch("TDApiole80.TDConnection"); text = "DLL QualityCenter file correctly Dispatched" return True, qc; except: return False, qc; 

Затем основной метод подключения к QCserver

 def qcConnect(server, username, password, domainname, projectname): print("Getting QC running files"); status, qc = qc_instance(); if status: print("Connecting to QC server"); if connect_server(qc, server): ##connected to server print("Checking username and password"); if connect_login(qc, username, password): print("Connecting to QC domain and project"); if connect_project(qc, domainname, projectname): text = "Connected" connected = True; return connected, text; else: text = "Not connected to Project in QC server.\nPlease, correct DomainName and/or ProjectName"; connected = False; return connected, text; else: text = "Not logged to QC server.\nPlease, correct UserName and/or Password"; connected = False; return connected, text; else: text = "Not connected to QC server.\nPlease, correct server http address"; connected = False; return connected, text; else: connected = False; text = "Unable to find QualityCenter installation files.\nPlease connect first to QualityCenter by web page to install needed files" return connected, text; 

И в конце, как выполнить все эти методы в одном месте с примером использования

 if __name__ == "__main__": server= r"http://qualitycenterServer:8080/qcbin" username= "alex_qc" password= "" domainname= "DEFAULT" projectname= "QualityCenter_Demo" connection_status, text = qcConnect(server, username, password, domainname, projectname); print "connection_status:", connection_status 

В случае возникновения каких-либо вопросов mailto: contact@qcintegration.com или непосредственно на веб- странице : http://www.qcintegration.com

Существует API REST для HPQC (ALM11 и новее), если вы хотите получить к нему доступ из Linux без использования компонента Windows COM.

Вот пример, который затягивает запись «требование» (# 1202) после аутентификации.

 import requests session = requests.session() user='hpqc' password='xxxxx' r = session.get("http://hpqc-server:8080/qcbin/authentication-point/authenticate",auth=(user,password)) r = session.get("http://hpqc-server:8080/qcbin/rest/domains/Foo/projects/Bar/requirements/1202") print(r.text) 

Разбор r.text из XML остается в виде упражнения.

Хотя вы попросили решение на базе Python или Java, используя следующий код VBA, который вы можете использовать для создания цели, используя редактор сценариев HPQC / ALM (скрипт дефектов).

 Function Bug_FieldCanChange(FieldName, NewValue) On Error Resume Next if not changed then strCommentBeforeUpdate = Bug_Fields("BG_DEV_COMMENTS").Value end if If FieldName = "BG_DEV_COMMENTS" and blnAddCommentClicked = False Then Msgbox "Cannot update the comments." & Chr(13)& "Changes made will not be saved."&Chr(13)& "Please use 'Add comment' button to insert new comment." &Chr(13)& " Or click Cancel without saving." blnUpdateCommentError = true blnAddCommentClicked = False changed = true End If Bug_FieldCanChange = DefaultRes End Function 

Вы можете использовать новый Test и select type (VPXP_API), которые позволяют запускать скрипт. Хорошо, что у вас есть определение функции, готовое к перетаскиванию из QC, вместо того, чтобы сильно полагаться на документ. Я выполнил реализацию в Python, выполняющую некоторый скрипт из QC, все еще использующий его API, но через QC-тест, который удобен для получения непосредственно результата (Output) и т. Д., Проходящего через некоторую команду оболочки, которая затем может вызывать любой скрипт на любом сервер и т. д.

  • Насколько похожи Java, C # и Python?
  • Перемещение заводы в Python
  • Java или любой другой язык: какой метод / класс вызывал мой?
  • Вытащить пакеты ошибок Java из файлов журналов
  • быстро копировать объекты между различными виртуальными машинами
  • Различные / лучшие подходы для вызова функции python из Java
  • Java и python не получают одинаковое значение sha-1
  • Эффективный анализатор для больших XML-данных
  •  
    Interesting Posts for Van-Lav

    Как преобразовать формат пакета Nc * в Perl в struct.pack для Python?

    @csrf_exempt перестала работать в Django 1.4

    Предоставляет ли python официальную поддержку повторного использования переменной цикла после цикла?

    Как узнать значения по умолчанию для аргумента определенной функции в другой функции в Python?

    matplotlib Только маркеры легенд

    Сравните два аудиофайла

    Добавление элементов в генераторы питона

    Подключение python 3.3 к серверу microsoft sql 2008

    IOError: Нет такого файла или каталога, записывающего в файл в домашнем каталоге

    Выбор даты между двумя датами, а также учет отдельного поля времени

    Предоставление файла iCal .ics с помощью Django: исправление неправильных строк перевода строки

    В Python существует ли элегантный способ распечатки списка в пользовательском формате без явного цикла?

    Как преобразовать пароль в звездочки во время его ввода?

    Как логический оператор работает с строкой в ​​python

    Все возможные комбинации карт / покерных рук для набора игроков

    Python - лучший язык программирования в мире.