代码之家  ›  专栏  ›  技术社区  ›  Jaw. M.

生成失败,出现异常。Java语言将参数传递给Gradle时lang.AssertionError

  •  1
  • Jaw. M.  · 技术社区  · 7 年前

    我有一个关于向gradle构建脚本传递参数的问题。 首先,我有一个selenium测试类:

    public class TestHH extends HHTest{
    
        @Parameters({ "platform", "browser", "version"})
        @BeforeTest(alwaysRun = true)
        public void setup(String platform, String browser, String url, String version) throws MalformedURLException {
            DesiredCapabilities caps = new DesiredCapabilities();
            caps.setPlatform(org.openqa.selenium.Platform.WIN10);
            System.setProperty("java.net.preferIPv4stack", "true");
            caps.setCapability("SeleniumTests", "redhat5 && amd64");
    
            assertEquals(System.getProperty(url), url);
    
            if (browser.equalsIgnoreCase("firefox")) {
                System.out.println("Executing on Firefox");
                String Hub = "http://localhost:4444/wd/hub";
    
                caps = DesiredCapabilities.firefox();
                caps.setBrowserName("firefox");
    
                System.setProperty("webdriver.gecko.driver", "/opt/geckodriver.exe");
    
                driver = new RemoteWebDriver(new URL(Hub), caps);
    
                driver.navigate().to(url);
                driver.manage().window().maximize();
    
            } else if (browser.equalsIgnoreCase("chrome")) {
                System.out.println("Executing on Chrome");
                String Hub = "http://localhost:4444/wd/hub";
    
                caps = DesiredCapabilities.chrome();
                caps.setBrowserName("chrome");
                ChromeOptions options = new ChromeOptions();
                System.setProperty("webdriver.chrome.driver", "/opt/chromedriver.exe");
                caps.setCapability(ChromeOptions.CAPABILITY, options);
    
                options.addArguments("--start-maximized");
                driver = new RemoteWebDriver(new URL(Hub), caps);
                driver.navigate().to(url);
            } else {
                throw new IllegalArgumentException("The Browser Type is undefined");
            }
        }
    

    这是我的身材。gradle脚本:

    apply plugin: 'java'
    apply plugin: 'eclipse'
    
    
    jar {
        version  '1.0'
        baseName 'SeleniumStarter'
        extension '.jar'
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    
    description = ""
    
    repositories {
    
        mavenCentral()
        mavenLocal() 
    }
    
    ext.seleniumVersion = '3.7.1'
    
    dependencies {
        compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-server', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-edge-driver', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-firefox-driver', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-api', version:seleniumVersion
        compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version:seleniumVersion
    
        compile group: 'org.uncommons', name: 'reportng', version:'1.1.4'
        testCompile group: 'junit', name: 'junit', version:'4.12'
        testCompile group: 'org.testng', name: 'testng', version:'6.11'
    }
    
    test {
    
        systemProperties(System.getProperties())
         println 'test'
         println System.properties['url'] // print for testing purposes 
    
         systemProperty 'url', System.getProperty('url')
         useTestNG() {
           suites 'src/test/resources/TestHH.xml'
    
         }
    
     }
    
    eclipse {
      classpath {
      containers 'org.springsource.ide.eclipse.gradle.classpathcontainer'}
    }
    
    // A custom task to show report on tests that have run
    task viewResults(dependsOn: ['test'] , type:Exec) {
            workingDir './build/reports/tests'      
            commandLine 'cmd', '/c', 'start index.html' 
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = '2.10' //we want gradle 2.10 to run this project
    }
    
    task logInfo (dependsOn: test){
        logging.captureStandardOutput LogLevel.INFO
        doLast {
    
            println 'test'
            println System.properties['url']
            println 'url'
    
    
    
        }
    
    }
    

    我试图使用gradle命令传递的参数是url。 我使用testng xml文件传递其他参数,如平台、浏览器、版本。

    我启动以下命令来传递所需的参数,但它不起作用。

      gradle test -Durl="http://live-test1.hamburg.de"
    

    它在没有任何url的情况下启动Firefox和Chrome。

    启动上述命令后,我将获得此输出,但出现异常:

    FAILURE: Build failed with an exception.
    java.lang.AssertionError
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Krishnan Mahadevan    7 年前

    问题在于您的代码。

    问题的症结在于 setup() 方法

    你有

    assertEquals(System.getProperty(url), url);
    

    这条线的问题是 System.getProperty() 接受字符串常量作为键,它将为其检索值。

    gradle test -Durl="http://live-test1.hamburg.de"
    

    注意,这里JVM参数的名称是“url”

    java代码应该通过以下方式读取此JVM参数的值

    System.getProperty("url")
    

    而不是通过

    System.getProperty(url)
    

    前一条语句指示Java查询 "url" 从传递的JVM参数列表中。

    后一条语句指示Java从JVM参数列表中查询一个键,该键可以是 url 是一个变量]。

    所以请改变

    assertEquals(System.getProperty(url),url);
    

    assertEquals(System.getProperty("url"), url);
    

    我还注意到,您的 安装程序() 方法

    当前的内容为

    @Parameters({ "platform", "browser", "version"})
    @BeforeTest(alwaysRun = true)
    public void setup(String platform, String browser, String url, String version) throws MalformedURLException {
    ...
    }
    

    因此,您指示testing从它找到的内容中注入3个参数值 <parameters> 值,但您的方法实际上包含4个参数。所以TestNG不知道为变量注入什么 String url 从而抛出如下所示的异常

    org.testng.TestNGException: 
    Parameter 'url' is required by BeforeTest on method beforeTest but has not been marked @Optional or defined
    
        2
  •  1
  •   undetected Selenium    5 年前

    您看到的错误说明了一切:

    java.lang.AssertionError
    

    您已尝试调用 System.getProperty(url) 在该行中:

    assertEquals(System.getProperty(url), url);
    

    如果你看看 Java文档 System Properties 这个 属性 对象支持以下内容 系统属性 :

    • "file.separator"
    • "java.class.path"
    • "java.home"
    • "java.vendor"
    • "java.vendor.url"
    • "java.version"
    • "line.separator"
    • "os.arch"
    • "os.name"
    • "os.version"
    • "path.separator"
    • "user.dir"
    • "user.home"
    • ""user.name""

    很明显, 系统getProperty(url) 不是有效的 表示 无效的 或a 空指针异常 )不是的有效参数类型 assertEquals . 因此 资产质量 失败 你会看到 Java语言lang.AssertionError .