문제

내가 찾는 것에 대한 제안을 개선하는 프로세스를 자동화하는 기능 테스트의 웹 사이트입니다.여기에 내가 과거에 시도했다.

내가 가지고하는 데 사용되는 테스트를 사용하여 프로젝트 WATIN.을 효과적으로 쓰는 것처럼""단위 테스트용 WATIN 를 자동화하는 브라우저를 클릭의 주위에 사이트 등등.

물론 당신은 필요한 사이트를 실행합니다.그래서 내가 만들어 시험을 실제로 복사본 코드에서 웹 프로젝트를 로컬 디렉토리고 시작했을 가리키는 웹 서버는 디렉토리지기 전에 테스트를 실행합니다.

는 방법,새로운 사람할 수 있는 단순히 최근에는 우리의 근원을 제어하고 우리의 실행 스크립트를 구축,그리고 모든 테스트를 실행합니다.그들은 또한 단순히 실행하의 모든 테스트에서 IDE 입니다.

는 문제로 실행되었는 많은 시간을 보냈을 유지하는 코드를 설정하는 테스트는 환경보다 더 많은 테스트합니다.을 언급하지 않는 시간이 오래 걸리기 때문에 실행하의 모든 것을 복사할 수 있습니다.또한,나는 데 필요한 테스트를 포함하여 다양한 시나리오,설치를 의미 할 수 있도록 필요한 데이터베이스를 설정이 다양한 초기 states.

더 많은 정보를 공유하기에 무슨 짓을 했는지를 자동화하는 기능 테스트의 일부를 해결하기 위해 이러한 문제점을 지속할 수 있습니다 그것은 간단합니다.

더 많은 정보 때문에 사람들이 물었다 자세한 내용은 여기 있습니다.나는 실행 ASP.NET Visual Studio 를 사용하고 카시니(내장된 웹 서버).내 단위 테스트에서 실행 MbUnit(하지만 그렇게 중요하지 않습니다.수 NUnit 나 XUnit.NET).일반적으로,나는 별도의 장치 테스트 프레임워크를 모두 실행 내 WATIN 테스트합니다.에 AssemblyLoad 단계를 시작 웹서버와 모든 사본을 내한 웹 응용 프로그램 코드입니다.

에 관심이 있어요 솔루션은 모든 플랫폼에만 필요할 수도 있어 자세한 설명에서 각각한 것은 의미입니다.:)

도움이 되었습니까?

해결책

Phil,

자동화 할 수 있습을 유지하기 어렵지만 더 당신은 자동화를 위해 배포를 더욱 활용할 수 있습니다 그것은 대한 테스트 설정(그리고 반대로).

솔직히 그것의 진화를 자동화 코드,팩토링 및 refactoring 으로 특정 작은 단위의 경우 기능을 사용하여 빌드 도구하지 않는
그냥 운전을 정적으로 컴파일을 사전 고려의 단위 기능의 경우와 같이 넝 및 스위치를 참조하십시오이것은 이유 중의 하나는 많은 사람들이 상대적으로 초기 사용자의 새로 다음과 같 넝 있으로 옮겨가 발생합니다.자유를 치료하는 코드를 구축으로 다른 모든 코드를 cotinually 진화하는 콘텐츠와 모양 크로 레이크입니다.당신은 끝나지 않는 동 정지에 자동화 유물로 쉽고 빠르게 레이크,그것의 많은 쉽게 스크립트에서 레이크보다 넝 또는 스위치를 참조하십시오

그래서,어떤 부분의 투쟁은 본질적으로는 바인딩에서 도구입니다.을 유지하는 자동화 합리적이고,유지를 주의해야 한다는 장애물 정 빌드 도구 및 넝 MSBuild impose.

할 것을 제안하지 않는 부부의 테스트 환경에 부팅을 달아서 어셈블리에서 load.즉,내부 연결만을 제공한 간략한 편리합니다.아무 잘못 없다(그리고,모든 것을 가능성이 오른쪽)명령어 라인과 실행을 구축하는 작업을 설정 환경을 실행하기 전에 테스트에서 하나 IDE 또는 명령행에서,또는 대화형 콘솔,다음과 같 C#그렇지 않으면서 프로젝트 모노에서,또는 IRB.

테스트 데이터 설정은 단순히 고통에서 엉덩이가 가끔 있다.그것은 있을 수행 할 수 있습니다.

당신이 필요할 수 있는 라이브러리 호출을 만들고 청결한 데이터베이스는 상태입니다.을 만들 수 있습니다 그 통화에서 테스트 코드는,그러나 저는 개인적으로 피하려는 경향이 있기 때문에 이렇게 하나 이상의 좋은 테스트를 사용하여 데이터 또는 샘플 데이터를 제어 코드입니다.

나는 드라이브는 모든 샘플 데이터를 제어합니다.쓰 컨트롤러와 함께 작업해 특별히 제어를 위한 데이터 및 샘플 문제를 가져 사람들에 대한 작업을 통해 셀레늄이 함유되어 있습니다.내가 사용하는 이들을 만들고 데이터입니다.I 을 구성할 수 있을 얻는 이러한 작업을 만들의 일반적인 시나리오 설정 데이터,그리고 전달할 수 있는 특정한 값으로 데이터를 요청 매개 변수(또는 형태로 매개 변수는 경우에 요구될).

나는 이러한 컨트롤러 영역에서 나는 보통화"test_support".

나의 자동화를 배포하기 위한 웹사이트가 배포되지 않은 test_support 지역 또는 그것의 경로와 매핑을 사용합니다.의 일부분으로 내포 verification 자동화,내가 있는지 확인 test_support 코드에서 생산 앱입니다.

또한 사용 test_support 코드를 자동화하는 통제 환경 교체하는 서비스와 가짜를 끄고,하위 시스템을 실패를 시뮬레이션 및 장애 조치,활성화 또는 비활성화와 인증에 대한 액세스 제어 기능을 테스트하지 않는 우려와 함께 이러한 측면,etc.

이러한 보조 가치를 제어하는 웹앱의 샘플 데이터 또는에서 테스트 데이터 웹 사이트:때연 응용 프로그램,또는 일을 할 때 예비 테스트를 만들 수 있습니다,데이터 시나리오를 필요로 그냥 발급하여 몇 가지 면에 대한 알려져있(또는 추측)url test_support 영역입니다.로 훈련된 노력에 충실 편안한 경로 및 자원-방향을 여기에는 정말 돈을 지불합니다.

더 많은 이 기능적 자동화(을 포함한 테스트,배포,시연,등)그래서 더 나은 디자인 이러한 리소스,더 나은 시간을 당신은 유지하는 그들에게 장관,그리고 더 많은 기회를 찾을 수 있을 활용하여 그들에서 예상치 못하지만 유리한 방법이다.

예를 들어,쓰기 도메인 모델로는 코드를 의미의 모델 웹 페이지를 만드는 데 도움이 될 것입니다 훨씬 더 많은 이해할 수 있는 테스트 코드를 줄이 brittleness.이렇게 하면 잘 사용할 수 있습니다 그 동일한 모델로 다양한 다른 드라이버할 수 있도록 활용하여 그들에게 스트레스 테스트 및 부하 테스트뿐만 아니라 기능적 테스트뿐만 아니라 그들을 사용하여 명령행에서으로 탐색 도구입니다.그런데,이런 종류의 것은 쉽지 않을 때는 바 드라이버 유형으로 당신이 사용하는 경우 정적 언어입니다.이유가 있어 많은 최고의 테스트 사상가들에서 작동 루비,그리고 왜 Watir 에서 쓰입니다.재사용,조성,그리고 표현력을 훨씬 더 쉽게 달성하는 루비에서는 이상 C#테스 코드입니다.그러나 그것은 또 다른 이야기입니다.

Let's 잡을 언젠가는 이야기에 대해 더 많이 기타의 90%이 물건:)

다른 팁

우리는 사용했었다 혈장 하나의 프로젝트에서. 프로세스에서 웹 서버를 에뮬레이션합니다. 웹 애플리케이션 프로젝트의 루트를 가리 키십시오.

파일을 복사하지 않거나 프로세스 서버를 시작하지 않아도 놀랍게도 안정적이었습니다.

플라즈마를 사용한 테스트가 우리를 찾는 방법은 다음과 같습니다.

    [Test]
    public void Can_log_in() {
        AspNetResponse response = WebApp.ProcessRequest("/Login.aspx");
        AspNetForm form = response.GetForm();

        form["UserName"] = User.UserName;

        form["Password"] = User.Password;

        AspNetResponse loggedIn = WebApp.ProcessRequest(Button.Click(form, "LoginUser"));


        Assert.IsTrue(loggedIn.IsRedirect());

        AspNetResponse homePage = WebApp.ProcessRequest(loggedIn.GetRedirectUrl());

        Assert.AreEqual(homePage.Status, 200);
    }

모든 "aspnetresponse"및 "aspnetform"클래스는 플라즈마에 포함됩니다.

우리가 현재 사용하여 자동 빌드 프로세스에 대한 우리의 asp.net mvc 응용 프로그램입니다.

우리는 다음과 같은 도구를 사용:

  • Teamcity 는
  • SVN
  • nUnit
  • 셀레늄

우리가 사용하는 msbuild 실행하는 스크립트 건설에 대한 에이전트로 포함될 수 있는 금액의 기계입니다.Msbuild 스크립트의 최신 버전을 가져옵 코드에서 svn 및 구축니다.

에 성공은 그를 배포하는 아티팩트는 지정된 기계/폴더를 만드는 가상 사이트에서 IIS.

우리는 그런 다음 사용하 MSBuild contrib 작업 sql 스크립트를 실행하는 데이터베이스를 설치하고 데이터를 로드할 수 있습 또한 복원 할 수 있습니다.

성공에 대한 우리는 킥오프 nUnit 테스트합니다.테스트 설정을 보장 셀레늄 및 실행한 다음의 드라이브 셀레늄 테스트에 같은 방법으로는 Watin 않습니다.셀레늄은 좋은 레코더에 대한 테스트로 내보낼 수 있습니다 c#으로 작성됩니다.

좋은 일에 대한 셀레늄할 수 있는 드라이브 FF,Chorme 고 즉 오히려한되지 않고 즉는 경우 Watin 마지막 시간을 내가 보았습니다.사용할 수도 있습니다 셀레늄을 부하 테스트 셀레늄 그리드 그러므로 다시 사용할 수 있는 동일한 테스트합니다.

에 성공 msbuild 다음 태그 빌드에서 svn.Teamcity 는 작업이 실행되는 하룻밤에 배포하는 최신 태그를 준비 환경에 대한 준비스 사용자 프로젝트 상태를 확인하기 위해 다음과 같은 아침입니다.

이전에 생활을 했습 넝&msbuild 스크립트를 완벽하게 관리하도록 할 수 있 환경(java 설치,셀레늄 등)그러나 이 시간이 많이 걸리므로 사전 req 우리가 가정의 각 구축 에이전트가 이러한 설치됩니다.시간에 우리가 포함됩니다 이러한 작업을 수행합니다.

코드를 복사 해야하는 이유는 무엇입니까? Ditch Cassini와 Visual Studio가 가상 디렉토리를 만들도록하십시오. 웹 앱이 변경된 경우 웹 테스트를 실행하기 전에 개발자가 구축해야합니다. 우리는 이것이 CI에서 웹 테스트를 실행하는 경우 큰 문제가 아니라는 것을 알았습니다.

데이터는 큰 도전입니다. 내가 볼 수있는 한, 당신은 불완전한 대안 중에서 선택해야합니다. 우리가 처리하는 방법은 다음과 같습니다. 먼저, 우리는 대규모 복잡한 레거시 WebForms 앱으로 작업하고 있다고 설명해야합니다. 또한 도메인 코드는 테스트 프로젝트 내에서 테스트 데이터를 작성하는 데 적합하지 않다고 언급해야합니다.

이것은 우리에게 몇 가지 선택을 남겼습니다. (a) 빌드에서 데이터 설정 스크립트를 실행하거나 (b) 실제 웹 사이트를 사용하여 웹 테스트를 통해 모든 데이터를 만듭니다. 옵션 (a)의 문제점은 테스트가 1 분 동안 스크립트와 결합된다는 것입니다. 웹 테스트 코드를 T-SQL과 동기화하는 것에 대해 생각하기 위해 머리를 훼손합니다. 그래서 우리는 (b)와 함께 갔다.

(b)의 한 가지 이점은 설정이 응용 프로그램 동작을 검증한다는 것입니다. 문제는...시각.

이상적으로 테스트는 시간적 커플 링없이 (어떤 순서로든 실행할 수 있음) 컨텍스트 (예 : 일반적인 테스트 데이터)를 공유하지 않고 독립적이어야합니다. 이를 처리하는 일반적인 방법은 모든 테스트마다 데이터를 설정하고 찢어 버리는 것입니다. 신중하게 생각한 후, 우리는이 규칙을 어기기로 결정했습니다.

우리는 Gallio (Mbunit 3)를 사용하여 전략을 지원하는 멋진 기능을 제공합니다. 먼저, 고정물 및 테스트 레벨에서 실행 순서를 지정할 수 있습니다. -4, -3, -2, -1로 주문한 4 개의 "설정"비품이 있습니다. 이들은 지정된 순서로 실행되며 기본적으로 순서는 0입니다.

당사의 웹 테스트 프로젝트는 한 가지에 대한 빌드 스크립트에 따라 잘 알려진 단일 사용자 이름/비밀번호에 따라 다릅니다. 이것은 내가 살 수있는 커플 링입니다. 설정 테스트가 실행됨에 따라 나중에 다른 모든 고정 장치에서 사용 된 (그러나 변경되지 않은) 데이터 식별자 (회사, 사용자, 공급 업체, 클라이언트 등)를 보유하는 "데이터 컨텍스트"객체를 구축합니다. (식별자에 의해 키를 의미하는 것은 아닙니다. 대부분의 경우 웹 UI는 고유 키를 노출시키지 않습니다. 우리는 실제 식별자를 위해 이름이나 기타 프록시를 사용하여 앱을 탐색해야합니다. 아래에 더 자세히 설명하십시오.)

Gallio를 사용하면 테스트 또는 고정물이 다른 테스트 또는 고정물에 의존하도록 지정할 수 있습니다. 선례가 실패하면 종속이 건너 뜁니다. 이것은 "계단식 실패"를 방지함으로써 시간적 커플 링의 악을 감소시켜 혼란을 겪을 수 있습니다.

각 테스트 전에 기준선 테스트 데이터를 한 번만 생성하면 속도가 빠릅니다. 그러나 설정 테스트는 여전히 실행하는 데 여전히 10 분이 걸릴 수 있습니다. 새로운 테스트를 진행할 때 실행하고 자주 다시 실행하고 싶습니다. 또 다른 멋진 갈리오 기능 인 Ambience를 입력하십시오. Ambience는 DB4 주변의 래퍼로서 개체를 지속하는 매우 간단한 방법을 제공합니다. 데이터 컨텍스트를 자동으로 유지하는 데 사용합니다. 따라서 설정 테스트는 데이터베이스의 재 구축간에 한 번만 실행해야합니다. 그 후에는 다른 모든 비품을 반복적으로 실행할 수 있습니다.

그렇다면 테스트 데이터 정리는 어떻습니까? 알려진 상태에서 시작할 필요가 없습니까? 이것은 우리가 깨뜨리는 것이 편리하다는 규칙입니다. 우리를 위해 일하는 전략은 회사 이름, 사용자 이름 등과 같은 것들에 긴 무작위 값을 사용하는 것입니다. 다른 데이터로. 확실히 나는 그것이 데이터 충돌이라는 것을 알기 위해 팬텀 실패 테스트를 쫓는 데 몇 시간을 보내는 날을 두려워합니다. 현재 우리를 위해 일하는 것은 트레이드 오프입니다.

우리는 Watin을 사용하고 있습니다. 나는 그것을 아주 좋아한다. 성공의 또 다른 열쇠는 Scott Bellware가 암시 한 것입니다. 테스트를 만들면서 UI의 추상 모델을 구축하고 있습니다. 그래서 이것 대신 :

browser.TextField("ctl0_tab2_newNote").TypeText("foo");

테스트에서 이것을 볼 수 있습니다.

User.NotesTab.NewNote.TypeText("foo");

이 접근법은 세 가지 이점을 제공합니다. 첫째, 우리는 마법의 끈을 반복하지 않습니다. 이것은 Brittleness를 크게 줄입니다. 둘째, 테스트는 읽고 이해하기가 훨씬 쉽습니다. 마지막으로, 우리는 우리 자신의 추상화 뒤에 Watin 프레임 워크의 대부분을 숨 깁니다. 두 번째 예에서는 typetext만이 Watin 메소드입니다. 이로 인해 프레임 워크가 변경됨에 따라 쉽게 변경할 수 있습니다.

도움이 되었기를 바랍니다.

Maven을 사용하여 빌드 프로세스에 통합 테스트 단계를 구축하는 것은 어렵지만 불가능하지는 않았습니다. 일어난 일은 본질적으로 다음과 같습니다.

  • 통합 테스트 단계가 발생하지 않는 한 특정 디렉토리의 모든 Junit 테스트를 무시하십시오.
  • 통합 테스트를 실행하려면 Maven 프로파일을 추가하십시오.
  • 사전 통합 테스트 단계의 경우 -

  • 테스트 데이터베이스를 치는 응용 프로그램을 실행하는 Jetty를 시작하십시오.

  • 셀레늄 서버를 시작하십시오
  • 통합 테스트 단계에서 셀레늄 통합 테스트를 실행하십시오
  • 셀레늄 서버를 중지하십시오
  • 셀레늄을 중지하십시오

이 단계의 어려움은 실제로 부두를 설정하는 것이 었습니다. 우리는 전쟁에서 시작할 수 없었기 때문에 실제로 Jetty가 전쟁을 풀고 서버를 운영해야합니다. 그러나 잘 작동하며 자동화됩니다. 당신이해야 할 일은 mvn -pintegrationtest를 입력하기 만하면 (통합 테스트 프로파일 이름 이었음) 꺼져 있습니다.

빌드 완료 후 자동으로 테스트를 시작한다는 뜻입니까? 빌드를 성공적으로 준수하는 동안 빌드 파일을 작동중인 II에 복사하기 위해 자동 스크립트를 작성할 수 있습니다. 그런 다음 호출 mstest.exe 또는 기타 방법으로 자동화 된 BVT를 시작하십시오.

Autoitx 또는 Python, Ruby와 같은 일부 기능 언어로 시도해 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top