如果测试失败,我该如何标记大厅ci构建失败?

时间:2019-12-20 20:09:18

标签: jmeter concourse

我正在使用concourse ci管道运行一些自动化测试。我的要求是,如果任何测试失败,则将构建标记为失败并通过电子邮件发送结果。有没有办法在大厅这样做?电子邮件功能运行正常,但是即使测试失败,构建也可以通过。

2 个答案:

答案 0 :(得分:1)

在假设退出代码正确的前提下,您将需要在大厅上使用on failure步骤并将其添加到您的工作中,它看起来像这样

jobs:
- name: myBuild 
  plan:      
  - get: your-repo
    passed: []
    trigger: false
  - task: run-tests
    file: runMyTestsTask.yml   
  on_failure:
  - put: send-an-email
    params:
      subject_text: "Your email subect i.e Failed Build"
      body_text: "Your message when the build has failed"
  on_success:
    put: push-my-build

## Define your additional resources here

resources:
- name: send-an-email
  type: email
  source:
    smtp:
      host: smtp.example.com
      port: "587" # this must be a string
      username: a-user
      password: my-password
    from: build-system@example.com
    to: [ "dev-team@example.com", "product@example.net" ] #optional if `params.additional_recipient` is specified

resource_types:
  - name: email
    type: docker-image
    source:
      repository: pcfseceng/email-resource 

另外,如果您需要输出有关构建的一些相关信息,则可以通过包含一些环境变量来实现,这些环境变量将包装主题元数据,并且可以将其包含在电子邮件的正文中,以获取有关如何处理的更多详细信息。为此,请在https://github.com/pivotal-cf/email-resource上参阅电子邮件资源的文档。

答案 1 :(得分:0)

如果您是running JMeter in command-line non-GUI mode,则命令需要返回non-zero exit status code

即使测试失败,JMeter进程也有0退出代码,因此任何CI系统都将执行视为成功:

enter image description here

如果您正在寻找仅JMeter的解决方案,则可以在测试计划中添加JSR223 Assertion并将以下代码放入“脚本”区域:

if (!prev.isSuccessful()) {
    props.put('failure', 'true')
}

然后将tearDown Thread Group添加到您的测试计划中,并使用以下代码在其中放置JSR223 Sampler

if (props.get('failure').equals('true')) {
    System.exit(1)
}

如果JSR223断言Scope中的任何Sampler失败-整个JMeter进程将以退出代码1完成,任何上游处理系统都将其视为错误。

enter image description here


另一个选择是考虑使用Taurus工具作为JMeter测试的包装器,Taurus提供了灵活的pass/fail criteria subsystem,使您可以定义阈值以考虑测试是否成功。如果超过阈值,Taurus将返回非零退出代码,该代码应由场所(或其他软件)“理解”