سؤال

أقوم بإعداد وحدة اختبار التكامل لمشروع ويب جيد الحجم. يتم فصل وحدة اختبار التكامل عن مشروع الويب نفسه ، ولديه POM الخاص به.

تتمثل الفكرة في استخدام Maven-Soapui-plugin لإرسال الطلبات والتحقق من الاستجابة. إعداد soapui-plugin ليس متاعب. ومع ذلك ، أواجه مشكلة في معرفة كيف يمكنني إخبار الرصيف-بلوجين بنشر حرب من مستودع بعيد.

إذا كنت قد فهمت بشكل صحيح ، فإن jetty-maven-plugin لديه خاصية تسمى "u003CwebApp> /u003CwebApp> وهو ما يتيح لي تحديد ملف الحرب للنشر. المشكلة هي أن ملف الحرب غير موجود في الوحدة نفسها.

لقد سمعت أنه يمكنني استخدام المكون الإضافي لمجموعة Maven لاسترداد الحرب من مستودع عبر Artifactid المشاريع ، لكنني لم أكن أتعرف بعد على كيفية القيام بذلك.

هذا ملخص لما أريد:

  1. استرجاع حرب معينة من مستودع أو ما شابه ، على سبيل المثال عبر القطع الأثرية.
  2. نشر هذه الحرب على jetty-maven-plugin (الهدف نشر الحرب؟)
  3. احصل على Maven-Soapui-plugin لتشغيل الاختبارات والإبلاغ عن النتائج مرة أخرى في مرحلة اختبار التكامل.

أنا متأكد من أنني حصلت على خطوة 3 مغطاة ، لكنني غير متأكد من كيفية تحقيق الخطوة 1 و 2.

أي مساعدة يحظى بتقدير كبير

هل كانت مفيدة؟

المحلول

إنها يمكن ممكن للاستخدام dependency:copy لاسترداد الحرب ، قم بتفريغها والحصول على كل شيء يعمل مع مكون Maven Jetty Plugin ، ولكن هذا سيكون اختراقًا وقبيحًا نوعًا ما. حل أنظف هو استخدام مافن البضائع البرنامج المساعد وهذا هو اقتراحي. أدناه ، عينة تبين كيفية استرداد قطعة أثرية الحرب باستخدام إحداثياتها وكيفية نشرها على حاوية رصيف مضمنة باستخدام البضائع:

<dependencies>
  <dependency>
    <groupId>war group id</groupId>
    <artifactId>war artifact id</artifactId>
    <type>war</type>
    <version>war version</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <configuration>
        <!-- Container configuration -->
        <container>
          <containerId>jetty6x</containerId>
          <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
          <deployables>
            <deployable>
              <groupId>war group id</groupId>
              <artifactId>war artifact id</artifactId>
              <type>war</type>
              <properties>
                <context>war context</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
        <!-- Don't wait, execute the tests after the container is started -->
        <wait>false</wait>
      </configuration>
      <executions>
        <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

أخيرًا ، فقط ربط البرنامج المساعد Soapui على integration-test مرحلة.

نصائح أخرى

أفعل نفس الشيء ، جون ، لكنني اتخذت مقاربة مختلفة مع المكون الإضافي الرصيف. أعتقد أن النتيجة النهائية هي نفسها. أقوم بتطوير جناح اختبار تكامل للترشح ضد العديد من حروب خدمة الويب. أنا استخدم dependency:copy في ال package المرحلة ثم قائمة من <contextHandler/>S تكوين ل maven-jetty-plugin:

<project>
    …
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-wars</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>

                        <configuration>
                            <outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory>
                            <stripVersion>true</stripVersion>
                            <artifactItems>
                                …
                                <artifactItem>
                                    <groupId>groupId</groupId>
                                    <artifactId>artifactId</artifactId>
                                    <version>version</version>
                                    <type>war</type>
                                </artifactItem>
                                …
                            </artifactItems>
                        </configuration>
                    </execution>
               </executions>
            </plugin>

            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.1.3.v20100526</version>
                <configuration>
                    …
                    <contextHandlers>
                        …
                        <contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext">
                            <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war>
                            <contextPath>/context</contextPath>
                        </contextHandler>
                    </contextHandlers>
                </configuration>

                <executions>
                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <scanIntervalSeconds>0</scanIntervalSeconds>
                            <daemon>true</daemon>
                        </configuration>
                    </execution>

                    <execution>
                        <id>stop-jetty</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

أفضل إعلان الحروب المختلفة كتبعيات ثم استخدام dependency:copy-dependencies لإعداد wars-to-be-tested الدليل؛ هذا من شأنه أن يسمح لمفاعل Maven بمعرفة أنه يحتاج إلى إنشاء وحدة اختبار التكامل الخاصة بي بعد الحروب التي سيتم اختبارها. كانت المشكلة التي واجهتها هي أن المكون الإضافي Jetty اعتقدت أنني أردت "تراكب" جميع الحروب التي تم إدراجها على أنها تبعيات (مفهوم لم أسمع به أبدًا حتى رأيت ذلك) ؛ لا أعرف ما إذا كان السماح بحدوث ذلك سيؤذي أي شيء ، لكنني لم يعجبني ، لذلك ذهبت مع dependency:copy طريقة.

هذا مجرد بديل لاستخدام البضائع. سأبحث في ذلك بنفسي ، لكنني أردت فقط تقديم طريقة أخرى للقيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top