Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №4
з дисципліни
“ Тестування програмних засобів ”
Львів 2012
Тема: Тестування інтерфейсу користувача.
Мета: Протестувати UI калькулятора Windows в програміському режимі.
Виконання роботи:
Для створення тестів я використав мову програмування С# і фреймворк CUIT. Він дозволяє автоматизовано тестувати інтерфейс користувача, шляхом натискання на елементи керування на формі, зчитувати дані, вводити дані. Результати тестів виводяться в стандартне вікно переглядача тестів MS Visual Studio та записуються в лог файли.
Файл Log.csКлас Log забезпечує ведення логів про виконання тестів
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
namespace TestCalculatorUI
{
static class Log
{
public static void writeFailedMessage(string msg)
{
FileStream aFile = new FileStream(Constants.FAILED_TEST_LOG, FileMode.Append, FileAccess.Write);
System.IO.StreamWriter file;
file = new System.IO.StreamWriter(aFile);
file.WriteLine(msg + "\n");
file.Close();
}
public static void writePassedMessage(string msg)
{
FileStream aFile = new FileStream(Constants.PASSED_TEST_LOG, FileMode.Append, FileAccess.Write);
System.IO.StreamWriter file;
file = new System.IO.StreamWriter(aFile);
file.WriteLine(msg + "\n");
file.Close();
}
private static bool isClear = false;
public static void clearLogs()
{
if (!isClear)
{
isClear = true;
System.IO.File.Create(Constants.PASSED_TEST_LOG).Close();
System.IO.File.Create(Constants.FAILED_TEST_LOG).Close();
writeFailedMessage("Test Standart mode");
writePassedMessage("Test Standart mode");
}
}
}
}
Файл Constants.csКлас Constants доступ до констант
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestCalculatorUI
{
static class Constants
{
public const int TESTS_NUMBER_PER_OPERATION = 100;
public const string PASSED_TEST_LOG = "d:\\CalcUI_passed.log";
public const string FAILED_TEST_LOG = "d:\\CalcUI_failed.log";
}
}
Файл CodedUITest1.csКлас CodedUITest1 представляє кодований тест інтерфейсу користувача
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Input;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
namespace TestCalculatorUI
{
/// <summary>
/// Сводное описание для CodedUITest1
/// </summary>
[CodedUITest]
public class CodedUITest1
{
public CodedUITest1()
{
Log.clearLogs();
}
[TestInitialize]
public void LaunchCalculator()
{
this.UIMap.LaunchCalculator();
}
[TestMethod]
public void TestAnd()
{
this.UIMap.TestAnd();
}
[TestMethod]
public void TestOr()
{
this.UIMap.TestOr();
}
[TestMethod]
public void TestXor()
{
this.UIMap.TestXOr();
}
[TestMethod]
public void TestNot()
{
this.UIMap.TestNot();
}
[TestMethod]
public void TestLsh()
{
this.UIMap.TestLsh();
}
[TestMethod]
public void TestRsh()
{
this.UIMap.TestRsh();
}
[TestCleanup]
public void CloseCalculator()
{
this.UIMap.CloseCalculator();
}
#region Дополнительные атрибуты тестирования
// При написании тестов можно использовать следующие дополнительные атрибуты:
////TestInitialize используется для выполнения кода перед запуском каждого теста
//[TestInitialize()]
//public void MyTestInitialize()
//{
// // Чтобы создать код для этого теста, выберите в контекстном меню команду "Сформировать код для кодированного теста ИП", а затем выберите один из пунктов меню.
// // Дополнительные сведения по сформированному коду см. по ссылке http://go.microsoft.com/fwlink/?LinkId=179463
//}
////TestCleanup используется для выполнения кода после завершения каждого теста
//[TestCleanup()]
//public void MyTestCleanup()
//{
// // Чтобы создать код для этого теста, выберите в контекстном меню команду "Сформировать код для кодированного теста ИП", а затем выберите один из пунктов меню.
// // Дополнительные сведения по сформированному коду см. по ссылке http://go.microsoft.com/fwlink/?LinkId=179463
//}
#endregion
/// <summary>
///Получает или устанавливает контекст теста, в котором предоставляются
///сведения о текущем тестовом запуске и обеспечивается его функциональность.
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
private TestContext testContextInstance;
public UIMap UIMap
{
get
{
if ((this.map == null))
{
this.map = new UIMap();
}
return this.map;
}
}
private UIMap map;
}
}
Файл UIMap.Desinger.csКлас UIMap представляє реалізацію методів тестування класу CodedUITest1
public partial class UIMap
{
/// <summary>
/// CloseCalculator
/// </summary>
public void CloseCalculator()
{
#region Variable Declarations
WinButton uICloseButton = this.UICalculatorWindow.UICalculatorTitleBar.UICloseButton;
#endregion
// Щелкните "Close" кнопка
Mouse.Click(uICloseButton, new Point(31, 11));
}
/// <summary>
/// LaunchCalculator - Используйте "LaunchCalculatorParams" для передачи параметров в этот метод.
/// </summary>
public void LaunchCalculator()
{
// Запуск "%windir%\System32\calc.exe"
ApplicationUnderTest uICalculatorWindow = ApplicationUnderTest.Launch(this.LaunchCalculatorParams.UICalculatorWindowExePath, this.LaunchCalculatorParams.UICalculatorWindowAlternateExePath);
}
#region testing calculator UI
/// <summary>
/// TestAnd
/// </summary>
public void TestAnd()
{
Log.writePassedMessage("-test and in Calculator");
Log.writeFailedMessage("-test and in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uIAndButton = this.UICalculatorWindow.UIItemWindow72.UIAndButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
int number1 = 0;
int number2 = 0;
int sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
number2 = random.Next(0, int.MaxValue);
sum = number1 & number2;
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uIAndButton, new Point(6, 11));
//Ввести перше число
EnterNumber(number2.ToString());
//Натиснути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " & " +number2.ToString() + " - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " & " + number2.ToString() + " - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
/// <summary>
/// TestOr
/// </summary>
public void TestOr()
{
Log.writePassedMessage("-test or in Calculator");
Log.writeFailedMessage("-test or in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uIORButton = this.UICalculatorWindow.UIItemWindow23.UIORButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
int number1 = 0;
int number2 = 0;
int sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
number2 = random.Next(0, int.MaxValue);
sum = number1 | number2;
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uIORButton, new Point(23, 7));
//Ввести перше число
EnterNumber(number2.ToString());
//Натиснути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " | " + number2.ToString() + " - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " | " + number2.ToString() + " - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
/// <summary>
/// TestXor
/// </summary>
public void TestXOr()
{
Log.writePassedMessage("-test xor in Calculator");
Log.writeFailedMessage("-test xor in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uIExclusiveorButton = this.UICalculatorWindow.UIItemWindow32.UIExclusiveorButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
int number1 = 0;
int number2 = 0;
int sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
number2 = random.Next(0, int.MaxValue);
sum = number1 ^ number2;
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uIExclusiveorButton, new Point(9, 13));
//Ввести перше число
EnterNumber(number2.ToString());
//Натиснути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " ^ " + number2.ToString() + " - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ":" + number1.ToString() + " ^ " + number2.ToString() + " - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
/// <summary>
/// TestNot
/// </summary>
public void TestNot()
{
Log.writePassedMessage("-test not in Calculator");
Log.writeFailedMessage("-test not in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uINotButton = this.UICalculatorWindow.UIItemWindow62.UINotButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
int number1 = 0;
int sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
sum = ~number1;
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uINotButton, new Point(12, 10));
//Натиснути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ": !" + number1.ToString() + " - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ": !" + number1.ToString() + " - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
/// <summary>
/// TestLsh
/// </summary>
public void TestLsh()
{
Log.writePassedMessage("-test lsh in Calculator");
Log.writeFailedMessage("-test lsh in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uILeftshiftButton = this.UICalculatorWindow.UIItemWindow52.UILeftshiftButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
Int64 number1 = 0;
Int64 sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
sum = (number1 << 1);
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uILeftshiftButton, new Point(12, 16));
//Ввести перше число
EnterNumber("1");
//Натиснути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ": " + number1.ToString() + " << 1 - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ": " + number1.ToString() + " << 1 - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
/// <summary>
/// TestRsh
/// </summary>
public void TestRsh()
{
Log.writePassedMessage("-test rsh in Calculator");
Log.writeFailedMessage("-test rsh in Calculator");
#region Variable Declarations
WinMenuItem uIProgrammerAlt3MenuItem = this.UICalculatorWindow.UIApplicationMenuBar.UIViewMenuItem.UIProgrammerAlt3MenuItem;
WinButton uIRightshiftButton = this.UICalculatorWindow.UIItemWindow42.UIRightshiftButton;
WinButton uIClearButton = this.UICalculatorWindow.UIItemWindow10.UIClearButton;
WinButton uIEqualsButton = this.UICalculatorWindow.UIItemWindow16.UIEqualsButton;
WinText uIItem0Text = this.UICalculatorWindow.UIItem0Window.UIItem0Text;
bool isOk = true;
Int64 number1 = 0;
Int64 sum = 0;
#endregion
Mouse.Click(uIProgrammerAlt3MenuItem, new Point(51, 12));
Random random = new Random();
//Протестувати випадкові значення
for (int i = 0; i < Constants.TESTS_NUMBER_PER_OPERATION; i++)
{
number1 = random.Next(0, int.MaxValue);
sum = (number1 >> 1);
//Ввести перше число
EnterNumber(number1.ToString());
Mouse.Click(uIRightshiftButton, new Point(12, 10));
//Ввести перше число
EnterNumber("1");
//Натисути дорівнює
Mouse.Click(uIEqualsButton, new Point(21, 22));
if (uIItem0Text.DisplayText == sum.ToString())
{
Log.writePassedMessage("--test_" + i.ToString() + ": " + number1.ToString() + " >> 1 - ok actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
}
else
{
Log.writeFailedMessage("--test_" + i.ToString() + ": " + number1.ToString() + " >> 1 - fail actual:" + uIItem0Text.DisplayText + " expected:" + sum.ToString());
isOk = false;
}
Mouse.Click(uIClearButton, new Point(27, 13));
}
if (!isOk)
{
Assert.Fail();
}
}
#endregion
private void EnterNumber(string num)
{
#region Variable Declarations
WinButton uIItem0Button = this.UICalculatorWindow.UIItemWindow.UIItem0Button;
WinButton uIItem1Button = this.UICalculatorWindow.UIItemWindow1.UIItem1Button;
WinButton uIItem2Button = this.UICalculatorWindow.UIItemWindow2.UIItem2Button;
WinButton uIItem3Button = this.UICalculatorWindow.UIItemWindow3.UIItem3Button;
WinButton uIItem4Button = this.UICalculatorWindow.UIItemWindow4.UIItem4Button;
WinButton uIItem5Button = this.UICalculatorWindow.UIItemWindow5.UIItem5Button;
WinButton uIItem6Button = this.UICalculatorWindow.UIItemWindow6.UIItem6Button;
WinButton uIItem7Button = this.UICalculatorWindow.UIItemWindow7.UIItem7Button;
WinButton uIItem8Button = this.UICalculatorWindow.UIItemWindow8.UIItem8Button;
WinButton uIItem9Button = this.UICalculatorWindow.UIItemWindow9.UIItem9Button;
#endregion
for (int j = 0; j < num.Length; j++)
{
switch (num[j])
{
case '0':
Mouse.Click(uIItem0Button, new Point(41, 20));
break;
case '1':
Mouse.Click(uIItem1Button, new Point(18, 17));
break;
case '2':
Mouse.Click(uIItem2Button, new Point(22, 19));
break;
case '3':
Mouse.Click(uIItem3Button, new Point(14, 16));
break;
case '4':
Mouse.Click(uIItem4Button, new Point(18, 18));
break;
case '5':
Mouse.Click(uIItem5Button, new Point(23, 18));
break;
case '6':
Mouse.Click(uIItem6Button, new Point(13, 11));
break;
case '7':
Mouse.Click(uIItem7Button, new Point(18, 15));
break;
case '8':
Mouse.Click(uIItem8Button, new Point(17, 15));
break;
case '9':
Mouse.Click(uIItem9Button, new Point(11, 15));
break;
}
}
}
Висновок: В даній лабораторній роботі я провів тестування інтерфейсу користувача програми «калькулятор». Тестування показало відсутність помилок.