代码之家  ›  专栏  ›  技术社区  ›  Getek99

当通过testng框架执行时,我的selenium测试不会从cmd或Jenkins运行。结果:运行的测试总数:0,失败数:0,跳过数:0

  •  0
  • Getek99  · 技术社区  · 6 年前

    Selenium和automation的新产品。

    首先,当我使用Junit运行这些测试时,我的测试在Eclipse中运行良好。但如果我通过Jenkins或CLI启动测试,我会得到结果: 运行的测试总数:0,失败数:0,跳过数:0

    现在我可能是把考试的结构弄错了,或者我可能做了一些完全错误的事情。我已经到处查看了,所有在线解决方案似乎都无法解决我的问题。

    我的测试只是一个简单的登录测试。

    我想我可能把这些框架弄混了,或者以错误的方式将它们结合在一起使用。我正在使用Testng启动硒测试 我想 。我再次举手承认我是新手,所以我希望有人能告诉我哪里出了问题。我确实注意到,在实际的selenium测试文件中,我没有使用任何Testng函数或任何东西,只使用selenium web驱动程序。我在下面列出了我的代码文件和测试结果。

    再次道歉,如果我错过了一个简单的步骤,或者我正在尝试一些不可能的事情,我只需要专家的帮助或正确的方向。感谢您提前提供的任何帮助。

    测验

    出于安全原因,我已经删除了实际的URL和Cred。

        package testing;
    
        import static org.junit.Assert.fail;
    
        import java.util.concurrent.TimeUnit;
    
        import org.junit.After;
        import org.junit.Before;
        import org.junit.Test;
        import org.openqa.selenium.Alert;
        import org.openqa.selenium.By;
        import org.openqa.selenium.NoAlertPresentException;
        import org.openqa.selenium.NoSuchElementException;
        import org.openqa.selenium.WebDriver;
        import org.openqa.selenium.firefox.FirefoxDriver;
    
        import org.testng.Assert;
    
    
    
        public class login {
          private WebDriver driver;
          private String baseUrl;
          private boolean acceptNextAlert = true;
          private StringBuffer verificationErrors = new StringBuffer();
    
          @Before
          public void setUp() throws Exception {
            System.setProperty("webdriver.gecko.driver","C:\\gecko\\geckodriver.exe");
            driver = new FirefoxDriver();
            baseUrl = "";
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
          }
    
          @Test
          public void testLogin() throws Exception {
            driver.get(baseUrl + "");
            driver.findElement(By.id("email")).clear();
            d
    
    river.findElement(By.id("email")).sendKeys("");
        driver.findElement(By.id("password")).clear();
        driver.findElement(By.id("password")).sendKeys("");
        driver.findElement(By.xpath("//input[@value='Login »']")).click();
      }
    
      @After
      public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
          fail(verificationErrorString);
        }
      }
    
      private boolean isElementPresent(By by) {
        try {
          driver.findElement(by);
          return true;
        } catch (NoSuchElementException e) {
          return false;
        }
      }
    
      private boolean isAlertPresent() {
        try {
          driver.switchTo().alert();
          return true;
        } catch (NoAlertPresentException e) {
          return false;
        }
      }
    
      private String closeAlertAndGetItsText() {
        try {
          Alert alert = driver.switchTo().alert();
          String alertText = alert.getText();
          if (acceptNextAlert) {
            alert.accept();
          } else {
            alert.dismiss();
          }
          return alertText;
        } finally {
          acceptNextAlert = true;
        }
      }
    }
    

    测试NG。xml

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
        <suite name="Sample Suite">
    
            <test name="Learning Jenkins">
            <classes>
    
                <class name="testing.login"></class>
    
            </classes>
    
        </test>
    
    </suite> 
    

    CLI或Jenkins测试结果

    [TestNG] Running:
      C:\Users\keating99\workspace\FdimTests\testng.xml
    
    
    ===============================================
    Sample Suite
    Total tests run: 0, Failures: 0, Skips: 0
    ===============================================
    
    Finished: SUCCESS
    

    我再次意识到我在实际测试中没有使用任何Testng,但我测试的目的只是启动selenium来运行测试。也许我做得不对。

    selenium测试是有效的,我可以从Eclipse中启动。

    提前感谢您的帮助!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Morfic    6 年前

    虽然这可能更适合作为评论,但有几件事需要澄清,因为 import org.junit.Test, Before, After, etc 表示您已经编写了JUnit测试,但您提到的是TestNG,因此这取决于您真正想要做什么:

    • 编写JUnit测试并通过TestNG执行它们 :虽然有点奇怪(我该评判谁?!),根据 the docs 可以通过确保JUnit在执行期间在类路径中可用,并设置 junit 属性设置为true,例如 <test name=name="Learning Jenkins" junit="true">

    • 编写和执行TestNG测试 :将JUnit导入替换为 TestNG counterparts ,例如 org.testng.annotations.Test

    我再次意识到我在实际测试中没有使用任何Testng,但我测试的目的只是启动selenium来运行测试。也许我做得不对。

    目前您使用的是JUnit,而不是TestNG:-)。无论如何,用 fail(verificationErrorString) 实际上您正在使用它,尽管您的测试可能只是通过验证没有错误消息而不完整。您应该添加一些断言来检查您加载的页面上存在的任何数据是否正确。你可以通过 TestNG-Selenium quick tutorial ,或任何其他你想要的文档,都有很多。简而言之,“良好/完整”测试至少应(描述良好测试的质量 here -您实际上并没有编写单元测试,但它仍然适用):

    • 准备测试的所有条件-例如,加载和启动驱动器
    • 调用/访问测试部分-例如:加载页面,并检索表的内容
    • 验证结果是否正确-例如:确保表格包含预期数据
    • 清理,如回滚修改的数据(如果有)、关闭连接等-例如,关闭驱动程序