当前位置: 首页 > 知识库问答 >
问题:

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

琴俊人
2023-03-14

Selenium和自动化的新概念。

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

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

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

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

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

测试

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

    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;
    }
  }
}

testng.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

我再次意识到我在实际测试中没有使用任何测试,但是我测试的目的是启动硒来运行测试。也许我用错了方法。

硒测试是有效的,我可以从Eclipse内部启动。

提前感谢任何帮助!

共有1个答案

汝吕恭
2023-03-14

虽然这可能更适合作为注释,但有几件事需要澄清,因为导入org.junit.测试、之前、之后等表示您已经编写了JUnit测试,但是您提到了TestNG,所以这取决于您真正的内容想做:

>

编写并执行TestNG测试:用TestNG对应项替换JUnit导入,例如org.testng.annotations.Test

我再次意识到我在实际测试中没有使用任何测试,但是我测试的目的是启动硒来运行测试。也许我用错了方法

目前,您使用的是JUnit,而不是TestNG:-)。不管怎样,使用fail(verificationErrorString)实际上就是在使用它,尽管仅仅通过验证没有错误消息,测试可能是不完整的。您应该添加一些断言,以检查您加载的页面上存在的任何数据是否正确。你可以浏览TestNG Selenium quick教程,或者你喜欢的任何其他文档,它们有很多。简而言之,“好的/完整的”测试至少应该(这里描述的好测试的质量——你实际上并没有编写单元测试,但它仍然适用):

  • 为测试准备所有条件-例如,加载和启动驱动器
  • 调用/访问测试部分-例如:加载页面,检索表的内容
  • 验证结果是否正确-例如:确保表格包含预期数据
  • 清理,例如回滚修改过的数据(如果有)、关闭连接等——例如关闭驱动程序
 类似资料:
  • 我知道这是最常见的问题,有很多解决方案 我知道这会有点长,但想根据以前的经验提供详细信息。 首先要考虑两件重要的事情:(我的测试套件由超过1K个测试用例组成) > 如果我在100个测试用例以下运行,即使在远程机器上也能完美地生成它,但如果超过100个,那么这将导致总测试运行:0,失败:0,跳过:0(因此数据块报告也不会生成,但所有测试用例都能完美地执行) 尝试过的可能性: > 检查了所有方法的@t

  • 我试图通过命令行(Windows env)运行cucumber标签。我正确配置pom.xml和maven。我按下命令就像- D:\apache-maven-3.6.0\bin D:\apache-maven-3.6.0\bin D:\apache-maven-3.6.0\bin 输出如下所述 请建议。 附加了我的pom.xmlCMD输出Eclipse项目结构

  • 我试图在Eclipse中使用Selenium运行TestNG。 当类文件作为TestNG测试运行时,我得到的测试Run=0。 问题会是什么? 我有testNg插件 testng。xml文件: 类: WebDriverTest类: BrowserInstance类: 注: 当我将testing.xml文件作为TestNG Suite运行时,结果是: 当我运行. java文件作为TestNG测试时,结

  • 问题内容: 我正在尝试使用testNG执行我的测试脚本并尝试以下代码,但是在控制台中针对运行,失败和跳过显示0。因此,我无法在脚本中验证结果。 Java: 我正在通过testng.xml文件执行上述脚本。 控制台结果: 问题答案: 您的代码块中有一个小错误。当您在注解中使用和编写方法时,我们应使用定义适当的方法 。我使用了自己的代码,并简单地将 返回类型 添加为 void ,如下所示: 当以方式执

  • 我试图通过testng运行简单的Cucumber/Java测试。xml。 所以,我有testng。xml: 我用的是runner。类,在其中我将路径/选项/etc设置为功能文件、步骤和报告: 但是当我运行testng时。xml作为TestNG套件,它: 1) 通过我自己的设想, 但是 我做错了什么?

  • 考虑一个场景,我在测试一个索赔系统。我想提交报价并检查账单总额。一天两次或两次以上的索赔应该能为我赢得奖金。所以我需要在1次索赔后检查总金额,在2次索赔后再次检查,然后在删除一次索赔后再次检查,依此类推。执行如下- 登录 增加1项索赔 计算应收总额 增加1个索赔 计算应收总额 删除索赔 计算应收总额 注销 我的TestNG. xml看起来像这样- 如前所述,需要在同一测试中多次调用函数“fChec