2011-12-15 11 views
16

मैं अपने मैवेन सीआई पर्यावरण में जेएस यूनिट परीक्षण करने का सबसे अच्छा तरीका जांच रहा हूं।मैवेन/कुनिट/फैंटोमज को एकीकृत करने का बेहतर तरीका?

  • qunit संसाधनों (जे एस/सीएसएस फ़ाइलें) एचटीएमएल स्थिरता के साथ
  • qunit परीक्षण html फ़ाइलें (परीक्षण के अंतर्गत प्रत्येक फ़ाइल के लिए एक) यदि
  • आवश्यक: क्या मैं वर्तमान में एक साथ पत्थर है मेरी Maven परियोजना में निम्नलिखित है
  • सूचकांक html फ़ाइल का संदर्भ जो हाइपरलिंक
  • PhantomJS धावक फ़ाइल का आदेश दिया सूची है, जो के रूप में परीक्षण html फ़ाइलें:
    • सूचकांक html फ़ाइल को खोलता है और परीक्षण फ़ाइलों की सूची से बाहर पार्स
    • प्रत्येक परीक्षा फ़ाइल
    • प्रत्येक फ़ाइल के लिए qunit परीक्षण के परिणाम का एक स्क्रीनशॉट लेता खोलता
    • अगर कोई विफलताओं, "1" की स्थिति के साथ बाहर निकलें हैं
    • अगर कोई विफलताओं, की स्थिति के साथ बाहर निकलें हैं "0"
  • खोल फ़ाइल जिसके साथ बाहर निकल जाएगा "0" phantomjs स्थापित नहीं है अगर, phantomjs परीक्षण अगर यह
  • परिवर्तन स्थापित किया गया है फोन करेगा परीक्षण के चरण के दौरान phantomjs परीक्षण चलाने के लिए pom.xml करने के लिए निर्माण का:

    <plugins> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>exec-maven-plugin</artifactId> 
         <version>1.1</version> 
         <executions> 
          <execution> 
           <id>PhantomJS Unit Testing</id> 
           <phase>test</phase> 
           <goals> 
            <goal>exec</goal> 
           </goals> 
          </execution> 
         </executions> 
         <configuration> 
          <executable>${project.basedir}/src/main/webapp/unittest/phantomcheck</executable> 
          <arguments> 
           <argument>${project.basedir}/src/main/webapp/unittest/qunit-runner.js</argument> 
           <argument>${project.basedir}/src/main/webapp/unittest/tests/index.html</argument> 
           <argument>${project.build.directory}/surefire-reports</argument> 
          </arguments> 
         </configuration> 
        </plugin> 
    </plugins> 
    

तो, यह अच्छी तरह से काम करता है। यह हमारे देव और निर्माण मशीनों (जब तक फैंटॉमजेएस स्थापित है) के निर्माण के दौरान कुनीट परीक्षण चलाता है। परीक्षण एक हेडलेस ब्राउज़र वातावरण में चलते हैं जिसमें कुनिट परीक्षणों पर कोई प्रतिबंध नहीं होता है। राइनो, या अन्य जेएस वातावरण में परीक्षण चलाने के कारण मैंने देखा है कि अन्य मेवेन/कुनीट इंटीग्रेशंस जो हम लिख सकते हैं परीक्षणों के प्रकार पर प्रतिबंध लगाते हैं। प्लस फैंटोमज हमें परीक्षण रनों के स्क्रीनशॉट रखने की क्षमता देता है, जो किसी भी विफलताओं की समस्या निवारण में सहायक होते हैं।

मेरे दृष्टिकोण की कमी यह है कि निर्माण/dev मशीन पर एक PhantomJS स्थापना की आवश्यकता है। मुझे नहीं पता कि कैसे फैंटॉमजेएस को निर्भरता में बंडल करना है कि डेवलपर्स को फैंटॉमजेएस स्थापित करने की चिंता करने की आवश्यकता नहीं है। क्या कोई मुझे इस दिशा में धक्का दे सकता है? मैं कैसे शुरू करूँ?

+0

चेक बाहर मेरी Maven प्लगइन (phantomjs -qunit-धावक)। http://code.google.com/p/phantomjs-qunit-runner/ यहाँ उपयोग पर विवरण: http://kennychua.net/blog/running-qunit-tests-in-a-maven-continuous-integration- निर्माण-साथ-phantomjs –

+0

@KennyChua: प्रश्न प्रश्नकर्ता एक निर्भरता के रूप में PhantomJS को डाउनलोड करने के लिए एक उपकरण चाहता है और अपने प्लगइन ऐसा नहीं करती है। :-( –

+0

हो सकता है कि इस लेख मदद कर सकते हैं http://www.yegor256.com/2014/06/21/casperjs-with-maven.html – yegor256

उत्तर

1

हम सिर्फ स्रोत नियंत्रण में phantomJS.exe की जांच करते हैं। और फिर हम निश्चित हैं कि सभी मशीनों पर फैंटॉमजेएस का एक ही संस्करण इस्तेमाल किया जा रहा है।

+0

आम तौर पर, आप स्रोत नियंत्रण में बड़ी बाइनरी फ़ाइलों की जांच से बचना चाहते हैं। द्विआधारी निर्भरताओं को डाउनलोड करने के लिए एक आसान ढांचा प्रदान करके मैवेन पहली जगह में हल करने की कोशिश कर रहा है। –

+0

सीआई के लिए एक सामान्य नियम स्रोत नियंत्रण के तहत अपने सॉफ्टवेयर को बनाने और परीक्षण करने के लिए आवश्यक सब कुछ रखना है। तो एक ताजा मशीन पर आप केवल उस कोड का संस्करण प्राप्त कर सकते हैं जिसकी आपको आवश्यकता है, और मैन्युअल रूप से किसी भी उपकरण को इंस्टॉल किए बिना इसे बनाएं। हम कुछ फ्रेमवर्क निर्भरताओं में मदद के लिए NuGet पैकेज प्रबंधक का उपयोग करते हैं, लेकिन सभी टूल्स उपलब्ध नहीं हैं। स्रोत नियंत्रण में phantonJS.exe होने से हम सुनिश्चित हो सकते हैं कि प्रत्येक बिल्ड एक ही संस्करण का उपयोग कर रहा है, और एक अतिरिक्त बोनस के रूप में हमारे पास अतिरिक्त भंडार पर निर्भरता नहीं है - केवल हमारे स्वयं के स्रोत नियंत्रण प्रणाली को उपलब्ध होना आवश्यक है। – GarethOwen

0

यह एक पुरानी सवाल है, लेकिन मैंने सोचा कि मैं मेरा एक परियोजना TestNG साथ चलाने के लिए PhantomJS और QUnit का उपयोग करता है से लिंक होगा:

परियोजना qunit-testng कहा जाता है। मेरे पास sample project भी है जो उपयोग में लाइब्रेरी दिखाता है।

यहां परीक्षण उत्पादन का एक स्क्रीनशॉट है:

enter image description here

5

phantomjs-maven-plugin ताकि आप इसे पहले से स्थापित की जरूरत नहीं है phantomjs स्थापित करने के लिए एक install लक्ष्य प्रदान करता है। इसे phantomjs इंस्टॉल करने के बाद यह निष्पादन योग्य के पथ के साथ एक संपत्ति सेट करता है कि अन्य प्लगइन्स तब उपयोग कर सकते हैं। इसमें phantomjs स्क्रिप्ट निष्पादित करने के लिए exec लक्ष्य भी है। पूर्ण प्रकटीकरण: मैंने प्लगइन लिखा था।

+1

महान प्लगइन के लिए धन्यवाद, मैं अपने लिए इस मुद्दे को हल करने के लिए इसका उपयोग करने में सक्षम था, और एक अच्छा जवाब लिख रहा था। :) –

+0

@ प्लगइन बनाने के द्वारा @ केली महान काम .... @ जोनाथन-बेन मैं आपकी प्लगइन का उपयोग सटीक तरीके से कर रहा हूं जैसा कि जिथब पर वर्णित है, लेकिन इसे काम नहीं कर सका ..... कृपया यहां जांचें समस्या और मुझे यह पता लगाने में मदद करें कि मेरे pom.xml में क्या गलत है http://stackoverflow.com/q/32678881/2079692 –

+0

@ केली कैसे निर्माण प्रक्रिया के दौरान फ़ैंटोमज-मेवेन-प्लगइन का आह्वान किया जाता है और यह बाइनरी को कहां स्थापित करता है जावा-प्रोजेक्ट? क्या मैं इसे एक कस्टम स्थान का उपयोग करने के लिए सेट कर सकता हूं? –

2

Kyle के जवाब पर बिल्डिंग मैं इस मुद्दे पर एक ठोस समाधान खोजने के लिए सक्षम था। धन्यवाद केली!

समाधान phantomjs-maven-plugin मेवेन प्लगइन का उपयोग करना है। मैं बहुत तरह मेरे pom.xml प्लग-इन जोड़ना (आप v3.1 या उच्चतर के लिए Maven उन्नत करने के लिए प्लगइन का उपयोग करने की आवश्यकता होगी):

<plugin> 
    <groupId>com.github.klieber</groupId> 
    <artifactId>phantomjs-maven-plugin</artifactId> 
    <version>0.4</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>install</goal> 
       <goal>exec</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <version>1.9.7</version> 
     <checkSystemPath>false</checkSystemPath> 
     <script>src/test/qunit/run-qunit-testsuite.js</script> 
     <arguments> 
      <argument>src/test/qunit/testsuite.qunit.html</argument> 
     </arguments> 
    </configuration> 
</plugin> 

महत्वपूर्ण चेतावनी: उपरोक्त pom.xml कोड में, जैसा कि मैंने किया है, फ़ाइलों के सापेक्ष (पूर्ण नहीं) संदर्भों का उपयोग करना सुनिश्चित करें। मैं निरपेक्ष संदर्भों उपयोग करने के बाद कुछ ही घंटों (${basedir} से शुरु करके) केवल पता लगाने के लिए कि यह PhantomJS कार्यशील निर्देशिका के लिए कुछ अजीब होता है बर्बाद किया। अपने pom.xml में सापेक्ष संदर्भों का उपयोग करने से आपकी HTML फ़ाइल के अंदर सापेक्ष संदर्भ सक्षम होंगे (जो कोड पोर्टेबिलिटी को अधिकतम करेगा)।

उपरोक्त प्लगइन कोड में, मैं दो फाइलों का संदर्भ देता हूं: run-qunit-testsuite.js और testsuite.qunit.html। एचटीएमएल फाइल केवल क्विनिट फ़ाइल है जो आपके सभी परीक्षण निष्पादित करती है। जेएस फाइल फैंटॉमजेएस के लिए ड्राइवर है; यह एक तर्क स्वीकार करता है: HTML QUnit परीक्षण फ़ाइल लोड करने के लिए।

इस समाधान को पूरा करने के लिए आपको GMarik's GitHub Gist page से नमूना ड्राइवर और परीक्षण फ़ाइलों को डाउनलोड कर सकते हैं। आप इन फ़ाइलों को अपनी जरूरतों के अनुसार अनुकूलित और अनुकूलित कर सकते हैं (हालांकि इस बात से अवगत रहें कि जीमैरिक के पृष्ठ में ओपन सोर्स लाइसेंस शामिल नहीं है, आपको किसी कॉपीराइट-उल्लंघनकारी उपयोग के लिए अनुमति मांगनी होगी)।

जब आपके Maven कोड के लिए इस प्लगइन जोड़ने, एक Maven का निर्माण आप की तरह (GMarik के पृष्ठ से अनुकूलित) निम्न उत्पादन देखेंगे को क्रियान्वित करने के बाद:

[INFO] --- phantomjs-maven-plugin:0.4:exec (default) @ project.name --- 
[INFO] Executing phantomjs command 
'waitFor()' finished in 200ms. 
Tests completed in 21 milliseconds. 
5 tests of 5 passed, 0 failed. 

परीक्षण पास तो अपने निर्माण पारित करेंगे। यदि परीक्षण विफल हो जाते हैं तो आपका निर्माण असफल हो जाएगा!

+0

हाय @ जोनाथन। मैंने आपके द्वारा प्रस्तावित सभी चरणों का पालन किया है लेकिन फिर भी यह मेरे लिए काम नहीं कर रहा है। किसी कारण से मेरी HTML फ़ाइल में कोई भी परीक्षण निष्पादित नहीं किया गया है – prgrmr

+0

@ideate क्या आपने नियमित ब्राउज़र में परीक्षण निष्पादित करने का प्रयास किया है? क्या ब्राउज़र में परीक्षण निष्पादित होते हैं? क्या आप क्वीनिट का उपयोग कर रहे हैं? मैंने केवल क्विनिट के साथ इसका परीक्षण किया। –

+0

हां परीक्षण एक ब्राउज़र में ठीक निष्पादित करते हैं और क्विंट का उपयोग कर रहे हैं। समस्या यह है कि मैंने जीमैरिक के गीथब पेज से नमूना चालक का उपयोग किया और मुझे लगता है कि यह मेरे लिए काम नहीं कर रहा है। – prgrmr

2

केली का जवाब और एक अन्य प्लगइन मैं एक पूर्ण समाधान है कि कुछ भी आवश्यकता नहीं है प्राप्त करने में सक्षम था, लेकिन Maven पूर्व-स्थापित और परीक्षण के संचालन की अनुमति देने के phantomjs और qunit सेट का उपयोग करना। मैं एक Maven-घुरघुराना प्लगइन (github.com/eirslett/frontend-maven-plugin) के साथ शुरू कर दिया और यह सेट करने के लिए इस गाइड (http://blog.trifork.com/2014/10/07/setting-up-maven-to-use-gruntnodejs/) में चरणों का पालन किया। तब मैं Maven भीतर qunit का उपयोग करने की कोशिश की और मैं phantomjs मुसीबत में पड़ गए और इस पोस्ट में आए और केली के प्लगइन (github.com/klieber/phantomjs-maven-plugin) के बारे में पता चला। मुझे इस गाइड में वर्णित कस्टम क्यूनेट स्रोत का उपयोग करना पड़ा (http://techblog.dorogin.com/2013/08/issues-with-grunt-contrib-qunit.html)। इसने मुझे phantomjs स्थापित करने के लिए kyles प्लगइन का उपयोग करने की अनुमति दी, फिर कस्टम qunit में grunt विकल्पों के माध्यम से बाइनरी लिंक। अंत में मेरी पोम देखा की तरह:

` <plugin> 
     <groupId>com.github.klieber</groupId> 
     <artifactId>phantomjs-maven-plugin</artifactId> 
     <version>0.4</version> 
     <executions> 
      <execution> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>install</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <version>1.9.8</version> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>com.github.eirslett</groupId> 
     <artifactId>frontend-maven-plugin</artifactId> 
     <version>0.0.20</version> 
     <executions> 
      <execution> 
      <id>install node and npm</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>install-node-and-npm</goal> 
      </goals> 
      <configuration> 
       <nodeVersion>v0.10.33</nodeVersion> 
       <npmVersion>1.3.6</npmVersion> 
      </configuration> 
      </execution> 
      <execution> 
      <id>npm install</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>npm</goal> 
      </goals> 
      <configuration> 
       <arguments>install</arguments> 
      </configuration> 
      </execution> 
      <execution> 
      <id>grunt build</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>grunt</goal> 
      </goals> 
      <configuration> 
       <arguments>--phantomPath=${phantomjs.binary}</arguments> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
` 

मेरे Gruntfile.js की तरह देखा:

` module.exports = function(grunt) { 
     grunt.loadNpmTasks('grunt-croc-qunit'); 
     grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     qunit: { 
     options: { 
      'phantomPath': grunt.option('phantomPath') 
     }, 
     all:['src/test/*.html'] 
     } 
    }); 
    grunt.registerTask('default',['qunit']); 
};` 

और मेरे package.json देखा की तरह:

` { 
    "name":"reporting", 
    "version":"0.0.1", 
    "dependencies": { 
    "grunt": "~0.4.5", 
    "grunt-cli": "~0.1.13", 
    "grunt-croc-qunit":"~0.3.0" 
    }, 
    "devDependencies":{ } 
}` 
+0

स्वरूपण के बारे में भी खेद है। यह मेरी पहली पोस्ट थी – samroxsox

संबंधित मुद्दे