最后,我从问题中提到的文章中找到了如何通过工具自动导入所有 1843 个测试用例的解决方案。
我们的测试用例像往常一样迁移到云 Jira。他们没有测试步骤,但有所有其他信息,如描述、标签和其他与 Jira 字段相关的信息。此外,我将展示如何在没有步骤的情况下将所有步骤迁移到迁移的测试用例。
转到您的 Jira 并将您需要的测试用例导出到 Excel 文件。可以从此屏幕完成
https://zephyrdocs.atlassian.net/wiki/spaces/ZTD/pages/12386325/Search+Test+Executions
从
https://bitbucket.org/zfjdeveloper/zfj-importer/downloads/下载 .jar 文件
在 cmd 中通过命令 java -jar zfj-importer-utility-0.40.jar 运行这个 jar 文件我尝试通过双击运行 jar 文件,应用程序打开,但是在配置并按下按钮 Start Import 之后没有任何反应。只有从 cmd 打开后一切正常。另外,在 cmd 中,您可以查看进度和错误详细信息,这将有助于您进行调试。
按照文档https://bitbucket.org/zfjdeveloper/zfj-importer/wiki/Home配置实用程序
在这一点上,我虽然按下开始导入后一切都会完美,但不是。在控制台中我发现了很多错误,他们的原因是测试步骤中有很多换行符。假设您在步骤字段中有一个步骤,在测试数据字段中有一行,但在执行结果字段中您有带换行符的文本,比如说 4 行。对于这种情况,excel 执行结果字段将是 4 个不同的列,步骤字段和测试数据作为一个合并列。并且根据效用规则,没有步骤就不可能有结果。(如果您在步骤字段和测试数据中有换行符,则可能会出现此类问题)。
下面我将展示我如何处理它。
我决定编写 Excel 函数,该函数将一步从未合并的行中获取行,将它们连接起来并提供导入。请原谅我的 VBA,我以前从未使用过它。我写的所有东西都可以用更好的方式和一个脚本重写,但它对我有用,我不想在这个问题上花更多时间,所以放手吧。下面你可以找到4个excel函数。其中3个非常相似,不同之处仅在于一个字母。最后一个脚本用于删除连接的空行,如果没有它,将创建值为“null”的步骤。
Public Const lastTableRow = 3872
Function ConvertSteps()
Dim callerRow As Long
Dim isValueInStepId As Boolean
Dim isNoValueInNextStepId As Boolean
Dim result As String
Dim baseColumnLetter As String
Dim stepIdColumnLetter As String
callerRow = Application.Caller.row
baseColumnLetter = "S"
stepIdColumnLetter = "Q"
Debug.Print "processed row is: " & callerRow
isValueInStepId = (Range(stepIdColumnLetter & callerRow).Value <> "")
isNoValueInNextStepId = (Range(stepIdColumnLetter & (callerRow + 1)).Value = "")
If isValueInStepId And isNoValueInNextStepId Then
Dim i As Integer
i = 1
result = Range(baseColumnLetter & callerRow).Value
Do While Range(stepIdColumnLetter & (callerRow + i)).Value = "" And (callerRow + i) <= lastTableRow
result = result & " " & Range(baseColumnLetter & (callerRow + i)).Value
i = i + 1
Loop
ConvertSteps = result
Else
If Range(baseColumnLetter & (callerRow)).Value = "" Then
ConvertSteps = ""
Else
ConvertSteps = Range(baseColumnLetter & (callerRow)).Value
End If
End If
End Function
Function ConvertTestData()
Dim callerRow As Long
Dim isValueInStepId As Boolean
Dim isNoValueInNextStepId As Boolean
Dim result As String
Dim baseColumnLetter As String
Dim stepIdColumnLetter As String
callerRow = Application.Caller.row
baseColumnLetter = "T"
stepIdColumnLetter = "Q"
Debug.Print "processed row is: " & callerRow
isValueInStepId = (Range(stepIdColumnLetter & callerRow).Value <> "")
isNoValueInNextStepId = (Range(stepIdColumnLetter & (callerRow + 1)).Value = "")
If isValueInStepId And isNoValueInNextStepId Then
Dim i As Integer
i = 1
result = Range(baseColumnLetter & callerRow).Value
Do While Range(stepIdColumnLetter & (callerRow + i)).Value = "" And (callerRow + i) <= lastTableRow
result = result & " " & Range(baseColumnLetter & (callerRow + i)).Value
i = i + 1
Loop
ConvertTestData = result
Else
If Range(baseColumnLetter & (callerRow)).Value = "" Then
ConvertTestData = ""
Else
ConvertTestData = Range(baseColumnLetter & (callerRow)).Value
End If
End If
End Function
Function ConvertResult()
Dim callerRow As Long
Dim isValueInStepId As Boolean
Dim isNoValueInNextStepId As Boolean
Dim result As String
Dim baseColumnLetter As String
Dim stepIdColumnLetter As String
callerRow = Application.Caller.row
baseColumnLetter = "U"
stepIdColumnLetter = "Q"
Debug.Print "processed row is: " & callerRow
isValueInStepId = (Range(stepIdColumnLetter & callerRow).Value <> "")
isNoValueInNextStepId = (Range(stepIdColumnLetter & (callerRow + 1)).Value = "")
If isValueInStepId And isNoValueInNextStepId Then
Dim i As Integer
i = 1
result = Range(baseColumnLetter & callerRow).Value
Do While Range(stepIdColumnLetter & (callerRow + i)).Value = "" And (callerRow + i) <= lastTableRow
result = result & " " & Range(baseColumnLetter & (callerRow + i)).Value
i = i + 1
Loop
ConvertResult = result
Else
If Range(baseColumnLetter & (callerRow)).Value = "" Then
ConvertResult = ""
Else
ConvertResult = Range(baseColumnLetter & (callerRow)).Value
End If
End If
End Function
Public Sub DeleteBlankRows()
Dim SourceRange As Range
Dim EntireRow As Range
Set SourceRange = Range("Q1", "Q" & lastTableRow)
If Not (SourceRange Is Nothing) Then
Application.ScreenUpdating = False
For i = SourceRange.Rows.Count To 1 Step -1
Set EntireRow = SourceRange.Cells(i, 1).EntireRow
Debug.Print SourceRange.Cells(i, 1).Value
If SourceRange.Cells(i, 1).Value = 0 Then
EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
End If
End Sub
让我们打开 Excel 文件并将其保存为 .xlsm 格式以应用自定义函数。
将函数导入 Excel
在 Excel 中带有测试用例步骤的变量 lastTableRow 最后一行的代码集的顶部。
现在我们需要 3 个新列来保存传输的步骤、测试数据和结果字段。为此,我们可以使用最后一列的注释,复制并粘贴两次。现在我们有 3 个空列 W、X、Y 用于我们的目的。
对于 W 列中的所有行,应用公式 =ConvertSteps() 来聚合步骤(可能需要一些时间)
对于 X 列中的所有行,应用公式 =ConvertTestData() 来聚合测试数据(可能需要一些时间)
对于 Y 列中的所有行,应用公式 =ConvertResult() 来汇总结果(可能需要一些时间)
现在我们必须将新列中的值从公式转换为它们的字符串值。为此,请选择所有表并按 Ctrl+C。然后按右键并选择过去的值。
运行 DeleteBlankRows 宏来删除我们不需要导入的所有行。
以 .xml 格式保存文件。
在 Utility 中选择此文件,然后按 Start Import
在 cmd 中,您可以看到一些错误。在我的情况下,当没有步骤描述但有预期的结果时,它们会受到影响。如果它们很少像我的情况一样,那么在 Execel 文件中手动更改它会更容易。如果它们很多,您可以在自定义函数中处理这种情况。
就是这样,这个解决方案帮助我导入了 1800 多个测试用例。我已经将它们部分导出了 500 个,对我来说导入所有测试用例大约需要 3 个小时。