Заказ кодированных тестов пользовательского интерфейса и результатов в Test Manager - PullRequest
2 голосов
/ 19 января 2012

У меня есть ряд методов тестирования CodedUI, которые составляют один тестовый пример.Методы тестирования должны выполняться по порядку (IE testmethoda запускается, затем testmethodb, а затем testmethodc), и я хочу, чтобы результаты отображались в Microsoft Test Manager, чтобы выглядеть как testmethoda пройден, testmethodb пройден, testmethodc не выполнен.Есть ли способ сделать это, имея возможность выполнять несколько итераций всего тестового примера?

Я пытался поместить методы тестирования в один метод тестирования и вызывать его.Это дает мне желаемый порядок тестирования и возможность выполнять несколько тестовых прогонов, но менеджер тестов показывает один проход / сбой во всем тестовом примере.

Я также попытался подключить источник данных к отдельным методам тестирования иупорядочив их в диспетчере тестов, который дает мне желаемые результаты тестирования в диспетчере тестов, но имеет побочный эффект: если я хочу запустить более одной строки данных, порядок будет испорчен.Например, будет выполнено 3 строки данных:

testmethoda
testmethoda
testmethoda

testmethodb
testmethodb
testmethodb

testmethodc
testmethodc
testmethodc

Я хочу, чтобы они запускались:
testmethoda
testmethodb
testmeothdc

testmethoda
testmethodb
testmethodc и т.д ..

Я также подумал об использовании упорядоченного теста, но он все еще отображается как отдельный тест в MTM, и я не знаю, каким способом я в любом случае использую его для передачи данных, чтобы у него были свои проблемы.

Есть ли функция, которой мне не хватает в VS или MTM, чтобы получить эти результаты?Может быть, метод, который позволит мне определить тестовый прогон в файле результатов?Получит ли запись / редактирование файла trx мои результаты в MTM?У меня есть ощущение, что мне также придется вносить изменения в базу данных TFS, что не вариант.

1 Ответ

0 голосов
/ 02 февраля 2012

Я не думаю, что есть способ сделать это через VS или MTM. Опция добавления всех ваших тестовых методов к одному звучит неплохо, но когда один из них завершается неудачей, родительский тестовый метод останавливается и выдает «AssertFailedException», которое выкинул один из внутренних тестов.

Однако, если ваши методы тестирования (a, b, c ...) полностью не зависят друг от друга (это означает, что в случае сбоя testMethodA другие тесты могут выполняться без проблем), попытался бы перехватить все внутренние исключения и в конце вывести, какие методы переданы, а какие нет.

[TestClass]
public class TestClass
{
    Dictionary<string, string> testMethods;
    bool testResult;

    [TestInitialize]
    public void TestInitialize()
    {
        testMethods = new Dictionary<string, string>();
        testResult = true;
    }

    [TestMethod]
    public void TestMethod()
    {
        //Run TestMethodA
        try
        {
            TestMethodA();
            testMethods.Add("TestMethodA", "Passed");
        }
        catch (AssertFailedException exception) //Edit: better catch a generic Exception because CodedUI tests often fail when searcing for UI Controls 
        {
            testResult = false;
            testMethods.Add("TestMethodA", "Failed: " + exception.Message);
        }

        //Run TestMethodB
        try
        {
            TestMethodB();
            testMethods.Add("TestMethodB", "Passed");
        }
        catch (AssertFailedException exception)
        {
            testResult = false;
            testMethods.Add("TestMethodB", "Failed: " + exception.Message);
        }
    }

    [TestCleanup]
    public void TestCleanup()
    {
        foreach (KeyValuePair<string, string> testMethod in testMethods)
        {
            //Print the result for each test method
            TestContext.WriteLine(testMethod.Key.ToString() + " --> " + testMethod.Value.ToString());
        }

        //Assert if the parent test was passed or not.
        Assert.IsTrue(testResult, "One or more inner tests were failed.");
    }
}

Вы также можете создать другой класс, который будет управлять всем этим поведением, чтобы избежать всех этих «try-catch».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...