如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?

Posted

技术标签:

【中文标题】如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?【英文标题】:How can I get my gradle test task to use python pip install for library that isn't on maven central? 【发布时间】:2017-01-24 00:01:37 【问题描述】:

我正在尝试设置一个将运行机器人测试的 gradle 任务。 Robot 使用 python 库与 Selenium 交互,以便通过浏览器测试网页。但不幸的是,安装https://github.com/robotframework/Selenium2Library 的唯一方法似乎是通过 pip - pip install robotframework-selenium2library。有没有办法让 Gradle 在我的任务中运行这个命令?

这是我所拥有的:

build.gradle:

configurations 
    //...
    acceptanceTestRuntime extendsFrom testCompile, runtime

dependencies 
    //...
    acceptanceTestRuntime group: 'org.robotframework', name: 'robotframework', version: '2.8.7'
    //The following doesn't work, apparently this library isn't on maven...
    //acceptanceTestRuntime group: 'org.robotframework', name: 'Selenium2Library', version: '1.+'

sourceSets 
    //...
    acceptanceTest 
        runtimeClasspath = sourceSets.test.output + configurations.acceptanceTestRuntime
    

task acceptanceTest(type: JavaExec) 
    classpath = sourceSets.acceptanceTest.runtimeClasspath
    main = 'org.robotframework.RobotFramework'
    args '--variable', 'BROWSER:gc'
    args '--outputdir', 'target'
    args 'src/testAcceptance'

我的机器人资源文件 - login.resource.robot:

*** Settings ***
Documentation   A resource file for my example login page test.
Library         Selenium2Library

*** Variables ***
$SERVER           localhost:8080
(etc.)

*** Keywords ***
Open Browser to Login Page
    Open Browser    $LOGIN_URL    $BROWSER
    Maximize Browser Window
    Set Selenium Speed  $DELAY
    Login Page Should Be Open

Login Page Should Be Open
    Location Should Be     $LOGIN_URL

当我运行这个任务时,我的机器人测试运行了,但它们失败了。因为在robotframework-selenium2Library 中定义的某些关键字无法识别,例如“打开浏览器”,因此会引发异常。

我怎样才能让 gradle 为这个任务导入这个 selenium 库?我可以通过一些python插件安装和调用pip吗?

【问题讨论】:

【参考方案1】:

我不得不使用一个 gradle Exec 任务来运行一个 python 脚本,然后启动机器人测试。所以它看起来像这样:

build.gradle

task acceptanceTest(type: Exec) 
    workingDir 'src/testAcceptance'
    commandLine 'python', 'run.py'

src/testAcceptance/run.py

import os
import robot
import setup 
#Which runs setup.py

os.environ['ROBOT_OPTIONS'] = '--variable BROWSER.gc --outputdir results'
robot.run('.')

src/testAcceptance/setup.py

import os
import sys
import pip
import re

pip.main(['install', 'robotframework==3.0'])
pip.main(['install', 'robotframework-selenium2library==1.8.0'])
# Checksums can be looked up by chromedriver version here - http://chromedriver.storage.googleapis.com/index.html
pip.main(['install', '--upgrade', 'chromedriver_installer',
    '--install-option=--chromedriver-version=2.24',
    '--install-option=--chromedriver-checksums=1a46c83926f891d502427df10b4646b9,d117b66fac514344eaf80691ae9a4687,' +
    'c56e41bdc769ad2c31225b8495fc1a93,8e6b6d358f1b919a0d1369f90d61e1a4'])

#Add the Scripts dir to the path, since that's where the chromedriver is installed
scriptsDir = re.sub('[A-Za-z0-9\\.]+$', '', sys.executable) + 'Scripts'
os.environ['PATH'] += os.pathsep + scriptsDir

【讨论】:

以上是关于如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle Exec 任务不在远程主机上以 psql 开头

如何通过 gradle 测试任务执行测试方法?

异常:Gradle 任务 assembleDebug 失败,退出代码为 1(在 web 上运行但不在模拟器上)

Gradle 分发任务输出文件不在 ZIP 的根目录下

Gradle测试任务,如何设置Spring Boot环境进行测试?

如何使用Gradle中的不同资源文件夹为每个flavor创建两个应用程序?