문제

셀레늄 명령을 부르는 Nunit과 함께 작성된 몇 가지 단위 테스트가 있습니다. 2 개의 Win2K3 서버 상자 설정이 있습니다. 하나는 2 개의 셀레늄 RC와 함께 셀레늄 그리드 허브를 실행하고 있습니다. 다른 상자는 5 개의 Selenium RC를 실행하고 있습니다. 그들 모두는 Windows에서 Firefox를 실행하는 것으로 허브에 등록되어 있습니다 (간단하게 유지). 내 단위 테스트 설정 방법에서 포트 4444의 허브의 호스트 이름에 연결되었습니다.

테스트를 실행할 때는 순차적으로 만 실행됩니다 (예상대로). 나는 Nunit의 로드맵에 대해 많은 독서를했으며 병렬 테스트 능력을 위해 어떻게 촬영하는지. 나는 그 동안 pnunit을 사용하는 많은 포인터를 보았다. 그러나 이것은 셀레늄 그리드의 목적을 완전히 물리 치는 것 같습니다.

셀레늄 그리드 설정에 연결된 C#/Nunit을 사용하여 병렬 테스트를 성공적으로 구현 한 사람이 있습니까? 그렇다면 정교 해주세요.

나는 이것이 현재 존재하기 때문에 Nunit을 사용하여 어떻게 작동하는지에 대해 완전히 손실되고 있습니다 (버전 2.9.3을 사용하고 있습니다).

도움이 되었습니까?

해결책

불행히도 Nunit은 테스트를 병렬로 실행할 수 없으므로 다른 러너를 사용하여 셀레늄 그리드로 병렬 테스트의 모든 장점을 보관해야합니다.

C#에서 테스트에 Gallio Runner를 사용하고 여기에 예제가 있습니다.

테스트가 병렬로 실행되는 C# 프로젝트 : http://code.google.com/p/design-of-selenium-tests-for-asp-net/

설명: http://slmoloch.blogspot.com/2009/12/design-of-selenium-tests-for-aspnet_19.html

Gallio Test Runner : http://www.gallio.org/

다른 팁

또한 있습니다 pnunit, 살펴볼 가치가 있지만, 나는 병렬 테스트를 위해 아직 시도하지 않았습니다.

ncrunch (http://www.ncrunch.net/)를 살펴볼 가치가 있습니다 - 빌드의 일부로 분산 처리 옵션이 있으며 주요 기능 중 하나는 병렬 테스트입니다.

.NET의 태스크 병렬 라이브러리 및 DynamicObject 클래스와 함께 셀레늄 그리드를 사용하면 동시에 여러 셀레늄 그리드 노드 (다중 브라우저)에서 동일한 테스트를 실행할 수 있습니다.

http://blog.dmbcllc.com/running-selenium-in-parallel-with-any-net-unit-testing-tool/

Gallio는 오늘날 구식이므로 Nunit 솔루션을 고수 할 수 있습니다.

3.7 버전 Nunit은 동시에 테스트를 실행할 수 있습니다. 그 전에는 고정구 수준에서이를 수행 할 수 있었지만 3.7+에서는 하나의 testfixute에서 테스트를 할 수 있습니다. 어떻게 달성 할 수 있는지를 보여 주려면 아래의 예를 참조하십시오.

using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

namespace ConsoleApp1
{
    [TestFixture]
    public class Dummy
    {
        static TestCaseData Case(int i)
            => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case {i}");

        public static IEnumerable<TestCaseData> Cases()
            => Enumerable.Range(1, 5).Select(Case);

        [TestCaseSource(nameof(Cases)), Parallelizable(ParallelScope.Children)]
        public void ItShouldSleep(TimeSpan t)
            => Thread.Sleep(t);


        static TestCaseData Case2(int i)
            => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case2 {i}");

        public static IEnumerable<TestCaseData> Cases2()
            => Enumerable.Range(1, 5).Select(Case2);

        [TestCaseSource(nameof(Cases2)), Parallelizable(ParallelScope.Children)]
        public void ItShouldSleep2(TimeSpan t)
            => Thread.Sleep(t);
    }

    [TestFixture()]
    public class Dummy2
    {
        static TestCaseData Case(int i)
            => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case {i}");

        public static IEnumerable<TestCaseData> Cases()
            => Enumerable.Range(1, 5).Select(Case);

        [TestCaseSource(nameof(Cases)), Parallelizable(ParallelScope.Children)]
        public void ItShouldSleep(TimeSpan t)
            => Thread.Sleep(t);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top