开发区

高级软件开发与MATLAB

桶的构建

水桶。有时下雨,有时下雨,有时下雨用冰桶挑战。当涉及到我的代码、测试和开发过程时,我想把它们都放在bucket中。一个bucket用于对我的迭代工作流至关重要的测试。一个bucket用于在逐个更改的基础上不那么重要,但总体上仍然很重要的测试。一个bucket用于我的性能测试,一个bucket用于我的UI测试。bucket一直都是这样做的wn。

很久以前我们聊过一次夫妇时代关于我们如何将一些测试放入不同的容器中,然后以不同的方式选择它们。这很好,但我并没有真正完成关于如何在自动化中工作的故事。毕竟,您是在使用CI系统为您运行测试,对吗?

这里的问题是,我只希望对每次提交运行一些测试,但随后我想推迟其他测试。例如,我可以看到自己在每次修改代码时都运行所有的快速单元测试,但之后可能每天晚上都运行性能测试。我还可能有一组昂贵且只适合周期性运行的测试。也许他们需要很长时间运行,操作大数据或一些外部资源,需要人工验证,甚至有点古怪。我仍然想把这些测试保留在我的武器库中,但我想把它们推迟到每周甚至每月的时间表。

在Jenkins中,您可以非常轻松地使用参数化构建完成此操作。首先,创建标准的自由式作业:

在构建配置页面的顶部,就在我们的共同眼皮底下,有一个选项可以将构建标记为参数化。选中该框,我们可以添加我们自己的参数值,或者可以说是bucket,它们为我们提供了真正的参数来构建。对于我们的情况,让我们为每个commi添加一个标准构建t、 运行性能测试的构建,以及运行更昂贵的延迟测试的构建:

这将改变我们的项目主页,包括“带参数的构建”。只是“构建”所以上周。

很好,我们的项目现在运行我们的标准构建来运行每一个提交,但如果我们想要注入一点味道到我们的构建中,我们现在有这个选项:

这到底是为了什么?构建有何不同?这取决于环境。我们现在定义的参数在构建过程中变成了环境变量,这样我们就可以在CI脚本中处理它们。它可能看起来像这样:

采用testType =字符串“TestType”));如果testType = =“性能”perfResults = runperf (“IncludeSubfolders”符合事实的“超类”“matlab.perftest.TestCase”);断言(所有([perfResults.Valid]),“某些性能测试无效!”) convertToJMeterCSV (perfResults);其他的testsToRun=runtests(“IncludeSubfolders”符合事实的“标签”, testType);断言(~ ([results.Failed]),加入([testType,“测试失败!”]));结束

现在我们要做的就是添加TestTags对于“标准”和“延迟”测试,我们可以随意选择测试!默认构建(例如,我们可能会在每次提交源代码管理时安排或运行)将使用第一个参数值,在本例中为“标准”,因此非常适合。

注意:对于性能测试,我们可以用不同的方式处理它们,就像我们演示的那样在这里.此外,我们通过它们的超类选择这些性能测试,因为我们从这些测试中派生了所有这些测试matlab.perftest.TestCase.如果我们愿意,我们仍然可以通过简单地添加“标准”TestTag来运行这些正常的测试。这将确保它们不会因任何给定的更改而中断,并且直到我们想要收集性能数据时才会发现。

好了。使用参数化构建非常容易,利用测试标记之类的特性可以真正打开一些不错的工作流程。您使用过参数化构建吗?我很想听听你的故事!




与MATLAB®R2018b一起发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。