主要内容

Python API for Polyspace 快速入门

您可以通过使用 Python® API for Polyspace® 完全在命令行中管理 Polyspace Test™ 工作流。此示例演示了使用该 API 执行以下操作的工作流:

  • 创建工程。

  • 向该工程中添加源文件和 xUnit 测试文件。

  • 编译和运行该工程中的测试。

前提条件

确保您使用的是支持的 Python 版本并且您能够无错误地导入 polyspace.projectpolyspace.test Python 模块。有关详细信息,请参阅Set Up Python API for Polyspace

导入模块

导入 polyspace.projectpolyspace.test 模块:

import polyspace.project
import polyspace.test
import os
有关详细信息,请参阅Set Up Python API for Polyspace

创建工程并添加文件

要创建工程,请使用 polyspace.project 模块。

examples_path = os.path.join(polyspace.__install_path__, "polyspace", 
                            "examples", "pstest", "Getting_Started_Example")
polyspaceProject = polyspace.project.Project("getStarted")
该命令将在当前文件夹中创建一个 polyspace.project.Project 对象 polyspaceProject 和一个工程文件 getStarted.psprjx

使用 polyspaceProject 的属性将源文件和 xUnit 测试文件添加到该工程中。

# Add source code files
polyspaceProject.Code.Files.add(os.path.join(examples_path, "sources", "utils.c"))
polyspaceProject.IncludePaths.add(os.path.join(examples_path, "includes"))

# Add test file
polyspaceProject.Tests.Files.add(os.path.join(examples_path, "tests", "test.c"))

要查看 polyspace.projectpolyspace.test 模块中的对象可用的其他属性和方法,请在键入命令时按 Tab 键。

编译和运行测试

要编译和运行该工程中的测试,请使用 polyspace.test.run() 方法。

res = polyspace.test.run(polyspaceProject)
Polyspace Test 会编译一个测试可执行文件并运行测试。如果该测试可执行文件已经存在并且您没有对代码进行任何更改,则 polyspace.test.run() 方法会运行该可执行文件,而不先重新编译。

读取测试结果

polyspace.test.run() 方法会返回一个可以用于读取测试结果的 polyspace.test.TestResults 对象。例如,您可以执行以下操作:

  • 检查测试执行的总体状态:

    if not res.Status.Failed and not res.Status.Incomplete: 
        print("All tests have passed.")
    elif res.Status.Failed:
        print("At least one test failed.")
    else:
        print("At least one test did not run to completion.")

  • 输出测试失败的套件的名称:

    for resTestSuite in res.TestSuiteResults:
        if resTestSuite.Status.Failed:
            print(resTestSuite.Name)

  • 输出失败测试用例的名称:

    for resTestSuite in res.TestSuiteResults:
        if resTestSuite.Status.Failed:
            for resTestCase in resTestSuite.TestCaseResults:
                if resTestCase.Status.Failed:
                    print(f"{resTestSuite.Name}/{resTestCase.Name}")
    

  • 输出失败评估的文件名和行号:

    for resTestSuite in res.TestSuiteResults:
        if resTestSuite.Status.Failed:
            for resTestCase in resTestSuite.TestCaseResults:
                if resTestCase.Status.Failed:
                    print(f"{resTestSuite.Name}/{resTestCase.Name}\n")
                    for resAssessment in resTestCase.FailedAssessmentResults:
                        print(f"{resAssessment.File}: Line {resAssessment.Line}")

另请参阅

| | | | | |

主题