1

Reportportal の統合を Karate バージョン 0.9.5.RC5 で機能させようとしています。結果を Reportportal にプッシュできます。ただし、レポートの手順は順不同であり、reportportal は、以前の障害を適切な欠陥タイプでマークした後でも、正確な自動分析を実行できません。ReportPortal と Karate バージョン 0.9.5.RC5 の統合を行っている人はいますか?

4

3 に答える 3

2

レポート ポータルとのインターフェイスには、次のクラスを使用します: https://github.com/reportportal/agent-java-karate/blob/a84d3bef617f0f7bf479de57a29477b4b84792ae/src/main/java/com/epam/RPReporter.java

そのコミットで、開発者は空手ランナーを変更しましたが、それはやり過ぎだと思います。空手が持っているフックを使用して、ランナーに注入することができます。そのアプローチに従うこともできますが、変更がほとんど必要ない場合があります。

以下は私の見解です。必要に応じて微調整する必要があるかもしれません。startLaunch() と finishLaunch() がコメントされている beforeAll() と afterAll() に注意してください。これは、さまざまなランナーでいくつかの異なる起動を実行するときに、自分のコードが原因です。おそらく、それらのコメントを外したくなるでしょう。

RPReporter クラスにフックを配置したら、簡単にカスタマイズできるようになります。

まだガトリングで遊んでいないことに注意してください。レポート ポータルとの統合をメトリックから除外するために、perfEvent メソッドに何かを追加することをお勧めします。

ランナーにフックを追加するには、ランナー APIの .hook() メソッドを使用するだけです。

public class RPExecutionHook implements ExecutionHook {

    private RPReporter rpReporter;

    public RPExecutionHook2(RPReporter rpReporter) {
        this.rpReporter = rpReporter;
    }


    @Override
    public boolean beforeScenario(Scenario scenario, ScenarioContext context) {
        return true; // make sure you keep this true or it breaks the Karate logic for Scenario Outline
    }

    @Override
    public void afterScenario(ScenarioResult result, ScenarioContext context) {

    }

    @Override
    public boolean beforeFeature(Feature feature, ExecutionContext context) {
        log.debug("Starting new feature: " + feature.getName());
        this.rpReporter.startFeature(context.result);
        return true;
    }

    @Override
    public void afterFeature(FeatureResult result, ExecutionContext context) {
        log.debug("Finishing feature: " + result.getFeature().getName());
        this.rpReporter.finishFeature(context.result);
    }

    @Override
    public void beforeAll(Results results) {
        //this.rpReporter.startLaunch();
    }

    @Override
    public void afterAll(Results results) {
        //this.rpReporter.finishLaunch();
    }

    @Override
    public boolean beforeStep(Step step, ScenarioContext context) {
        return true;
    }

    @Override
    public void afterStep(StepResult result, ScenarioContext context) {

    }

    @Override
    public String getPerfEventName(HttpRequestBuilder req, ScenarioContext context) {
        return null;
    }

    @Override
    public void reportPerfEvent(PerfEvent event) {

    }
}
于 2020-07-19T14:27:31.450 に答える