2012-08-10 2 views
1

일주일에 적어도 한 번 업데이트 된 새로운 기능 (새로운 기능 추가, 내용 변경 등)을 위해 커다란 웹 사이트 작업을하고 있습니다. 그러나 테스트는 현재 존재할 때와 마찬가지로 철저히 이루어지지 않습니다. 그래서 일주일 전에 나는 자동화 된 테스트와 셀레늄을 들여다 보았다.Selenium으로 자동화 된 테스트 프레임 워크 설정

내가 제대로 읽고 싶다면 셀레늄에 의존하지 마십시오. 테스트 프로그래밍은 더 많은 옵션을 제공합니다. 나는 제 3 자 PHP 바인딩에 익숙하지 않아 테스트 프로그래밍에 자바를 사용하지 않았다.

이제 내 질문은 테스트를 실행할 시스템을 독창적으로 설정하는 방법을 중심으로 진행됩니다.

  • 테스트가/
  • 그럼에도 불구하고 내가 루프에 모든 테스트를 기본 응용 프로그램의 일종을 가지고 그들에게 또 다른
  • 기본 응용 프로그램을 하나씩 실행하려면 완전히 자율적해야합니다 : 내 생각은 다음을이었다 24 시간 연중 무휴로 실행하거나 최소한 cronjob 등으로 주기적으로 시작해야합니다.
  • 가능한 한 많은 브라우저 (또는 시뮬레이션 된 클라이언트)에서 테스트를 실행해야합니다. 지금까지 저는 FF, IE 및 크롬을 각각의 WebDrivers를 통해 사용하고 있습니다.
  • 일부 폴더의 이름을 지정하고 해당 폴더의 모든 테스트를 수집하고 싶습니다. 기본 응용 프로그램은 그 폴더에있는 모든 것을 가져 와서 실행합니다. 모두들 그냥 테스트를 만들어 그 폴더에 넣으면 대기열에 추가 될 것입니다.
  • 셀레늄 ide로 테스트를 작성하고 내보내고 즉시 내 메인과 함께 작업하는 것이 좋을 것입니다. 응용 프로그램 (즉, 수정이 필요없이 올바르게 실행 됨). 알았어, 내가 말했듯이, 셀레늄 IDE는 단점이지만, 나는 그것이 간단한 테스트를 시작하기에 좋은 출발이라고 생각한다. 또한 프로그래밍 지식이없는 사람도 계속 사용할 수 있습니다. 지금 당장은 셀레늄 IDE로 작성된 테스트를 "Java/JUnit 4/WebDriver"로 내보내고 약간의 코드 (매개 변수로 WebDriver 객체를 전달)를 변경합니다. 아마 당신은 볼 수 있듯이, 내가 자바에서 모든 전문가에 아닙니다, 그래서 같은 (나쁜 형태에 의해 연기 될 그나마

    import java.io.File; 
    import java.io.FilenameFilter; 
    import java.lang.reflect.InvocationTargetException; 
    import java.lang.reflect.Method; 
    import java.util.concurrent.TimeUnit; 
    
    import org.openqa.selenium.WebDriver; 
    
    public class SeleniumTest { 
    
        public static void main(String[] args) throws 
        ClassNotFoundException, InstantiationException,IllegalAccessException, 
        NoSuchMethodException, SecurityException, IllegalArgumentException, 
        InvocationTargetException { 
         String[] drivers = { 
           "org.openqa.selenium.firefox.FirefoxDriver", 
           "org.openqa.selenium.ie.InternetExplorerDriver", 
           "org.openqa.selenium.chrome.ChromeDriver" 
         }; 
         Class params[] = {WebDriver.class}; 
         String testFolderName = "lookhere"; 
    
         while (true) { 
          //get all .java files from some folder. those will be the tests to run 
          File testFolder = new File(testFolderName); 
          FilenameFilter filter = new FilenameFilter() { 
           public boolean accept(File dir, String name) { 
            return name.endsWith(".java"); 
           } 
          }; 
          String[] tests = testFolder.list(filter); 
          if (tests == null) { 
           System.exit(0); 
          } 
    
          for(int i=0; i<drivers.length; i++) { 
           //loop through different drivers, instantiate them 
           Class webDriverClass = Class.forName(drivers[i]); 
           WebDriver driver = (WebDriver) webDriverClass.newInstance(); 
           driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    
           for (int j=0; j<tests.length; j++) { 
            //loop through tests, instantiate them 
            String currentTestName = tests[j].replace(".java", ""); 
            Class testClass = Class.forName(currentTestName); 
            Object test = testClass.newInstance(); 
    
            Method methods[] = testClass.getDeclaredMethods(); 
            Method fn; 
    
            //run every method that starts with "test" (usually just one) 
            //also run setUp, passing the driver object 
            for(int k=0; k<methods.length; k++) { 
             if (methods[k].getName().startsWith("test")) { 
              fn = testClass.getDeclaredMethod(methods[k].getName()); 
              fn.invoke(test); 
             } else if(methods[k].getName().equals("setUp")) { 
              fn = testClass.getDeclaredMethod("setUp", params); 
              fn.invoke(test, driver); 
             } 
            } 
           } 
    
           driver.quit(); 
          } 
         } 
        } 
    } 
    

    : 여기

내 "기본 응용 프로그램"에 대한 코드입니다 main 메소드의 long throws 선언). 이제

, 내 질문 :

  1. 내가 좋아, 위의 공식화 것을, 내 전체 개념이다? 즉 : 기본 응용 프로그램에서 모든 테스트를 실행하고 대기열에서 테스트를 추가/제거 할 수 있습니다. 또는 이와 관련한 다른 최상의 방법이 있습니까? 어떤 다른 개념/아키텍처를 생각할 수 있습니까?
  2. 셀레늄 ide를 사용하여 테스트를 작성하고 내보내고 즉시 수정없이 메인 애플리케이션과 함께 작업 할 수 있습니까?
  3. 내가 코드를 게시 한 이후로, 아마도 미쳐 가고 싶어하고 비판하고 싶습니다. ;-) 나는 모든 종류의 제안에 열려 있습니다.
  4. 셀렌으로 다른 버전의 IE (또는 다른 브라우저)를 실행할 수 있습니까? 아마 내가 설치 한 브라우저 버전 만 실행하면됩니다. 그래서 한 브라우저의 다른 버전을 테스트하고 싶다면 셀레늄 그리드를 의미하는 원격 컴퓨터를 호출해야합니까?난 정말
+1

더 나은, 허드슨/젠킨스와 같은 지속적인 통합 서버를 사용합니다. –

답변

0

내가 대신 주요 방법의 테스트를 조율하기 위해 TestNG을 사용, 그것은 이전의 응답 상태로 파라미터 설정 가능 : 지금 추측하고있어, 당신은 셀레늄 GRID 2를 사용하는 경우, 당신은 실행할 수 있습니다 병렬 및 여러 브라우저/OS 버전 조합에 대한 테스트

PageObjects & PageFactories을 사용하여 모델링 테스트 케이스를 고려해 볼 때 테스트를 캡슐화하고 견고하게 만드는 데 도움이됩니다.

-1
  1. 개념은 괜찮지 만 구현 방법은 다릅니다.

  2. 귀하의 기준 중 하나가 끊임없이 변화하는 웹 페이지였습니다. 이를 위해 Selenium IDE는 쓸모가 없다. 테스트 사례를 자주 업데이트 할 예정입니다.

  3. 테스트 케이스 코딩 방법에 대한 잘못된 가정.

  4. 테스트 사례가 일반 시스템에서 실행되므로 다른 브라우저 유형의 버전에 대해 쉽게 실행되지 않습니다. 각 버전마다 다른 시스템이 필요합니다.

그래서 내 솔루션은 이전에 테스트 케이스 구현을 구동하기 위해, TestNG의 대답으로

  1. 될 것이다. 그룹화 및 설정/해제 방법을 허용합니다.
  2. 이전에 대답했듯이 사용하려는 각 요소에 대한 기능으로 각 웹 페이지에 대한 클래스를 만듭니다. 또한 당신의 흐름을 조직화하여 헬퍼 클래스를 생성하십시오. 이렇게하면 유지 보수 시간을 크게 줄일 수 있습니다. 모든 테스트 케이스 대신 몇 가지 클래스로만 업데이트해야합니다.

  3. 일정 및 개요를 보려면 Jenkins에서 테스트를 실행하십시오. 이렇게하면 다른 유형의 OS, 브라우저 등에 대한 작업을 설정할 수 있습니다. Jenkins는 노예에 대한 테스트 케이스 실행을 지원합니다. 따라서 각 슬레이브는 테스트하려는 브라우저 유형마다 서로 다른 버전을 가질 수 있습니다.

  4. 정말 고급 스럽지만 동적으로 VMWare 또는 KVM을 사용하는 슬레이브로 사용할 가상 컴퓨터를 만듭니다. 이렇게하면 테스트를 시작할 때마다 필요한 정확한 유형의 서버를 설정할 수 있습니다. Jenkins에서 작업을 시작할 때 가상 시스템을 만들 이미지를 결정할 때 OS 설치 및 옵션을 통해 이미지를 만들 수 있습니다. 자바 파일을 제공하는 사람들은 그들을 업로드하고 당신이 그들에 의해 제공 될 수 있도록 자바 파일 이름이 업로드 paramaterise 있도록

관련 문제