1

我正在尝试使用以下命令从 Rally 上的测试用例定义中删除附件pyral

del_attachment = rally.deleteAttachment('TestCase',filename)

任何建议,出了什么问题?

4

2 回答 2

0

传递工件的 FormattedID 字符串应该可以工作,因为 pyral 会尝试识别工件的类型并在下面的调用中为您检索它。

        art_type, artifact = self._realizeArtifact(artifact)

看看_realizeArtifact的代码......

    def _realizeArtifact(self, artifact):
    """
        Helper method to identify the artifact type and to retrieve it if the 
        artifact value is a FormattedID. If the artifact is already an instance
        of a Rally entity, then all that needs to be done is deduce the art_type
        from the class name.  If the artifact argument given is neither of those 
        two conditions, return back a 2 tuple of (False, None).
        Once you have a Rally instance of the artifact, return back a 
        2 tuple of (art_type, artifact)
    """
    art_type = False
    if 'pyral.entity.' in str(type(artifact)):
        # we've got the artifact already...
        art_type = artifact.__class__.__name__
    elif self.FORMATTED_ID_PATTERN.match(artifact): 
        # artifact is a potential FormattedID value
        prefix = artifact[:2]
        if prefix[1] in string.digits:
            prefix = prefix[0]
        art_type = self.ARTIFACT_TYPE[prefix]
        response = self.get(art_type, fetch=True, query='FormattedID = %s' % artifact)
        if response.resultCount == 1:
            artifact = response.next()
        else:
            art_type = False
    else: # the supplied artifact isn't anything we can deal with here...
        pass

    return art_type, artifact
于 2020-03-26T13:49:57.200 回答
0

如果您查看 的代码pyral您会得到以下签名:

  def deleteAttachment(self, artifact, filename):
        """
            Still unclear for WSAPI v2.0 if Attachment items can be deleted.
            Apparently AttachmentContent items can be deleted.
        """
        art_type, artifact = self._realizeArtifact(artifact)
        if not art_type:
            return False

        current_attachments = [att for att in artifact.Attachments]
        hits = [att for att in current_attachments if att.Name == filename]
        if not hits:
            return False

        ...

所以第一个参数是一个工件(即测试用例对象),而不是一个字符串。

可能应该是这样的:

import logging

logging.basicConfig(format="%(levelname)s:%(module)s:%(lineno)d:%(msg)s")


try:
    # Get number of existing steps
    testcase = rally.get("TestCase", query="FormattedID = %s" % tcid, instance=True)
    has_been_deleted = rally.deleteAttachment(testcase, filename)
    if not has_been_deleted:
        msg = "Attachment '{0}' of Test Case {1} not deleted successfully"
        logging.warning(msg.format(filename, testcase.FormattedID))

except RallyRESTAPIError as e:
    logging.error("Error while deleting attachment '{0}': {1}".format(filename, e))
于 2020-01-25T16:24:44.083 回答