일주일에 적어도 한 번 업데이트 된 새로운 기능 (새로운 기능 추가, 내용 변경 등)을 위해 커다란 웹 사이트 작업을하고 있습니다. 그러나 테스트는 현재 존재할 때와 마찬가지로 철저히 이루어지지 않습니다. 그래서 일주일 전에 나는 자동화 된 테스트와 셀레늄을 들여다 보았다.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 선언). 이제
, 내 질문 :
- 내가 좋아, 위의 공식화 것을, 내 전체 개념이다? 즉 : 기본 응용 프로그램에서 모든 테스트를 실행하고 대기열에서 테스트를 추가/제거 할 수 있습니다. 또는 이와 관련한 다른 최상의 방법이 있습니까? 어떤 다른 개념/아키텍처를 생각할 수 있습니까?
- 셀레늄 ide를 사용하여 테스트를 작성하고 내보내고 즉시 수정없이 메인 애플리케이션과 함께 작업 할 수 있습니까?
- 내가 코드를 게시 한 이후로, 아마도 미쳐 가고 싶어하고 비판하고 싶습니다. ;-) 나는 모든 종류의 제안에 열려 있습니다.
- 셀렌으로 다른 버전의 IE (또는 다른 브라우저)를 실행할 수 있습니까? 아마 내가 설치 한 브라우저 버전 만 실행하면됩니다. 그래서 한 브라우저의 다른 버전을 테스트하고 싶다면 셀레늄 그리드를 의미하는 원격 컴퓨터를 호출해야합니까?난 정말
더 나은, 허드슨/젠킨스와 같은 지속적인 통합 서버를 사용합니다. –