Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 硒+;朱尼特。有多干?_Java_Unit Testing_Selenium_Junit_Automated Tests - Fatal编程技术网

Java 硒+;朱尼特。有多干?

Java 硒+;朱尼特。有多干?,java,unit-testing,selenium,junit,automated-tests,Java,Unit Testing,Selenium,Junit,Automated Tests,我的情况如下: 我有两个测试用例: 用户登录网站 用户打开主页 用户看到一些信息,不是很重要,可能是一些表格或div等 用户转到帮助台页面 用户转到自定义页面 用户可以在页面上看到一些自定义信息 还有越来越多的其他案件 我的任务是通过Selenium驱动程序和JUnit在不同用户(admin1、admin2、userWithoutAccess等)下测试所有这些情况 但是,目前,我没有看到任何有效的解决方案:( 例如: public class HelpDeskPageTest { p

我的情况如下:

我有两个测试用例:

  • 用户登录网站
  • 用户打开主页
  • 用户看到一些信息,不是很重要,可能是一些表格或div等
  • 用户转到帮助台页面
  • 用户转到自定义页面
  • 用户可以在页面上看到一些自定义信息
  • 还有越来越多的其他案件
我的任务是通过Selenium驱动程序和JUnit在不同用户(admin1、admin2、userWithoutAccess等)下测试所有这些情况

但是,目前,我没有看到任何有效的解决方案:(

例如:

public class HelpDeskPageTest
{
    private static WebDriver driver;

    HelpDeskPage helpDeskPage;

    @BeforeClass
    public static void setUpClass()
    {
        driver = new FirefoxDriver();
        Utils.logon(driver, "admin", "1234");
    }

    @AfterClass
    public static void tearDownClass()
    {
      driver.quit();
    }

    @Before
    public void setUp()
    {
        helpDeskPage = HelpDeskPage.open(driver);
    }

    @Test
    public void helpDeskPageIsOpen()
    {
        assertTrue(channelBrowserPage.getTitle().equals("Google: Internal HelpDesk"));
    }
}
这个代码是做什么的? 这段代码只是测试用户管理员是否可以打开帮助台页面。 另外,
HelpDeskPageTest
类可以包含一个lof其他测试方法,用于测试HelpDesk页面上的管理操作。一切正常

你可以问我:那么,你在哪里发现了这个问题?我的回答如下:

  • 如果我想为其他用户测试相同的功能(例如:
    admin2
    )。我怎么做?我必须创建名为:
    HelpDeskPageTestForAdmin2
    的相同测试类,修改
    @BeforeClass
    方法(以
    admin2
    的身份登录)只需从
    HelpDeskPageTest
    复制所有其他代码?但这直接违反了原则DRY! 我怎样才能避免这种情况
  • 网站包含许多不同的页面(
    Login,Home,HelpDesk,CustomPage1,CustomPage2
    )。对于单独的页面,我创建了单独的测试类(
    LoginPageTest
    HomePageTest
    HelpDeskPageTest
    )。所有测试类都是相互独立的。因此,我花了大量时间在方法
    @BeforeClass
    WebDriver
    实例化(>10秒)。太长了!我如何避免这种时间延迟?如何在所有测试中共享实例

  • JUnit如何帮助我解决问题?

    您可以通过在JUnit中以TestNg的形式动态传递不同的数据来重复测试

    使用类可以实现这一点

    例如,见下面的帖子


    您在这里所做的不是单元测试,而只是将junit用作运行集成或系统测试的助手。这是很常见的,并不是做错事的迹象。但这确实意味着应用于junit单元测试的一般指导原则、功能和最佳实践应该被忽略

    因此,忘记每个测试一个断言,以及像@Before这样的大多数注释。只需为每个测试用例编写一个方法,可能在代表主题或功能的同一个测试类中

    因此:

    @试验 void testLoginAndOut()

    @测试testLoginAndOpenHelpDeskPage()


    使用通用例程(例如,void loginAUser(字符串名称)像往常一样防止代码重复。

    当然,您需要某种参数化。哪种参数化取决于您需要什么。如果您希望使用相同的参数集运行测试类中的所有方法,那么您需要
    @parameters
    。然后您可以使用参数,例如
    “admin”、“adminPassword”
    ,每个方法都将在可访问这些参数的情况下运行

    但是,如果您需要每个方法具有不同的参数集,则:
    如果您在编译时知道所有参数,请选中。如果您想要从文件或其他提供程序获取参数,请选中。您可以使用JUnit的参数化测试来完成此操作,但需要使用JUnit 4.11或更高版本。您可以看到

    使用Gradle,构建依赖项如下所示:

    dependencies {
        // stored at: %HOMEPATH%/.gradle/caches/artifacts-14/filestore
        compile group: 'org.sikuli', name: 'sikuli-api', version: '1.0.+'
        compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '2.+'
        compile group: 'commons-collections', name: 'commons-collections', version: '3.+'
        compile group: 'junit', name: 'junit', version: '4.+'
        compile group: 'commons-lang', name: 'commons-lang', version: '2.+'
        compile group: 'commons-io', name: 'commons-io', version: '2.+'
    }
    

    您需要使用不同的登录凭据运行所有@test吗?我希望我的回答能帮助您:)为什么不尝试QMetry自动化框架[]它为基于web的测试自动化提供了不同的设计概念。例如,页面使用层次结构,您只需要调用午餐页面,框架不仅负责启动该页面,还负责整个页面层次结构,以达到特定页面。您对“junitParams”的建议没有必要。JUnit 4.11+提供了参数化支持。这取决于您需要什么。JUnit的方式需要很多样板文件,并且不能为每个方法都有不同的参数。zohhak和/或junitParams让您编写更清晰的代码没有“样板文件”。事实并非如此。此外,每个测试类可以有一个参数化列表。如果需要多个参数化列表,请创建多个测试类。简单。