2017-02-28 53 views
0

我正在執行maven構建的機器人測試用例。現在這些測試用例需要很多外部python模塊。 當我直接執行它們(pybot)時,一切正常。Maven構建多個python模塊導入錯誤

但是,當我通過maven執行它們時,外部python模塊失敗。

[ ERROR ] Error in file '/home/xyz/robot/tf2jan/Tests/CLI/mycli/mycli_resources.txt': Importing test library '/home/xyz/robot/tf2jan/lib/rest/JsonValidator.py' failed: ImportError: No module named jsonselect 
Traceback (most recent call last): 
    File "/home/xyz/robot/tf2jan/lib/rest/JsonValidator.py", line 6, in <module> 
    from jsonselect import jsonselect 
PYTHONPATH: 
    /usr/lib/python2.7/dist-packages 
    /home/xyz/Downloads/python-jsonpath-rw 
    /home/xyz/Downloads/ply-3.10 
    /home/xyz/.m2/repository/org/robotframework/robotframework/3.0.2/Lib 
    /home/xyz/.m2/repository/org/robotframework/robotframework/3.0.2/robotframework-3.0.2.jar/Lib 

我確實有將它們添加在Maven使用extraPathDirectories這樣的插件配置的選項:

   <plugin> 
         <groupId>org.robotframework</groupId> 
         <artifactId>robotframework-maven-plugin</artifactId> 
         <version>1.4.7</version> 
         <executions> 
          <execution> 
           <goals> 
            <goal>acceptance-test</goal> 
            <goal>verify</goal> 
           </goals> 
           <configuration> 
            <skip>${skipRobotTests}</skip> 
            <testCasesDirectory>/home/xyz/robot/tf2jan/Tests/CLI/mycli</testCasesDirectory> 
            <variableFiles>/home/xyz/robot/tf2jan/etc/environments/mycli_env.py</variableFiles> 
            <outputDirectory>${project.basedir}/target/robotframework-reports/</outputDirectory> 
            <tests>mycli_help_usage</tests> 
            <extraPathDirectories> 
             <extraPathDirectory>/usr/lib/python2.7/dist-packages</extraPathDirectory> 
             <extraPathDirectory>/home/xyz/Downloads/python-jsonpath-rw</extraPathDirectory> 
             <extraPathDirectory>/home/xyz/Downloads/ply-3.10</extraPathDirectory> 
            </extraPathDirectories> 
            <externalRunner> 
             <excludeDependencies>false</excludeDependencies> 
             <jvmArgs> 
              <jvmArg>${surefireArgLine}</jvmArg> 
             </jvmArgs> 
            </externalRunner> 
           </configuration> 
          </execution> 
         </executions> 
       </plugin> 

但是這個解決方案,我將最終路徑,增加過多的模塊,這些模塊會使pom文件複雜化。 是否有任何配置可以自動解決這些模塊依賴關係或任何其他較短的解決方案?

回答

0

我的建議,因爲你沒有在Maven的Python庫依賴管理,就是:

  • 把你的庫在Python
  • 的默認lib目錄添加到您的PYTHONPATH (因爲它是由Maven的檢查,查看輸出PYTHONPATH:)的庫

    編輯的位置,如果你想避免手動安裝到您的CI箱的依賴,你可以試試這個行家插件:

    <plugin> 
          <groupId>com.googlecode.maven-download- plugin</groupId> 
          <artifactId>download-maven-plugin</artifactId> 
          <version>1.3.0</version> 
          <executions> 
           <execution> 
            <id>install-a-dependency</id> 
            <phase>pre-integration-test</phase> 
            <goals> 
             <goal>wget</goal> 
            </goals> 
            <configuration> 
             <url>the_dependency_url</url> 
             <unpack>true</unpack> 
             <outputDirectory>${project.build.directory}/jbpm-3.1.4</outputDirectory> 
             <md5>df65b5642f33676313ebe4d5b69a3fff</md5> 
            </configuration> 
           </execution> 
          </executions> 
    </plugin> 
    

https://github.com/maven-download-plugin/maven-download-plugin

+0

是的,但是對於一個有知道什麼是所需的外部組件。想想在測試套件中添加了新的模塊依賴項時,開發人員可以將其添加到本地PYTHONPATH中,但CI系統不會知道該添加項,並且會失敗構建。 – ASR

+0

但是,如果您向PYTHONPATH中添加諸如「somePath/external-lib-directories」之類的內容,然後將每個外部庫放入此文件夾內,它會不會起作用?還是僅僅是在你的環境中你不能做的事情? – Adonis

+0

這會起作用,而且我當然可以在我的本地環境中執行此操作,但構建和測試套件觸發的CI框是不同的框,並且不受開發團隊的關注。每次添加新的依賴關係時,我們都不應該要求他們添加新模塊。 – ASR