2015-03-06 4 views
6

я запускаю следующий код, но ничего не отображается в УАП:Как добавить приложение к тестовому набору в ALM OTA через C#?

AttachmentFactory attachmentFactory = (AttachmentFactory)tsTest.Attachments; 
TDAPIOLELib.Attachment attachment = (TDAPIOLELib.Attachment)attachmentFactory.AddItem("test"); 
attachment.Post(); 

Метод AddItem на второй линии продолжает просить «объект Itemdata», но я понятия не имею, что это такое точно. У HP есть такая плохая документация, что на самом деле ничего не объясняет. Кто-нибудь знает, как программно использовать C# добавить прикрепление файла к тестовому прогону в HP ALM?

+0

Кто-нибудь? Bueller? Bueller? Bueller? –

ответ

4

После долгих боли и исследований я нашел ответ. Я уверен, что есть другие способы достижения этого, которые являются более эффективными, но поскольку документация HP является наихудшей на планете, это лучшее, что я мог бы придумать. Если у кого-то есть лучший способ, я бы ЛЮБЛЮ, чтобы увидеть его, поэтому, пожалуйста, опубликуйте его!

Надеюсь, это поможет!

try 
{ 
    if (qcConn.Connected) 
    { 
     string testFolder = @"Root\YourFolder"; 

     TestSetTreeManager tsTreeMgr = (TestSetTreeManager)qcConn.TestSetTreeManager; 
     TestSetFolder tsFolder = (TestSetFolder)tsTreeMgr.get_NodeByPath(testFolder); 
     AttachmentFactory attchFactory = (AttachmentFactory)tsFolder.Attachments; 
     List tsList = tsFolder.FindTestSets("YourTestNameHere", false, null); 

     foreach (TestSet ts in tsList) 
     { 
      TestSetFolder tstFolder = (TestSetFolder)ts.TestSetFolder; 
      TSTestFactory tsTestFactory = (TSTestFactory)ts.TSTestFactory; 
      List mylist = tsTestFactory.NewList(""); 
      foreach (TSTest tsTest in mylist) 
      { 
       RunFactory runFactory = (RunFactory)tsTest.RunFactory; 
       Run run = (Run)runFactory.AddItem("NameYouWantDisplayedInALMRuns"); 
       run.CopyDesignSteps(); 

       //runResult just tells me if overall my test run passes or fails - it's not built in. It was my way of tracking things though the code. 
       if(runResult) 
        run.Status = "Failed"; 
       else 
        run.Status = "Passed"; 
       run.Post(); 

       //Code to attach an actual file to the test run. 
       AttachmentFactory attachmentFactory = (AttachmentFactory)run.Attachments; 
       TDAPIOLELib.Attachment attachment = (TDAPIOLELib.Attachment)attachmentFactory.AddItem(System.DBNull.Value); 
       attachment.Description = "Attach via c#"; 
       attachment.Type = 1; 
       attachment.FileName = "C:\\Program Files\\ApplicationName\\demoAttach.txt"; 
       attachment.Post(); 

       //Code to attach a URL to the test run 
       AttachmentFactory attachmentFactory = (AttachmentFactory)run.Attachments; 
       TDAPIOLELib.Attachment attachment = (TDAPIOLELib.Attachment)attachmentFactory.AddItem(System.DBNull.Value); 
       //Yes, set the description and FileName to the URL. 
       attachment.Description = "http://www.google.com"; 
       attachment.Type = 2; 
       attachment.FileName = "http://www.google.com"; 
       attachment.Post(); 

       //If your testset has multiple steps and you want to update 
       //them to pass or fail 
       StepFactory rsFactory = (StepFactory)run.StepFactory; 
       dynamic rdata_stepList = rsFactory.NewList(""); 
       var rstepList = (TDAPIOLELib.List)rdata_stepList; 
       foreach (dynamic rstep in rstepList) 
       { 
        if (SomeConditionFailed) 
          rstep.Status = "Failed"; 
         else 
          rstep.Status = "Passed"; 
         rstep.Post(); 
        } 
        else 
        { 
         rstep.Status = "No Run"; 
         rstep.Post(); 
        } 
       } 
      } 
     } 
    } 
} 
+1

Для Java null type: new Variant (Variant.Type.VT_NULL) надеется, что это поможет кому-то :) –

1

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

Вместо вызова:

attachmentFactory.AddItem(filename) 

Вызов функции без параметров (или нулевой paramer, не могу сказать, так как я никогда не использовал API OTA с C#):

file = attachmentFactory.AddItem() 

сейчас назначить файл элементу привязки и остальным его свойствам:

file.Filename = "C:\\Users\\myUser\\just\\an\\example\\path" + fileName 
file.Description = "File description" 
file.Type=1 
file.Post() 

Тип указывает, что это местный файл, а не URL.

+1

Чувак, спасибо большое! Мне это нужно! – BUInvent

0

Нет ценной информации в Интернете! После некоторого копания по OTA документации, которую я нашел это:

AttachmentFactory attachmentFactory = (AttachmentFactory)TstTest.Attachments; 
      TDAPIOLELib.Attachment attachment = (TDAPIOLELib.Attachment)attachmentFactory.AddItem("demoAttach.txt"); 
      attachment.Description = "Bug Sample Attachment"; 
      attachment.Post(); 
      IExtendedStorage exStrg = attachment.AttachmentStorage; 
      exStrg.ClientPath = "E:\\TestData"; 
      exStrg.Save("demoAttach.txt", true); 

на самом деле, был в форме сценария VB, но мне удалось преобразовать в C#. OTA ссылка:

'----------------------------------------- 
'Use Bug.Attachments to 
' get the bug attachment factory. 
    Set attachFact = bugObj.Attachments 
'Add a new extended storage object,an attachment 
' named SampleAttachment.txt. 
    Set attachObj = attachFact.AddItem("SampleAttachment.txt") 
' Modify the attachment description. 
    attachObj.Description = "Bug Sample Attachment" 
' Update the attachment record in the project database. 
    attachObj.Post 
' Get the bug attachment extended storage object. 
    Set ExStrg = attachObj.AttachmentStorage 
'Specify the location of the file to upload. 
    ExStrg.ClientPath = "D:\temp\A" 
'----------------------------------------- 
'Use IExtendedStorage.Save to 
' upload the file. 
    ExStrg.Save "SampleAttachment.txt", True 
+0

Я пробовал ваш выше код в C#, но он не смог прикрепить файл к тестовому прогону. Это работало для вас? –

1

Если кто-то интересно, как сделать это на требование-модуль, вот код:

Req req = Globals.Connection.ReqFactory.Item(*ID*)); 
VersionControl versionControl = ((IVersionedEntity)req).VC as VersionControl; 
versionControl.CheckOut(string.Empty); 
AttachmentFactory attFac = req.Attachments; 
Attachment att = (Attachment)attFac.AddItem(System.DBNull.Value); 
att.Description = "*Your description here"; 
att.Type = (int)TDAPI_ATTACH_TYPE.TDATT_FILE; //for URL, change here 
att.FileName = "*Your path including filename here*"; 
att.Post(); 
versionControl.CheckIn("*Your check-in comment here*"); 

 Смежные вопросы

  • Нет связанных вопросов^_^