Как повторно использовать сценарий в цитрусовых рамках? - PullRequest
0 голосов
/ 03 апреля 2019

Я установил этот сценарий тестирования с помощью Citrus Framework. Сейчас я пытаюсь использовать его в других сценариях. Я создаю поведение для каждого шага. Мое поведение в основном http запросы

public class NoProductDocumentValidationScenarioIT {

    private @CitrusResource TestContext parentContext;

    @CitrusEndpoint(name = "todoBasicAuthClient")
    private HttpClient cmsAuthClient;

    @CitrusEndpoint(name = "vdmBasicAuthClient")
    private HttpClient vdmAuthClient;

    @CitrusEndpoint(name = "gvHttpClient")
    private HttpClient gvHttpClient;

    @Test
    @CitrusTest
    public String NoProductDocumentValidation(@CitrusResource TestRunner runner, @CitrusResource TestContext context)
            throws BadNewsMLG2Exception {
        String pdtIdentifier = "EDIT-FR-SVID2-YM9N001479";
        String videoDocument = VideoDocument.setUpVideoDocument("fr", "v1_afptv_sport_broadcast_photos");
        int jobPublicationID = 5;
        // CMS Authentification
        TestBehavior authenticateCMS = new ProductAuthenticationBehavior(cmsAuthClient);
        ApplyTestBehaviorAction authenticateActionCMS = new ApplyTestBehaviorAction(runner, authenticateCMS);
        authenticateActionCMS.doExecute(context);

        // Document Creation
        CreateVideoDocumentBehavior createDoc = new CreateVideoDocumentBehavior(cmsAuthClient, pdtIdentifier,
                videoDocument);
        ApplyTestBehaviorAction createDocAction = new ApplyTestBehaviorAction(runner, createDoc);
        createDocAction.doExecute(context);

        // get document data
        videoDocument = createDoc.getVideoDocument();
        G2VideoDocument g2VideoDocument = ((G2VideoDocument) G2ObjectFactory.parse(videoDocument));
        g2VideoDocument.getProducts();
        String linkToVideoDocument = g2VideoDocument.getLinkToSelf().toString();
        String linkToProject = g2VideoDocument.getLinkToVideoProject().toString();
        String projectID = IrisStringTools.extractIdFromUri(linkToProject);
        String documentID = IrisStringTools.extractIdFromUri(linkToVideoDocument);
        String etag = g2VideoDocument.getEditorialTag();

        // Lock document Metadata
        EditVideoDocumentMetaBehavior lockDocMeta = new EditVideoDocumentMetaBehavior(cmsAuthClient, pdtIdentifier,
                videoDocument, documentID);
        ApplyTestBehaviorAction lockDocMetaAction = new ApplyTestBehaviorAction(runner, lockDocMeta);
        lockDocMetaAction.doExecute(context);
}
}

Я запускаю это в Eclipse как тест JUnit.

Я думал об использовании суперкласса, но это не сработало.

public class ProductDocumentValidationScenarioIT extends NoProductDocumentValidationScenarioIT {

    public String ProductDocumentValidation(@CitrusResource TestRunner runner, @CitrusResource TestContext context)
            throws BadNewsMLG2Exception {
                return something;

    }
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

что мы в итоге сделали, это создали бегуна поведения (класс java), в котором все экземпляры поведения были созданы, а затем в сценарии мы вызываем бегуна поведения с константой поведения, соответствующей нужному мне поведению:

public class BehaviorRunner {
private void doExecute(TestRunner runner, TestContext context, TestBehavior testBehavior) {
    ApplyTestBehaviorAction behaviorAction = new ApplyTestBehaviorAction(runner,testBehavior);
    behaviorAction.doExecute(context);
}

public void execute( String behaviorLabel, @CitrusResource TestRunner runner, @CitrusResource TestContext context) {
    try {
        switch (behaviorLabel) {
            case BehaviorConstants.CREATE_VIDEO_DOCUMENT :
                CreateVideoDocumentBehavior createVideoDocumentBehavior = new CreateVideoDocumentBehavior(cmsAuthClient, pdtIdentifier, VideoDocument.setUpVideoDocument2(LanguageConstants.EN, "v1_afptv_sport_broadcast_photos"));
                doExecute(runner, context, createVideoDocumentBehavior);
                break;
            case BehaviorConstants.MOVIEDRAFT :
                MovieDraftDocumentBehavior movieDraftDocumentBehavior = new MovieDraftDocumentBehavior(cmsAuthClient, pdtIdentifier, 1, g2VideoDoc);
                doExecute(runner, context, movieDraftDocumentBehavior);     
                break;
            case BehaviorConstants.PUBLICATION_PROGRESSION_STATUS:
                GetPublicationProgressionStatusBehavior publicationProgressionStatusBehavior = new GetPublicationProgressionStatusBehavior(vdmAuthClient, pdtIdentifier , g2VideoDoc);
                doExecute(runner, context, publicationProgressionStatusBehavior);   
                break;
            case BehaviorConstants.VALIDATE :
                ValidateDocumentBehavior validateDocumentBehavior = new ValidateDocumentBehavior(cmsAuthClient, pdtIdentifier, g2VideoDoc);
                doExecute(runner, context, validateDocumentBehavior);   
                break;
            default:
                    break;
        }   

у нас получился такой сценарий:

@Test
@CitrusTest
public void NoProductDocumentValidation(@CitrusResource TestRunner runner, @CitrusResource TestContext context) throws BadNewsMLG2Exception {
    slf4jLogger.info("Montage analysis scenario START");
    // execute scenario
    // Document Creation 
    behaviorRunner.execute(BehaviorConstants.CREATE_VIDEO_DOCUMENT, runner, context);
    // Lock document Metadata
    behaviorRunner.execute(BehaviorConstants.EDITOR, runner, context);
    // Lock Document Binary 
    behaviorRunner.execute(BehaviorConstants.BINARY_EDITOR, runner, context);

Это сэкономило нам много строк кода, поскольку мы используем различные комбинации поведения в разных сценариях.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 28 мая 2019

Тест поведения - это путь сюда. Я предлагаю использовать что-то вроде этого

CreateVideoDocumentBehavior createDoc = new CreateVideoDocumentBehavior(cmsAuthClient, pdtIdentifier,
                videoDocument);

runner.applyBehavior(createDoc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...