TestNG 跳过测试 - 为什么?

2024-02-28

我正在使用 testng 和 selenium 测试一个网络应用程序。测试主要包括打开应用程序的几个页面,并针对每个页面执行一些特定的活动。因此,我有一个执行“打开页面”测试的抽象基类,并定义了一个用作该测试的数据提供程序的抽象方法。然后有几个扩展类为数据提供者提供实现,并且除了基类之外还有几个不同的测试。我有一个 testsuite.xml,其中包含所有类,这是我从 eclipse 运行的。

问题是,当我启动测试执行时, testng 在所有对象的基类中运行测试,但系统地跳过扩展类中的所有其他测试。有谁知道为什么?任何信息将不胜感激...

为了完整信息,以下是我使用的一些类和 xml:

基类:

public abstract class BaseWebAppPageTest {

    @Test(dataProvider="getMenuLink")
    public void testOpen(String menulink){
        GenericPageActions.openPage(TestingContext.getSelenium(), menulink);
    }

    protected abstract String[][] getMenuLink();

}

还有一些扩展类:

测试语言:

public class TestLanguages extends BaseWebAppPageTest{

    @Test(dependsOnMethods={"testOpen"}, dataProvider="getCreateData")
    public void testCreateCorrect(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.create(selenium, code, description, textDirection, flag);
    Assert.assertTrue(selenium.isTextPresent("Successfully created language"));
    }

    @Test(dependsOnMethods={"testCreateCorrect"}, dataProvider="getCreateData")
    public void testFilter(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.filterTable(selenium, 2, code, 30000);
    Assert.assertTrue(selenium.getXpathCount("xpath=//span[.='"+code+"']").intValue() == 1);
    }

    @Test(dependsOnMethods={"testCreateCorrect"}, dataProvider="getCreateData")
    public void testModify(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.modify(TestingContext.getSelenium(), code, description, textDirection, flag);
        Assert.assertTrue(selenium.isTextPresent("Successfully updated language"));
    }

    @Override
    @DataProvider
    protected String[][] getMenuLink() {
        return(TestingContext.getDataReader().getTableArray("openviewpage", "MULTILINGUAL_LANGUAGES"));
    }

    @DataProvider
    protected String[][] getCreateData() {
        return(TestingContext.getDataReader().getTableArray("multilingualcreate", "LANGUAGES"));
    }

}

测试翻译:

public class TestTranslations extends BaseWebAppPageTest{

@Test(dependsOnMethods={"testOpen"}, dataProvider="getCreateData")
public void createCorrect(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.create(selenium, code, targetLanguage, translation);
    Assert.assertTrue(selenium.isTextPresent("Successfully created translation"));
}

@Test(dependsOnMethods={"createCorrect"}, dataProvider="getCreateData")
public void update(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.update(selenium, code, targetLanguage, translation);
    Assert.assertTrue(selenium.isTextPresent("Successfully updated translation"));
}

@Test(dependsOnMethods={"createCorrect"}, dataProvider="getCreateData")
public void filter(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.filterTable(selenium, 2, code, 30000);
    Assert.assertTrue(selenium.isElementPresent("xpath=//span[.='"+translation+"']"));
}

@Override
@DataProvider
protected String[][] getMenuLink() {
    return(TestingContext.getDataReader().getTableArray("openviewpage", "MULTILINGUAL_TRANSLATIONS"));
}

@DataProvider
protected String[][] getCreateData() {
    return(TestingContext.getDataReader().getTableArray("multilingualcreate", "TRANSLATIONS"));
}

}

最后是 TestSuite.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
    <suite name="WebAppSuiteTest" parallel="none">
      <parameter name="selenium.host" value="localhost" />
      <parameter name="selenium.port" value="5555" />
      <parameter name="selenium.browser" value="*firefox3 C:\\Documents and Settings\\dgarcia\\Local Settings\\Application Data\\Mozilla Firefox\\firefox.exe" />
      <parameter name="selenium.url" value="http://localhost:8080/standard-webapp-war/home.seam" />
      <parameter name="selenium.timeout" value="1000000" />
      <parameter name="test.data.filepath" value="src\\test\\resources\\datatest_.xls" />

  <test name="standard" preserve-order="true" >
    <classes>
        <class name="com.standard.webapp.common.TestingContext" />      
        <class name="com.standard.webapp.login.TestLogin"/>
        <class name="com.standard.webapp.TestLanguages"/>
        <class name="com.standard.webapp.TestTranslations"/>
        </class>
    </classes>
  </test>
</suite>

输出没有异常,也没有任何理由跳过这些测试。我不太确定您提到的输出,因此我将在此处粘贴生成的“myWebAppTest.xml”的内容以及测试结果:

<testsuite hostname="SP2L0044" name="com.sicpa.standard.dms.webapp.selenium.common.BaseWebAppPageTest" tests="14" failures="0" timestamp="4 Mar 2011 08:45:57 GMT" time="27.141" errors="0">
  <testcase name="testLoginLoadHome" time="2.188" classname="com.sicpa.standard.dms.webapp.selenium.login.TestLogin"/>
  <testcase name="testCreateCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testFilter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testUpdate" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testView" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testCreateCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="testFilter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="testModify" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="createCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="filter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="update" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="testOpen" time="2.297" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages"/>
  <testcase name="testOpen" time="12.61" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes"/>
  <testcase name="testOpen" time="9.469" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations"/>
</testsuite>

TestNG 跳过测试的原因有多种,最常见的原因是您所依赖的方法(例如 testOpen 或 createCorrect)以某种方式失败。

我建议将详细级别设置为 10 并将输出粘贴到此处或 testng-users 邮件列表上。

如果您使用 XML 定义,请设置详细级别,如下所示:<suite name="sweet_suite" verbose="10">。详细级别也可以通过代码配置来设置。

TestNG tng = new TestNG();
XmlSuite suite = new XmlSuite();

suite.setVerbose(10);

// other configuration, add tests to run

List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add( suite );
tng.setXmlSuites(suites);
tng.run();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TestNG 跳过测试 - 为什么? 的相关文章

随机推荐

  • 在 try catch 中访问变量

    我在返回 menuFont 行上不断收到编译错误 它表示没有变量 menuFont 有人可以告诉我如何解决这个问题吗 import java awt Font import java awt FontFormatException impo
  • 发送电子邮件的代码

    我在这里做错了什么 private void SendMail string from string body string mailServerName plus pop mail yahoo com MailMessage messag
  • 删除字符串中的空格

    我必须摆脱超过 1 个空格也就是说 如果有超过 1 个空格 我会将其替换为单个空格 这就是我的做法 但我真的很困惑哪种方法是最好的方法以及所有这些方法有什么区别 下面是我的代码 public class SspaceDemo public
  • 已弃用的 API 和旧版 API 之间的区别?

    我正在研究 Java 中的遗留 APICollection Framework我了解到诸如此类的课程Vector and HashTable已被取代ArrayList and HashMap 然而 它们仍然没有被弃用 并且被视为遗留 本质上
  • WordPress 的 Docker 运行缓慢

    Problem 我在使用 WordPress 和 Docker 时遇到问题 因为我的网站加载时间很慢 7 秒 我不确定为什么会发生这种情况 但我认为这与外部数据库或共享卷有关 Setup 我有一个使用 XDebug 和 Mailhog 在
  • C++ - 如何找到整数的长度

    我试图找到一种方法来查找整数的长度 位数 然后将其放入整数数组中 该作业还要求在不使用 STL 中的类的情况下执行此操作 尽管程序规范确实说我们可以使用 通用 C 库 我会问我的教授是否可以使用 cmath 因为我假设 log10 num
  • salesforce 中的联合身份验证和委派身份验证

    有人知道 salesforce 中的联合身份验证和委托身份验证之间的区别吗 您能解释一下这两种方法中的请求流程吗 主要区别在于联合身份验证上安全断言标记语言 SAML 的使用 委托认证如果您的组织中有移动用户 或者您想要启用委派身份验证 单
  • 如何判断我的应用程序是否从后台恢复?

    我想在应用程序进入后台时锁定它 当它恢复时我想显示我自己的锁定屏幕 锁屏是我的应用程序的一个活动 成功输入密码后 用户可以看到恢复的 Activity 否则他不能 我怎样才能做到这一点 主要问题是 当你开始一个项目时 你必须得到一个特定的行
  • 如何在 Django 中将两个模型字段表示为一个表单字段?

    我似乎无法弄清楚如何在 Django 中正确处理以下情况 我在模型中有一个日期范围 我将其存储为两个单独的字段 date start and date end start date models DateTimeField end date
  • 如何解决 C++ 中友元声明的循环依赖?

    为什么以下代码无法编译以及如何修复它 我得到的错误是 使用未声明的标识符 Foo 虽然Foo在错误发生的地方 在friend声明于Bar foo h ifndef FOO H define FOO H include bar h neede
  • 使用位掩码组合枚举值

    我知道可以在枚举值中使用位掩码 但我不知道如何创建它 我有一个简单的枚举 enum State minimizing 0 maximizing minimized maximized 状态总是State minimized or State
  • 在同一行初始化两个变量

    我很难找到这个概念的权威例子或讨论 如果我的 Ruby 方法中有 2 个数字变量 我需要将它们初始化为零 它们将用作计数器 这可以吗 安全吗 它在我的测试中有效 而不是这个 foo 0 bar 0 你可以这样做 foo bar 0 这似乎是
  • 了解Android联系人的架构

    我正在开发一个 Android 应用程序 它需要知道何时添加 更新 删除联系人 所以我读了几篇文章 据我所知 每当联系人发生更改时 我们都可以通过内容观察者收到通知 但我们无法获取已添加 更新 删除的联系人 因此 我阅读了官方 API 并准
  • 来自 API 的 2 个并发请求数据混淆

    我使用 Nodejs 作为我的应用程序 API 的后端 但我意识到当有 2 个不同的用户不断请求同一个方法时 从 MySQL 请求返 回的数据有时可能会混淆 这是我的代码 router get v1 getList function req
  • 使用 Parcel 为浏览器构建 - 如何不输出 CommonJS 或 ES 模块

    我正在尝试编译一个我编写的库 以便可以将分布式文件放入script标记并在浏览器中运行 我正在尝试用 Parcel 2 来做到这一点 我觉得我已经很接近了 但每次我认为我在那里时都会出现一些新问题 关键是我想要它not捆绑外部依赖项 例如
  • 如果使用遗留库,如何避免 Java 中的未检查转换警告?

    我喜欢java中的泛型功能并且经常使用它 但如果我使用尚不支持泛型的库 我就会遇到问题 Servlet 就是一个例子 如果你使用ServletRequest getParameterMap 结果将是一个原始地图 但它只包括String作为钥
  • 在 R 3.1.1 (Windows) 中安装 rCharts 时出错

    是否有适用于 R 3 1 1 的 rCharts 版本 我尝试了2种方法 均失败 方法一 devtools install github ramnathv rCharts Downloading github repo ramnathv r
  • 是否可以在 Meta 刷新之前运行 JavaScript 代码

    一直以来 我们都在使用这个可靠的网站重定向 HTML JavaScript 代码
  • 如何在 Swift 中实现范围滑块

    我正在尝试实现范围滑块 并且使用了名为的自定义控件NMR范围滑块 https www cocoacontrols com controls nmrangeslider 但是当我使用它时 滑块根本不出现 难道也是因为它都是用 Objectiv
  • TestNG 跳过测试 - 为什么?

    我正在使用 testng 和 selenium 测试一个网络应用程序 测试主要包括打开应用程序的几个页面 并针对每个页面执行一些特定的活动 因此 我有一个执行 打开页面 测试的抽象基类 并定义了一个用作该测试的数据提供程序的抽象方法 然后有