如何在Jenkins上运行Selenium / WebDriver测试?

时间:2014-01-30 20:21:32

标签: selenium ant junit jenkins

我是Selenium和Automation的新手。使用Selenium IDE和我对Java的一般知识,我能够在Eclipse中生成一系列在JUnit上运行的测试用例。现在我的测试目前在我日食时运行并按下[run]。我想将这些测试用例导入Jenkins / Hudson。有两种方法我更喜欢做CI。

  1. 安排时间(每周一次)以完成测试并发送结果电子邮件。

  2. 将我的测试用例上传到GitHub上的存储库,当对存储库进行了更改时,运行测试和/或按计划(每周一次)。

  3. 我老实说试图查找教程(视频/文档),但它们似乎都很不清楚。举个例子,我不知道build.xml或POM是什么。

    使用Jenkins插件或使用ANT或Maven更好吗?如果是这样,我需要在代码中添加/更改以允许这种情况发生的事情,并在Jenkins中进行配置。

    我的示例代码如下:

    package Profile;
    
    import java.util.concurrent.TimeUnit;
    import java.util.regex.Pattern;
    import java.util.concurrent.TimeUnit;
    import org.junit.*;
    import static org.junit.Assert.*;
    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    import org.openqa.selenium.support.ui.Select;
    import com.opera.core.systems.scope.protos.ExecProtos.ActionList.Action;
    
    public class P_ProfileChangeTestCase {
      private WebDriver driver;
      private String baseUrl;
      private StringBuffer verificationErrors = new StringBuffer();
    
    //Before the test begins, creates a new webdriver and sets the base url
      @Before
      public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://www.test.com/";
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
      }
    
      @Test
      public void testOpen() throws Exception {
        System.out.println("**Starting Profile**");
        driver.get(baseUrl);
    //Click LogIn
    System.out.println("Clicking Log In");
    driver.findElement(By.cssSelector("div.button.login > a.link")).click();
    //Enter User name
    System.out.println("Entering Username");
    driver.findElement(By.xpath("//input[@id='login']")).sendKeys("TEST");
    //Enter Password
    System.out.println("Entering Password");
    driver.findElement(By.xpath("//input[@id='login_password']")).sendKeys("PW");
    //Click LogIn Button
    System.out.println("Submit Log In");
    driver.findElement(By.className("login-button")).click();
    //Verify user name login by echo name to console
    System.out.println("Verify User Log In");
    String text = driver.findElement(By.cssSelector("span.username")).getText();
    System.out.println("Username is :" + text);
    ////////////////////////
    //Click on Edit Profile
    System.out.println("Clicking on Edit Profile Button");
    driver.findElement(By.cssSelector("div.button.login")).click();
    driver.findElement(By.xpath("//div[@id='mlg-header']/div/div[3]/div/div[7]/div/div[2]/a")).click();
    //Change description in profile
    System.out.println("Editing the Interests section of profile");
    driver.findElement(By.name("interests")).clear();
    driver.findElement(By.name("interests")).sendKeys("Edit Profile in Selenium Eclipse");
    //Update Profile
    System.out.println("Click on submit to change profile");
    driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
    //Verify that update has been applied to profile
    System.out.println("Verifing that change has been made");
    assertEquals("Profile has been updated.", driver.findElement(By.cssSelector("b > b")).getText());
    //Console Output of Assert Statement Above
    System.out.println("Profile has been updated!");
    System.out.println("**Profile Complete!**");
    
      }
    
      @After
      public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
        }
      }
      private boolean isAlertPresent() {
        try {
          driver.switchTo().alert();
          return true;
        } catch (NoAlertPresentException e) {
          return false;
        }
          }
    }
    

2 个答案:

答案 0 :(得分:5)

根据您的信息,您可以使用maven项目库创建selenium自动化。在这种情况下,如果您想使用Jenkins作为CI,请执行以下步骤:

  1. 确保您已经安装了maven并在系统中设置了maven home。
  2. 使用构建自由式软件项目创建新项目。enter image description here
  3. 转到系统中的 .jenkins 文件夹。如果您使用的是Mac,它将被放置在家中。将您的selenium项目复制并粘贴到自动化作业文件夹(.jenkins / jobs / Automation / 工作区)中。应手动创建工作区文件夹。
  4. 创建作业/项目后,转到源代码管理并将其设置为none(我假设您当前正在使用本地系统的selenium代码)。如果你想从git仓库获取代码,你需要先添加git插件: Jenkins - > 管理Jenkins - > 管理插件 - >点击可用标签 - >搜索 Github插件
  5. 检查构建触发器部分下的定期构建并将其设置为(0 7 * * *)。这意味着您的自动化将自动在每天7点运行。
  6. 添加版本step ,通过maven命令 mvn clean test 运行自动化。如果您使用 mac / linux ,请选择执行外壳,如果您使用 Windows 系统,请选择执行Windows批处理命令
  7. 如果您要发送自动化结果的电子邮件,则需要在Jenkins-Manage插件中安装电子邮件Ext插件并设置可编辑的电子邮件通知。如果您有附件,maven项目结果通常放在目标文件夹下。下面我给你一个我在目标文件夹中的zip文件的例子。
  8. 保存您的jenkins /项目。enter image description here
  9. 设置电子邮件发件人:转到Jenkins - >管理Jenkins - >配置系统并按照下面的步骤进行操作。enter image description here
  10. 最后,建立你的jenkins项目/工作:enter image description here
  11. 如果您还有任何问题,请告诉我们。)

答案 1 :(得分:0)

基于发布的代码以及您使用Maven的事实,我会说“mvn clean test”将运行所有单元测试。因此,在Jenkins中创建一个meven项目(因为你需要在Jenkins中使用maven插件),并且在配置中提供“clean test”作为jenkins项目执行的maven目标。

从这里看大图,虽然你的测试被注释为单元测试,但它们不具备单元测试的特性。首先,单元测试应该模拟外部依赖。