У меня есть тест, в котором я хочу убедиться, что отдельные операции на одной странице приводят к разным результатам.В частности, у меня есть несколько способов сортировки на странице, и я хочу тест, чтобы убедиться, что каждый вид сортировки отличается.У меня есть другие тесты, чтобы убедиться в правильности каждого вида.
Мне бы хотелось, чтобы основное внимание в этом разговоре было уделено хорошему способу выполнения тестовых операций параллельно и сравнения результатов в конце, а не тому, чтопроверить или методы тестирования.Я считаю, что параллельные операции в тестировании - это интересная и достаточно широкая тема, которая может быть полезна для других.
Пусть «generateHashFromSearchResults ()» - это функция, которая возвращает строку, представляющую порядок результатов поиска, отображаемых в текущемIE экземпляр.Вот как выглядит рабочий код в сериализованном виде с использованием одного экземпляра браузера:
var set = new HashSet<string>();
var sortOptions = new List<String>() { "sort1", "sort2", "sort3" };
// Default sort
set.Add(generateHashFromSearchResults());
sortOptions.ForEach(s => {
ie.Link(Find.ByText(s)).Click();
set.Add(generateHashFromSearchResults());
});
Assert.That(set.Count() == 4);
Я читал о PLINQ несколько месяцев назад и подумал, что это может быть приличным вариантом использования.Теперь пусть «generateHashFromSearchResults (IE ie)» будет той же функцией, но она работает с явно определенным экземпляром IE.Я попробовал что-то вроде этого:
List<string> resultList = sortOptions.AsParallel().Select(s => {
var ie = new IE(true);
ie.Link(Find.ByText(s)).Click();
return generateHashFromSearchResults(ie);
}).ToList();
// Forget about default sort for now. There should be 3 distinct results
Assert.That(new HashSet<string>(resultList).Count() == 3);
Самая большая проблема, с которой я сталкиваюсь сейчас, это не понимание того, как PLINQ управляет потоками.WatiN должен работать с состоянием квартиры, установленным в однопоточное состояние (STAThread).Я получаю, что каждый экземпляр IE должен быть в своем собственном потоке, но никакое количество установки каждого потока в запросе PLINQ на правильное состояние квартиры не решает проблему.
Я начинаю подозревать, что мне либо нужночтобы продолжить, узнайте больше о PLINQ или о том, что мне нужно больше узнать об управлении потоками вручную.
Есть мысли?